xvfb-run에서 --listen-tcp를 사용해 보세요.

xvfb-run에서 --listen-tcp를 사용해 보세요.

이 지침을 따르려고 노력 중입니다.http://afterdesign.net/2016/02/07/recording-headless-selenium-tests-to-mp4.html셀레늄 테스트를 로깅합니다.

그러나 해당 포트를 사용하여 xvfb에 연결하려고 하면 다음과 같은 결과가 나타납니다.

[x11grab @ 0x1e3b460] 디스플레이 127.0.0.1:44를 열 수 없습니다. 오류 1. 127.0.0.1:44: 입력/출력 오류

나는 문제를 다음과 같이 단순화했습니다. 한 창에서:

xvfb-run --listen-tcp --server-num=44 --auth-file /tmp/xvfb.auth -s "-ac -screen 0 1920x1080x24" gedit

다른 창에서:

ffmpeg -f x11grab -video_size 1920x1080 -i 127.0.0.1:44 -codec:v libx264 -r 12 ~/test.mp4

얻다

[x11grab @ 0x1e74460] Cannot open display 127.0.0.1:44, error 1.
127.0.0.1:44: Input/output error

이는 xvfb가 실행되지 않을 때 얻는 것과 동일한 응답입니다.

여기서 이 문제처럼 들리는 것을 발견했습니다.https://bugzilla.redhat.com/show_bug.cgi?id=1340432하지만 이 문제는 버전 1에서 해결되었다고 합니다. 저는 이미 버전 1.17과 2:1.18.4-0ubuntu0.2를 사용하고 있습니다.

어떤 아이디어가 있나요?

===업데이트===

Rauscher의 답변에 따라 질문을 요약하면 다음과 같습니다.

터미널에서 이 작업을 수행할 때:

$ Xvfb :44 -listen tcp -ac -screen 0 1920x1080x24

다른 터미널에서 이 작업을 수행합니다.

$ xdpyinfo -display localhost:44 | head -n10
name of display:    localhost:44
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    11804000
X.Org version: 1.18.4
maximum request size:  16777212 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    6

반면에 터미널에서 이 작업을 수행할 때는 다음과 같습니다.

$ xvfb-run --listen-tcp --server-num=44 -s "-ac -screen 0 1920x1080x24" google-chrome --user-data-dir=/tmp

(또는 셀레늄 테스트와 같은 다른 응용 프로그램)

다른 터미널에서 이것을 볼 수 있습니다.

$ xdpyinfo -display localhost:44
xdpyinfo:  unable to open display "localhost:44".

해결책이 있지만 여전히 tcp를 통해 xvfb-run에 연결할 수 없습니다.

답변1

저는 xvfb-run보다 Xvfb에 대한 경험이 더 많습니다. Xvfb를 직접 실행해 볼 수 있습니다.

Xvfb :44 -auth /tmp/xvfb.auth -ac -screen 0 1920x1080x24

(Xvfb는 기본적으로 tcp를 수신합니다. 다음을 -nolisten tcp사용하여 비활성화할 수 있습니다.

그렇지 않으면 IP 127.0.0.1을 사용하는 데 문제가 있을 수 있으며 다른 IP를 사용할 수도 있습니다. 나는 이것에 대한 경험이 없지만 작동합니다 /etc/hosts. 또한 에서 제공한 모든 IP가 ifconfig작동해야 합니다.

답변2

모든 차이를 만드는 핵심 주장은 -acXvfb입니다."호스트 기반 액세스 제어 메커니즘 비활성화"

--listen-tcp다른 컴퓨터에서 X 서버에 액세스하려는 경우에도 이 파일이 필요합니다.

따라서 완전한 예는 xvfb-run다음과 같습니다.

xvfb-run --listen-tcp -s "-ac" -- your_command

답변3

이것은 나에게 효과적입니다.

xvfb-run -s ":99 -auth /tmp/xvfb.auth -ac -screen 0 1920x1080x24" ./run.sh & # launching xvfb in the background \
sleep 3 && # waiting for xvfb to be ready \
ffmpeg -y -f x11grab -video_size 1920x1080 -i :99 -codec:v libx264 -r 30 /tmp/test.mp4

따라서 모든 것은 를 사용하는 대신 server-num을 Xvfbvia 매개변수에 직접 전달하는 것입니다 .-s--server-num--listen-tcp

참고: Xvfb완료되면 (예를 들어) 죽이는 것을 잊지 마십시오.ffmpegkillall Xvfb

관련 정보