Як запустити Xvfb при запуску на Debian?


9

У мене є веб-сервер Debian, який я використовую для епізодичного вискоблювання екрана через Selenum та Python.

Я використовую Xvfb як віртуальний сервер X для запуску Firefox, коли контролюється Selenium. Зважаючи на те, що я (думаю), що я повинен почати це з використання sudo, я не думаю, що це буде можливим кожного разу запускати його з Python (дивіться моє запитання про переповнення стека ), тому я зрозумів, що я можу просто працювати все це час .

Я зараз запускаю його так у командному рядку:

sudo Xvfb :99 -nolisten tcp -fbdir /var/run

Який метод я повинен використовувати, щоб зробити це автоматично при запуску? Чи варто використовувати cron, як тут запропоновано ?

Відповіді:


6

На debian можна додати команду Xvfb /etc/rc.local. Якщо Xvfb не відривається від фону, використовуйте &в кінці команди.

Використання cron теж би спрацювало, хоча сценарії init дають вам більше контролю над тим, коли саме в послідовності запуску він буде працювати, і є традиційним способом запуску сервісів.


Ага, чудово. Чи редагування /etc/rc.localвважають за краще використовувати update-rc.dз власними індивідуальними сценаріями?
Пол Д. Уейт

2
@Paul я б сказав, що update-rc.dє кращим і, безумовно, більш здатним, але rc.localшвидше і простіше. Крім того, я вважаю, що Жилл має рацію, немає жодної причини, щоб це потрібно запускати як root.
Енді

4

Ваша передумова недійсна: немає підстав запускати Xvfb як root. Ваш звичайний X-сервер повинен запускатися лише як root (на багатьох, але не на всіх уніках), щоб він мав доступ до апаратного забезпечення відео; це не проблема для Xvfb за визначенням.

Якщо ви хочете запустити Xvfb при запуску, ви можете використовувати cron із @rebootзаміною п'яти полів дати та часу. Це можна зробити в будь-якому кронт-коді користувача, а не тільки в кореневому. Але я не бачу сенсу. Ваші сценарії були б більш надійними, якби ви запустили Xvfb тоді, коли вам це потрібно, саме так, як ви, здається, спочатку планували.


Дійсна точка. Для запуску Xvfb лише для однієї команди ви можете використовувати xvfb-runкоманду, яка зазвичай постачається з Xvfb. Ось посилання на xvfb-run кліп для manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html . @Paul ви можете запустити його наступним чином:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
sebisnow

4

Як запропонував @Gilles , він більше підходить для запуску на вимогу, особливо коли ви використовуєте його для тестування Selenium. Ось приклад команд оболонки:

export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &

Перевірка дисплея за допомогою xdpyinfoраніше гарантуватиме, що ви не будете запускати віртуальний фреймбуфер двічі.


Якщо вам дійсно потрібно запустити його при запуску, ви можете спробувати такий сценарій init.d :

#!/bin/sh
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac

exit 0

Джерело: dloman / xvfb в GitHub (роздвоєне від: jterrace / xvfb )

Збережіть його як /etc/init.d/xvfbі зробіть його виконуваним, а потім запустіть як:

/etc/init.d/xvfb start

Щоб автоматично запустити при запуску, запустіть:

sudo update-rc.d xvfb defaults

Щоб видалити його з автозапуску, запустіть:

sudo update-rc.d -f xvfb remove

Також додайте у environmentфайл, який слід розпізнати програмами X, наприклад:

echo DISPLAY=":1" | sudo tee -a /etc/environment

Ось версія для системної версії: dloman / xvfb.service .


Я знаю, що це рік, але, здається, не можна отримати версію селену javascript для роботи з цим. Якщо я запускаю після завантаження, він працює, але коли я запускаю його як сервіс, він ніби не виявляє xvfb. Будь-яка ідея, як я можу змусити обох працювати як послуги на старті?
Масінде Муліро

@MasindeMuliro Ви можете задати ще одне запитання, тож відповіді можна буде оновити, щоб відповідати конкретній проблемі.
kenorb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.