Как сделать отображение Xvfb видимым?
Я запускаю селен через Xvfb на дисплейном номере: 99 вот так:
/usr/bin/Xvfb: 99 -ac -screen 0 1024x768x8 и экспортировать DISPLAY = ": 99" && & Java -jar/usr/lib/selenium/selenium-server-standalone-2.24.1.jar -порт 4444
Однако отображение с номером, отличным от: 0, по умолчанию не отображается. Как сделать видимым, чтобы увидеть, что делает селен в браузере?
Ответы
Ответ 1
Это виртуальный. На странице man Xvfb(1)
:
Xvfb - это X-сервер, который может работать на машинах без оборудования отображения и без физических устройств ввода. Он эмулирует тупой фреймбуфер с использованием виртуальной памяти.
Также на странице руководства:
Xvfb -pixdepths 3 27 -fbdir /var/tmp
Сервер будет прослушивать подключения в качестве номера сервера 0, будет иметь конфигурацию экрана по умолчанию (один экран, 1280x1024x8), также будет поддерживать глубину карт изображений 3 и 27 и будет использовать памяти в /var/tmp для фреймбуфера.
xwud -in /var/tmp/Xvfb_screen0
Отображает экран 0 сервера, запущенный в предыдущем примере.
Ответ 2
Вы можете получить живой просмотр, запустив VNC-сервер против дисплея Xvfb, например:
x11vnc -display :99 -localhost &
vncviewer :0
Ответ 3
Все, что вам нужно, это установить x11vnc
через:
sudo apt-get install x11vnc xvfb fluxbox
При желании установите Fluxbox, чтобы иметь простой оконный менеджер.
Затем, чтобы настроить доступ к Xvfb для удаленного управления, вы можете использовать X11 через SSH или VNC через SSH, например
export DISPLAY=:1
Xvfb $DISPLAY -screen 0 1024x768x16 &
fluxbox &
x11vnc -display $DISPLAY -bg -forever -nopw -quiet -listen localhost -xkb
Вот версия, удобная для скриптов:
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))"
Примечание: я использую его в следующем проекте Docker (проверьте .funcs.cmds.inc.sh
).
Если ваш Xvfb прослушивает только localhost, вы можете настроить туннелирование на localhost, чтобы vncviewer мог подключиться к localhost, чтобы получить удаленный контроль над сервером. Например
ssh -N -T -L 5900:localhost:5900 [email protected] &
vncviewer -encodings 'copyrect tight zrle hextile' localhost:5900
Или, чтобы прослушать все адреса с паролем, используйте:
x11vnc -display :0.0 -usepw
Чтобы установить пароль, запустите: x11vnc -storepasswd
.
Смотрите: Удаленное управление SSH на странице Википедии Xvfb
Или вы можете использовать следующий однострочник:
$ 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
запускает Xvfb -
X11VNC_FINDDISPLAY_ALWAYS_FAILS=1
позволяет перейти в созданный сеанс Xvfb (отображение :1
а не :0
что будет обычным рабочим столом) -
FD_PROG=/usr/bin/fluxbox
Fluxbox (Ubuntu, должен иметь фоновый логотип Ubuntu) -
X11VNC_CREATE_GEOM=${1:-1024x768x16}
устанавливает экран в 16- X11VNC_CREATE_GEOM=${1:-1024x768x16}
цвет 1024x768 -
-gone
при выходе, иначе Xvfb остаётся позади (убийство xvfb
также убивает fluxbox
)
Проверьте также:
Ответ 4
Простое решение также состоит в том, чтобы постоянно делать скриншоты программы следующим образом:
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
Примечание: требуется установить imagemagick и feh