데비안에서 시작할 때 어떻게 Xvfb를 시작합니까?


9

Selenum과 Python을 통한 화면 스크래핑에 사용하는 데비안 웹 서버가 있습니다.

Xvfb를 Selenium이 제어 할 때 Firefox가 실행되는 가상 X 서버로 사용합니다. 내가 (생각)을 사용하여 이것을 시작해야한다는 것을 감안할 때 sudo, 매번 파이썬에서 시작하는 것이 가능하지 않다고 생각합니다 ( 내 스택 오버플로 질문 참조 ). 그래서 항상 실행할 수 있다고 생각했습니다 .

현재 커맨드 라인에서 다음과 같이 시작합니다.

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

시작할 때 자동으로 어떤 방법을 사용해야합니까? 여기에cron 제안 된대로 사용해야합니까 ?

답변:


6

데비안에서는 Xvfb 명령을에 추가 할 수 있습니다 /etc/rc.local. Xvfb가 백그라운드로 분리되지 않으면 &명령 끝에서를 사용하십시오.

cron을 사용하면 작동하지만 init 스크립트는 시작 순서가 언제 실행 될지 정확하게 제어 할 수 있으며 서비스를 시작하는 전통적인 방법입니다.


아하, 훌륭합니다. 자신의 개별 스크립트 /etc/rc.local를 사용 update-rc.d하는 것 보다 편집을 선호 합니까?
Paul D. Waite

2
@Paul 나는 update-rc.d바람직하고 확실히 능력이 있지만 rc.local더 빠르고 쉽다고 말합니다 . 또한 Gilles가 옳다고 생각합니다. 루트로 실행해야 할 이유가 없습니다.
Andy

4

귀하의 전제는 잘못되었습니다. Xvfb를 루트로 실행할 이유가 없습니다. 일반적인 X 서버는 비디오 하드웨어에 액세스 할 수 있도록 루트로만 실행하면됩니다 (다수의 유니 세일 때만). 그것은 Xvfb의 정의에 의한 문제가 아닙니다.

시작시 Xvfb를 실행하려면 cron을 사용 @reboot하여 5 개의 날짜 및 시간 필드 를 바꾸십시오. 루트뿐만 아니라 모든 사용자의 crontab에서 그렇게 할 수 있습니다. 그러나 나는 요점을 보지 못한다. 필요할 때 Xvfb를 시작하면 원래 계획했던 것처럼 스크립트가 더욱 강력 해집니다.


유효한 포인트. 하나의 명령에 대해서만 Xvfb를 실행하려면 xvfb-run일반적으로 Xvfb와 함께 제공 되는 명령을 사용할 수 있습니다 . 다음은 xvfb-run manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html에 대한 cli 참조입니다 . @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

출처 : GitHub의 dloman / xvfb (fork : jterrace / xvfb )

다른 이름으로 저장하고 /etc/init.d/xvfb실행 가능하게 한 후 다음과 같이 시작하십시오.

/etc/init.d/xvfb start

시작시 자동으로 실행하려면 다음을 실행하십시오.

sudo update-rc.d xvfb defaults

자동 실행에서 제거하려면 다음을 실행하십시오.

sudo update-rc.d -f xvfb remove

또한 environmentX 프로그램이 인식 할 수 있도록 파일에 추가하십시오 . 예 :

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

다음은 systemd 버전 버전입니다 dloman / xvfb.service은 .


나는 이것이 1 년 된 것을 알고 있지만 이것으로 작동하는 자바 스크립트 셀레늄 버전을 얻을 수없는 것 같습니다. 부팅 후 실행하면 작동하지만 서비스로 시작하면 xvfb를 감지하지 못하는 것과 같습니다. 시작시 둘 다 서비스로 작동하게하려면 어떻게해야합니까?
Masinde Muliro

@MasindeMuliro 그런 다음 다른 질문을 할 수 있으므로 문제에 따라 답변을 더 업데이트 할 수 있습니다.
kenorb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.