Как запустить Chromium-браузер в автономном режиме? расширение "RANDR" отсутствует на дисплее ":99"
Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
хром
chromium-browser --version
Chromium 48.0.2564.116 Ubuntu 14.04
Я работаю с веб-приложением Flask на localhost
и я хочу перейти к нему в режиме без головы.
Следуя этому примеру в стеке потока
необходимое условие
$ apt-get install xvfb imagemagick
X виртуальный фрейм-буфер xvfb-run
Запуск Chromium со следующими параметрами
--allow-running-insecure-content // trying to get passed
--ignore-certificate-errors // the self-signed certs
--ignore-urlfetcher-cert-requests //
--disable-gpu
--no-sandbox
команда
xvfb-run --server-args='-screen 0, 1024x768x24' chromium-browser --allow-running-insecure-content --ignore-certificate-errors --ignore-urlfetcher-cert-requests --disable-gpu --no-sandbox https://admin:password@localhost
Xlib: расширение "RANDR" отсутствует на дисплее ":99".
[2596:2596:0407/170544:ERROR:browser_main_loop.cc(206)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
Xlib: extension "RANDR" missing on display ":99".
Xlib: extension "RANDR" missing on display ":99".
[2596:2596:0407/170544:ERROR:desktop_window_tree_host_x11.cc(892)] Not implemented reached in virtual void views::DesktopWindowTreeHostX11::InitModalType(ui::ModalType)
[2596:2596:0407/170545:ERROR:logging.h(808)] Failed to call method: org.freedesktop.DBus.ObjectManager.GetManagedObjects: object_path= /: org.freedesktop.DBus.Error.UnknownMethod: Method "GetManagedObjects" with signature "" on interface "org.freedesktop.DBus.ObjectManager" doesn't exist
[2596:2596:0407/170545:ERROR:logging.h(808)] Failed to call method: org.freedesktop.DBus.ObjectManager.GetManagedObjects: object_path= /: org.freedesktop.DBus.Error.UnknownMethod: Method "GetManagedObjects" with signature "" on interface "org.freedesktop.DBus.ObjectManager" doesn't exist
[2596:2596:0407/170629:ERROR:chrome_browser_main_extra_parts_x11.cc(62)] X IO error received (X server probably went away)
Без --disable-gpu
а также --no-sandbox
[3122:3122:0407/172728:ERROR:sandbox_linux.cc(338)] InitializeSandbox() called with multiple threads in process gpu-process
[3062:3099:0407/172728:ERROR:browser_gpu_channel_host_factory.cc(144)] Failed to create channel.
ОБНОВЛЕНИЕ 20160407
$ sudo Xvfb :1 -screen 0 1024x768x24 -ac +extension GLX +extension RANDR +render -noreset &
$ export DISPLAY=":1"
$ chromium-browser --allow-running-insecure-content --ignore-certificate-errors --ignore-urlfetcher-cert-requests --disable-gpu --no-sandbox https://admin:password@localhost
получение
[3413:3413:0407/174058:ERROR:browser_main_loop.cc(206)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[3413:3413:0407/174058:ERROR:browser_main_loop.cc(256)] Gtk: cannot open display: :1
[3422:3422:0100/000000:ERROR:zygote_linux.cc(674)] write: Broken pipe
Также пробовал с google-chrome
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get install google-chrome-stable
Версия
google-chrome --version
Google Chrome 49.0.2623.110
и я получаю те же ошибки, в том числе extension "RANDR" missing on display ":99".
Похожие сообщения
любой-путь-начало-Google-хром-в-обезглавленный режим
1 ответ
Я сделал нечто подобное в дистрибутиве не-Ubuntu Linux. В целях тестирования я буду использовать мой HTPC под управлением Ubuntu (14.04), чтобы убедиться, что он работает там также с минимальными изменениями.
Дистро Информация
htpc@HTPC:[~]:$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
Убедитесь, что нужного нам дисплея пока нет
htpc@HTPC:[~]:$ DISPLAY=:1 xset q
xset: unable to open display ":1"
Начиная Xvfb
Судо не нужно. Я запускаю его как тот же пользователь, который также запускает браузер.
Xvfb :1 -screen 0 '1280x1024x16' -ac &> /dev/null &
Убедитесь, что дисплей присутствует и принадлежит вам
htpc@HTPC:[~]:$ ls -l /tmp/.X11-unix/X1
srwxrwxrwx 1 htpc htpc 0 Apr 15 11:37 /tmp/.X11-unix/X1
Экспорт текущего отображения в :1, который мы только что создали.
Мы также можем добавить DISPLAY=:1 перед каждой командой, которую мы хотим запустить на дисплее. Однако экспорт гарантирует, что он будет сохранен для текущего сеанса, поэтому вам не нужно указывать его для каждой команды.
export DISPLAY=:1
Еще одна проверка, чтобы убедиться, что экран присутствует и работает (а также что бит экспорта работает)
htpc@HTPC:[~]:$ xset q
Keyboard Control:
auto repeat: on key click percent: 0 LED mask: 00000000
XKB indicators:
00: Caps Lock: off 01: Num Lock: off 02: Scroll Lock: off
03: Compose: off 04: Kana: off 05: Sleep: off
06: Suspend: off 07: Mute: off 08: Misc: off
09: Mail: off 10: Charging: off 11: Shift Lock: off
12: Group 2: off 13: Mouse Keys: off
auto repeat delay: 660 repeat rate: 25
auto repeating keys: 00ffffffdffffbbf
fadfffefffedffff
9fffffffffffffff
fff7ffffffffffff
bell percent: 50 bell pitch: 400 bell duration: 100
Pointer Control:
acceleration: 2/1 threshold: 4
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 600 cycle: 600
Colors:
default colormap: 0x20 BlackPixel: 0x0 WhitePixel: 0xffff
Font Path:
/usr/share/fonts/X11/misc,/usr/share/fonts/X11/Type1,built-ins
DPMS (Energy Star):
Display is not capable of DPMS
Дополнительный шаг отладки
Я буду запускать nc, который будет печатать многословно, если Chrome попытается связаться с ним. Итак, мы будем знать, работает ли эта настройка. Другой способ - запустить VNC- сервер на том же дисплее и подключиться к нему, чтобы вы могли видеть, что делает браузер и правильно ли запускается Chrome. Который я бы порекомендовал! Chrome может выдавать разные ошибки в пользовательском интерфейсе, которые не видны в консоли в вашем случае.
htpc@HTPC:[~]:$ echo Testing... | nc -l 9999 -v &
[2] 8416
htpc@HTPC:[~]:$ Listening on [0.0.0.0] (family 0, port 9999)
Время запустить Chrome!
htpc@HTPC:[~]:$ google-chrome --disable-gpu 'http://localhost:9999' &
[3] 8512
htpc@HTPC:[~]:$ [8512:8512:0415/115726:ERROR:browser_main_loop.cc(271)] Gtk: Locale not supported by C library.
Using the fallback 'C' locale.
Xlib: extension "RANDR" missing on display ":1".
Xlib: extension "RANDR" missing on display ":1".
Connection from [127.0.0.1] port 9999 [tcp/*] accepted (family 2, sport 40050)
GET / HTTP/1.1
Host: localhost:9999
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Как вы можете видеть выше, ошибка RANDR все еще присутствует, просто игнорируйте ее. Ниже вы видите HTTP-запрос, выполненный Chrome (см. Бит User-Agent) к процессу nc, который мы запустили. Кажется, Chrome запускается, как и ожидалось, и посещает предоставленный URL
Попробовать то же самое с Chromium
htpc@HTPC:[~]:$ chromium-browser --disable-gpu 'http://localhost:9999' &
[3] 13108
htpc@HTPC:[~]:$ Xlib: extension "RANDR" missing on display ":1".
Xlib: extension "RANDR" missing on display ":1".
[13108:13108:0415/145854:ERROR:logging.h(813)] Failed to call method: org.freedesktop.DBus.ObjectManager.GetManagedObjects: object_path= /: org.freedesktop.DBus.Error.UnknownMethod: Method "GetManagedObjects" with signature "" on interface "org.freedesktop.DBus.ObjectManager" doesn't exist
Connection from [127.0.0.1] port 9999 [tcp/*] accepted (family 2, sport 40542)
[13108:13108:0415/145854:ERROR:logging.h(813)] Failed to call method: org.freedesktop.DBus.ObjectManager.GetManagedObjects: object_path= /: org.freedesktop.DBus.Error.UnknownMethod: Method "GetManagedObjects" with signature "" on interface "org.freedesktop.DBus.ObjectManager" doesn't exist
GET / HTTP/1.1
Host: localhost:9999
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108 Chrome/49.0.2623.108 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Делать то же самое имеет почти такой же эффект с некоторыми другими дополнительными предупреждениями. Пользователь-агент - это Chromium, как и ожидалось.
дополнительный
Если вы хотите, чтобы все это работало, не забудьте выполнить команду disown для каждого процесса и оставить их запущенными в фоновом режиме, чтобы они не были уничтожены при выходе из системы. См. http://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/ для получения дополнительной информации об отречении.