How to make Xvfb display visible?

前端 未结 4 1420
面向向阳花
面向向阳花 2020-12-01 00:56

I am running selenium through Xvfb on display number :99 like this:

/usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 & export DISPLAY=\":99\" &&

相关标签:
4条回答
  • 2020-12-01 01:26

    You can get a live view by running a VNC server against the Xvfb display, like this:

    x11vnc -display :99 -localhost &
    vncviewer :0
    
    0 讨论(0)
  • 2020-12-01 01:29

    A simple solution is also to constantly take screenshots of the program like this:

    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: requires to install imagemagick and feh

    0 讨论(0)
  • 2020-12-01 01:33

    It's virtual. From the man page Xvfb(1):

    Xvfb is an X server that can run on machines with no display hardware and no physical input devices. It emulates a dumb framebuffer using virtual memory.

    Also in the man page:

    Xvfb -pixdepths 3 27 -fbdir /var/tmp The server will listen for connections as server number 0, will have the default screen configuration (one screen, 1280x1024x8), will also support pixmap depths of 3 and 27, and will use memory mapped files in /var/tmp for the framebuffer.

    xwud -in /var/tmp/Xvfb_screen0 Displays screen 0 of the server started by the preceding example.

    0 讨论(0)
  • 2020-12-01 01:34

    Use X11vnc

    All you need is to install x11vnc via:

    sudo apt-get install x11vnc xvfb fluxbox
    

    Optionally install fluxbox to have simple window manager.

    Run x11vnc in shell

    Then to setup access to Xvfb for remote control, you can use X11 over SSH or VNC over SSH, e.g.

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

    Run x11vnc using script

    Here is script friendly version to run Xvfb, x11vnc and fluxbox:

    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))"
    

    Note: I'm using it in the following Docker project (check .funcs.cmds.inc.sh).

    Run x11vnc using one-liner

    Or you can use the following one-liner:

    $ 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 makes it start Xvfb
    • X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 makes it goto the created Xvfb session (Display :1 rather than :0 which will be normal desktop)
    • FD_PROG=/usr/bin/fluxbox makes it fire up Fluxbox (Ubuntu's one, should have background Ubuntu logo)
    • X11VNC_CREATE_GEOM=${1:-1024x768x16} sets screen to 16bit colour 1024x768
    • -gone cleans up when it exits as otherwise Xvfb is left behind (killing xvfb also kills fluxbox)

    Connect to VNC

    If your Xvfb listen on localhost only, you can setup tunneling to localhost, so a vncviewer can then connect to localhost to get remote control over the server. E.g.

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

    Or to listen on all addresses with password, use:

    x11vnc -display :0.0 -usepw
    

    To setup password, run: x11vnc -storepasswd.

    See: Remote control over SSH at Xvfb Wikipedia page


    Check also:

    • Using VNCserver + GUI application + Virtual Display in Docker container
    • Ubuntu Fluxbox GUI with x11vnc and Xvfb
    0 讨论(0)
提交回复
热议问题