このガイドラインに従おうとしています。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
すべての違いを生み出す主な主張は-ac
Xvfbです。「ホストベースのアクセス制御メカニズムの無効化」
--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をXvfb
viaパラメータに直接渡すことです。-s
--server-num
--listen-tcp
注:Xvfb
完了したら(例えば)殺すことを忘れないでください。ffmpeg
killall Xvfb