Как сделать отображение Xvfb видимым?

Я запускаю селен через Xvfb на дисплее с номером 99 следующим образом:

/ 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

Однако дисплей с номером, отличным от: 0, по умолчанию не отображается. Как сделать его видимым, чтобы увидеть, что селен делает в браузере?


person Dziamid    schedule 21.08.2012    source источник


Ответы (4)


Это виртуально. На странице руководства Xvfb(1):

Xvfb - это X-сервер, который может работать на машинах без оборудования отображения и физических устройств ввода. Он эмулирует тупой фреймбуфер с использованием виртуальной памяти.

Также на странице руководства:

Xvfb -pixdepths 3 27 -fbdir /var/tmp Сервер будет прослушивать соединения как сервер с номером 0, будет иметь конфигурацию экрана по умолчанию (один экран, 1280x1024x8), также будет поддерживать глубину растрового изображения 3 и 27 и будет использовать файлы с отображением памяти в / var / tmp для фреймбуфера.

xwud -in /var/tmp/Xvfb_screen0 Отображает экран 0 сервера, запущенного в предыдущем примере.

person hroptatyr    schedule 21.08.2012
comment
xwud - это как утилита для создания снимков экрана для виртуальных экранов, верно? - person Dziamid; 21.08.2012
comment
xwud - это средство отмены, xwd (Дамп X Window) - это универсальная утилита для создания снимков экрана для любого экрана / отображения X. Однако особенность Xvfb заключается в том, что его содержимое уже является xwd файлами дампа (если вы так говорите, то есть через -fbdir). - person hroptatyr; 21.08.2012

Используйте X11vnc.

Все, что вам нужно, это установить x11vnc через:

sudo apt-get install x11vnc xvfb fluxbox

При желании установите fluxbox, чтобы иметь простой оконный менеджер.

Запустить x11vnc в оболочке

Затем, чтобы настроить доступ к Xvfb для удаленного управления, вы можете использовать X11 через SSH или VNC через SSH, например

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

Запустить x11vnc с помощью скрипта

Вот версия, удобная для сценариев для запуска Xvfb, x11vnc и 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))"

Примечание. Я использую его в следующем проекте Docker (проверьте _10 _). < / sup>

Запустить x11vnc с однострочным текстом

Или вы можете использовать следующий однострочник:

$ 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-битный цвет экрана 1024x768
  • -gone очищается при выходе, иначе Xvfb остается позади (убийство xvfb также убивает fluxbox)

Подключиться к VNC

Если ваш Xvfb прослушивает только localhost, вы можете настроить туннелирование на localhost, чтобы vncviewer мог затем подключиться к localhost для получения удаленного управления сервером. Например.

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

Или, чтобы прослушивать все адреса с паролем, используйте:

x11vnc -display :0.0 -usepw

Чтобы установить пароль, запустите: x11vnc -storepasswd.

См. Удаленное управление через SSH на странице Xvfb в Википедии.


Также проверьте:

person kenorb    schedule 18.11.2016
comment
Это должен быть предпочтительный ответ, поскольку он хорошо округлен. Охватывает все аспекты подключения к вашему кадровому буферу локально, через туннель и удаленно. Спасибо @kenorb - person Ransom; 08.04.2019

Вы можете получить изображение в реальном времени, запустив сервер VNC на дисплее Xvfb, например:

x11vnc -display :99 -localhost &
vncviewer :0
person seanf    schedule 10.02.2015
comment
Если я запускаю Selenium + x11vnc на узле Jenkins, могу ли я удаленно просмотреть, что происходит? Могу ли я запустить vncviewer локально и указать его на узел Jenkins? - person Mike R; 28.04.2016
comment
@MikeR в принципе да, но аргумент -localhost означает, что x11vnc доступен только с localhost, поэтому вам, вероятно, потребуются другие аргументы для x11vnc и, возможно, открытый порт брандмауэра. В качестве альтернативы вы можете настроить прокси для порта VNC, например туннель ssh. - person seanf; 03.05.2016
comment
@seanf Я вижу черный экран вместо браузера. Не могли бы вы взглянуть на эту проблему? stackoverflow.com/questions/63935935/ - person Afsal; 17.09.2020

Простое решение - также постоянно делать скриншоты программы следующим образом:

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

person user8162    schedule 16.02.2018