Mam serwer WWW Debiana, którego używam do sporadycznego zgarniania ekranu przez Selenum i Python.
Używam Xvfb jako wirtualnego serwera X dla Firefoksa do uruchamiania, gdy jest kontrolowany przez Selenium. Biorąc pod uwagę, że (myślę), że muszę zacząć to używać sudo
, nie sądzę, że będzie to możliwe, aby uruchomić go za każdym razem za pomocą Pythona (patrz moje pytanie dotyczące przepełnienia stosu ), więc pomyślałem, że mogę po prostu cały czas go uruchamiać .
Obecnie zaczynam tak w wierszu poleceń:
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
Jakiej metody należy użyć, aby zrobić to automatycznie podczas uruchamiania? Czy powinienem używać cron
, jak sugerowano tutaj ?
/etc/rc.local
niż używanieupdate-rc.d
własnych skryptów?update-rc.d
jest preferowany i na pewno jest bardziej zdolny, alerc.local
jest szybszy i łatwiejszy. Poza tym uważam, że Gilles ma rację, nie ma powodu, aby działał jako root.Twoja przesłanka jest nieprawidłowa: nie ma powodu, aby uruchamiać Xvfb jako root. Twój zwykły serwer X musi działać tylko jako root (na wielu, ale nie wszystkich jednorożcach) tylko po to, aby mógł uzyskać dostęp do sprzętu wideo; z definicji nie stanowi to problemu dla Xvfb.
Jeśli chcesz uruchomić Xvfb podczas uruchamiania, możesz użyć crona z
@reboot
zastąpieniem pięciu pól daty i godziny. Możesz to zrobić w crontabie dowolnego użytkownika, nie tylko root. Ale nie widzę sensu. Twoje skrypty byłyby bardziej niezawodne, gdybyś uruchomił Xvfb, gdy go potrzebujesz, dokładnie tak, jak początkowo planowałeś.źródło
xvfb-run
polecenia, które zwykle jest dostarczane z Xvfb. Oto odniesienie cli doxvfb-run
manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html . @Paul, możesz uruchomić go w następujący sposób:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
Jak sugeruje @Gilles , bardziej nadaje się do uruchamiania na żądanie, szczególnie gdy używasz go do testowania Selenium. Oto przykładowe polecenia powłoki:
Sprawdzanie wyświetlania za pomocą
xdpyinfo
wcześniej pozwoli uniknąć dwukrotnego uruchomienia wirtualnego bufora ramki.Jeśli naprawdę musisz go uruchomić podczas uruchamiania, możesz wypróbować następujący skrypt init.d :
Źródło: dloman / xvfb w GitHub (rozwidlone z: jterrace / xvfb )
Zapisz jako
/etc/init.d/xvfb
i ustaw, aby był wykonywalny, a następnie uruchom go jako:Aby automatycznie uruchomić przy uruchomieniu, uruchom:
Aby usunąć go z automatycznego uruchamiania, uruchom:
Dodaj również do
environment
pliku, który ma być rozpoznawany przez programy X, np .:Oto wersja dla wersji systemd : dloman / xvfb.service .
źródło