web-dev-qa-db-fra.com

Comment rendre l'affichage Xvfb visible?

Je suis en cours d'exécution de sélénium par Xvfb sur le nombre d'affichage: 99 comme ceci:

/ usr/bin/Xvfb: 99 -ac -screen 0 1024x768x8 & export DISPLAY = ": 99" && Java -jar /usr/lib/Selenium/selenium-server-standalone-2.24.1.jar -port 4444

Cependant, l'affichage avec un numéro autre que: 0 n'est pas visible par défaut. Comment puis-je le rendre visible pour voir réellement ce que Selenium fait dans le navigateur?

24
Dziamid

C'est virtuel. De la page de manuel Xvfb(1):

Xvfb est un serveur X pouvant fonctionner sur des machines sans matériel d'affichage ni périphérique d'entrée physique. Il émule un framebuffer muet utilisant la mémoire virtuelle.

Également dans la page de manuel:

Xvfb -pixdepths 3 27 -fbdir /var/tmp Le serveur écoutera les connexions en tant que numéro de serveur 0, aura la configuration d'écran par défaut (un écran, 1280x1024x8), supportera également les profondeurs de pixmap de 3 et 27, et utilisera Les fichiers mappés en mémoire dans/var/tmp pour le framebuffer.

xwud -in /var/tmp/Xvfb_screen0 Affiche l'écran 0 du serveur démarré par l'exemple précédent.

14
hroptatyr

Vous pouvez obtenir une vue en direct en exécutant un serveur VNC sur l'affichage Xvfb, comme ceci:

x11vnc -display :99 -localhost &
vncviewer :0
28
seanf

Tout ce dont vous avez besoin est d'installer x11vnc via:

Sudo apt-get install x11vnc xvfb fluxbox

Installez éventuellement Fluxbox pour avoir un gestionnaire de fenêtres simple.


Ensuite, pour configurer l’accès à Xvfb pour le contrôle à distance, vous pouvez utiliser X11 sur SSH ou VNC sur SSH, par exemple.

export DISPLAY=:1
Xvfb $DISPLAY -screen 0 1024x768x16 &
fluxbox &
x11vnc -display $DISPLAY -bg -forever -nopw -quiet -listen localhost -xkb

Voici la version conviviale du script:

export DISPLAY=${DISPLAY:-:0} # Select screen 0 by default.
xdpyinfo
if which x11vnc &>/dev/null; then
  ! pgrep -a x11vnc && x11vnc -bg -forever -nopw -quiet -display WAIT$DISPLAY &
fi
! pgrep -a Xvfb && Xvfb $DISPLAY -screen 0 1024x768x16 &
sleep 1
if which fluxbox &>/dev/null; then
  ! pgrep -a fluxbox && fluxbox 2>/dev/null &
fi
echo "IP: $(hostname -I) ($(hostname))"

Si votre Xvfb écoute uniquement sur localhost, vous pouvez configurer le tunneling vers localhost afin qu'un vncviewer puisse ensuite se connecter à localhost pour obtenir le contrôle à distance du serveur. Par exemple.

ssh -N -T -L 5900:localhost:5900 user@remotehost &
vncviewer -encodings 'copyrect tight zrle hextile' localhost:5900

Ou pour écouter toutes les adresses avec un mot de passe, utilisez:

x11vnc -display :0.0 -usepw

Pour configurer le mot de passe, exécutez: x11vnc -storepasswd.

Voir: Contrôle à distance via SSH sur la page Wikipedia Xvfb


Ou vous pouvez utiliser le one-liner suivant:

$ x11vnc -create -env FD_PROG=/usr/bin/fluxbox \
    -env X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 \
        -env X11VNC_CREATE_GEOM=${1:-1024x768x16} \
        -gone 'killall Xvfb' \
        -bg -nopw
  • -create le fait démarrer Xvfb
  • X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 permet d'accéder à la session Xvfb créée (affichez :1 plutôt que :0 qui correspond au bureau normal)
  • FD_PROG=/usr/bin/fluxbox le fait démarrer Fluxbox (celui d'Ubuntu, devrait avoir le logo Ubuntu en arrière-plan)
  • X11VNC_CREATE_GEOM=${1:-1024x768x16} définit l'écran en couleur 16 bits 1024x768
  • -gone nettoie à sa sortie, sinon Xvfb est laissé derrière (tuer xvfb tue aussi fluxbox)

Voir: Interface graphique Ubuntu Fluxbox avec x11vnc et Xvfb

17
kenorb

Une solution simple consiste également à prendre en permanence des captures d'écran du programme comme ceci:

while /bin/true; do
    DISPLAY=:99 import -window root ~/Pictures/xvfb_screenshot.png
    sleep 0.1
done &
PID=$!
feh --reload 0.1 ~/Pictures/xvfb_screenshot.png 2>/dev/null
kill $PID

Note: nécessite d'installer imagemagick et feh

0
user8162