尝试在 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 上。

有任何想法吗?

===更新===

在劳舍尔的回答之后,我将问题归结为:

当我在一个终端中执行此操作时:

$ 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 的使用经验比对 xvfb-run 的经验丰富。您可以尝试直接运行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

相关内容