Jak uruchomić przeglądarkę chromową w trybie bezgłowym? brak rozszerzenia „RANDR” na wyświetlaczu „: 99”

7

Ubuntu

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:    14.04
Codename:   trusty

Chrom

chromium-browser --version
Chromium 48.0.2564.116 Ubuntu 14.04

Podaję aplikację internetową Flask localhosti chcę przeglądać ją w trybie bezgłowym.

Podążając za tym tropem w stosie

Warunek wstępny

$ apt-get install xvfb imagemagick

X wirtualny bufor ramki xvfb-run

Uruchamianie Chromium z następującymi opcjami

--allow-running-insecure-content    // trying to get passed
--ignore-certificate-errors         // the self-signed certs
--ignore-urlfetcher-cert-requests   //
--disable-gpu                       
--no-sandbox                        

Komenda

 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: brak rozszerzenia „RANDR” na wyświetlaczu „: 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)

Bez --disable-gpui--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.

AKTUALIZACJA 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

coraz

[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

Próbowałem też z 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

Wersja

google-chrome --version
Google Chrome 49.0.2623.110 

i otrzymuję te same błędy, w tym extension "RANDR" missing on display ":99".

Powiązane posty

any-way-to-start-google-chrome-in-head-mode

How-to-Add-the-Missing-Randr-Extension

Nie można uruchomić Chrome-Ubuntu

zabumba
źródło

Odpowiedzi:

10

Zrobiłem coś podobnego na dystrybucji Linuksa innej niż Ubuntu. Do celów testowych użyję mojego HTPC z systemem Ubuntu (14.04), aby upewnić się, że działa tam również przy minimalnych zmianach.

Informacje o Distro

htpc@HTPC:[~]:$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty

Upewnij się, że ekran, którego chcemy użyć, nie jest jeszcze obecny

htpc@HTPC:[~]:$ DISPLAY=:1 xset q
xset:  unable to open display ":1"

Uruchamianie Xvfb

Sudo nie jest potrzebne. Uruchamiam go jako ten sam użytkownik, który również uruchamia przeglądarkę.

Xvfb :1 -screen 0 '1280x1024x16' -ac &> /dev/null &

Upewnij się, że wyświetlacz jest obecny i należy do ciebie

htpc@HTPC:[~]:$ ls -l /tmp/.X11-unix/X1
srwxrwxrwx 1 htpc htpc 0 Apr 15 11:37 /tmp/.X11-unix/X1

Eksportuj bieżący ekran do : 1, który właśnie utworzyliśmy.

Możemy również dodać DISPLAY =: 1 przed każdym poleceniem, które chcemy uruchomić na wyświetlaczu. Jednak eksportowanie upewnia się, że zostanie zapisane dla bieżącej sesji, więc nie musisz podawać go dla każdego polecenia.

export DISPLAY=:1

Kolejne sprawdzenie, czy ekran jest obecny i działa (a także, czy działa bit eksportu)

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

Dodatkowy krok debugowania

Będę uruchamiał nc, który wypisze pełne słowa, jeśli Chrome spróbuje się z nim skontaktować. Będziemy więc wiedzieć, czy ta konfiguracja działa. Innym sposobem jest uruchomienie serwera VNC na tym samym ekranie i połączenie się z nim, aby zobaczyć, co robi przeglądarka i czy Chrome uruchamia się poprawnie. Które poleciłbym! Chrome może powodować różne błędy w interfejsie użytkownika, których nie widać w konsoli w twoim przypadku.

htpc@HTPC:[~]:$ echo Testing... | nc -l 9999 -v &
[2] 8416
htpc@HTPC:[~]:$ Listening on [0.0.0.0] (family 0, port 9999)

Czas uruchomić 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

Jak widać powyżej błąd RANDR, który nadal występuje, po prostu zignoruj ​​go. Poniżej widać żądanie HTTP wykonane przez Chrome (patrz bit User-Agent) do rozpoczętego przez nas procesu nc . Wygląda na to, że Chrome uruchamia się zgodnie z oczekiwaniami i odwiedza podany adres URL.

Próbuję tego samego z 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

Wykonanie tego samego ma prawie taki sam efekt, z kilkoma innymi dodatkowymi ostrzeżeniami. User-Agent to Chromium zgodnie z oczekiwaniami.

Dodatkowy

Jeśli chcesz, aby wszystko działało, nie zapomnij wydać polecenia disown na proces i utrzymuj je w tle, aby upewnić się, że nie zostaną zabite podczas wylogowywania. Zobacz http://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/, aby uzyskać więcej informacji o disown .

Serrie
źródło
Czy masz ochotę uruchomić chromium-browseri opublikować wynik? dzięki za szczegółową odpowiedź. Naprawdę miłe!
zabumba
1
Na żądanie dodałem blok z chromem. Zobacz post po szczegóły.
Serrie,
1
Nie wydaje się tak. Polecam korzystanie z serwera VNC, abyś mógł zobaczyć, co faktycznie dzieje się na ekranie wirtualnym. Daj mi znać, jeśli nie możesz zmusić VNC do działania.
Serrie,
Skonfigurowałem serwer VNC, vncserverjest włączony :2, jak uruchomić go na wirtualnym buforze ramek. Próbowałem, vncserver :1ale klient VNC nie wydaje się być w stanie połączyć
zabumba
1
Tak, to zadziała. x11vncumożliwia hostowanie dowolnego ekranu działającego już w X za pośrednictwem protokołu VNC, podczas gdy vncserverautomatycznie uruchamia wirtualny wyświetlacz. Wystarczy uruchomić vncserver, aby uruchomić pusty ekran. W moim przypadku zaczyna się o 1, :2ponieważ :1jest już w użyciu. Po prostu eksportowanie DISPLAYdo poprzedniej wersji :2i uruchamianie chromium-browserpowinno działać vncserver.
Serrie,