$ 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
Je sers une application Web Flask sur localhost
et je souhaite y accéder en mode sans tête.
Après ceci lead on stackoverflow
$ apt-get install xvfb imagemagick
xvfb-run
Lancer Chromium avec les options suivantes
--allow-running-insecure-content // trying to get passed
--ignore-certificate-errors // the self-signed certs
--ignore-urlfetcher-cert-requests //
--disable-gpu
--no-sandbox
la commande
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
[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
et --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.
$ 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
obtenir
[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
Également essayé avec 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
Version
google-chrome --version
Google Chrome 49.0.2623.110
et j'obtiens les mêmes erreurs, y compris extension "RANDR" missing on display ":99".
peu importe le moyen de démarrer, google-chrome-in-headless-mode
J'ai fait quelque chose de similaire sur une distribution Linux non-Ubuntu. À des fins de test, j'utiliserai mon HTPC sous Ubuntu (14.04) pour m'assurer qu'il fonctionne également avec des modifications minimes.
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"
Sudo n'est pas nécessaire. Je l'exécute en tant que même utilisateur qui lance également le navigateur.
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
Nous pouvons également ajouter DISPLAY =: 1 avant chaque commande que nous souhaitons exécuter à l'écran. Cependant, l'exportation garantit que celui-ci sera enregistré pour la session en cours afin que vous n'ayez pas à le fournir pour chaque commande.
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
Je vais courir nc ce qui imprimera verbalement si Chrome essaie de le contacter. Nous saurons donc si cette configuration fonctionne. Une autre méthode consiste à exécuter un serveur VNC sur le même écran et à vous y connecter afin que vous puissiez voir ce que fait le navigateur et savoir si Chrome démarre correctement. Ce que je recommanderais! Chrome peut générer différentes erreurs dans l'interface utilisateur qui ne sont pas visibles dans la console dans votre cas.
htpc@HTPC:[~]:$ echo Testing... | nc -l 9999 -v &
[2] 8416
htpc@HTPC:[~]:$ Listening on [0.0.0.0] (family 0, port 9999)
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
Comme vous pouvez le voir ci-dessus, l'erreur RANDR est toujours présente, ignorez-la simplement. Ci-dessous, vous voyez la requête HTTP effectuée par Chrome (voir bit Utilisateur-Agent) sur le nc processus que nous avons commencé. Semble Chrome démarre comme prévu et visite l'URL fournie.
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
Faire la même chose a à peu près le même effet, avec quelques autres avertissements supplémentaires. L'utilisateur est en chrome comme prévu.
Si vous voulez que tout continue à fonctionner, n'oubliez pas de lancer la commande disown par processus et de les laisser fonctionner en arrière-plan pour vous assurer qu'ils ne le sont pas. tué quand vous vous déconnectez. Voir http://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/ pour plus d'informations sur disown .