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: 入力/出力エラー

私は問題を次のように単純化しました。 1つのウィンドウで:

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

関連情報