デスクトップコンピュータの複数のXサーバーで同時にスクリーンショットを撮りたいです。
tty1
複数のユーザーが異なる端末(、、、、tty2
)tty3
にログインしており、それらはtty4
それぞれ(および、)を使用して複数のXserverを起動します。このようにして、、を使用してそれぞれにアクセスできます。startx /usr/bin/openbox-session -- :1
:2
:3
:4
Ctrl+Alt+F8
+F9
+F10
+F11
このデスクトップにはモニターが1つしかありません。
可能であれば、を使用して各Xサーバーのスクリーンショットを撮りたいのですが、scrot
現在試しているたびに黒/空の画像が表示されます。そのXサーバーで活動している場合にのみ正しいスクリーンショットを取得できます。
たとえば、開いてCtrl+Alt+F8
実行すると正しいスクリーンショットが得られます。正しく理解したら、>を取得した後にscrot test.png
設定する必要はありません。しかし、走っていくと黒い画像が現れます。$DISPLAY
Ctrl+Alt+F8
echo $DISPLAY
:1
sleep 10; scrot test.png
Ctrl+Alt+F7
各端末で同時に複数のスクリーンショットを撮るには?
私にとって有益なのは、このソリューションの唯一の問題は、非常に高速なコマンドを実行してもXほど速く応答しないことXephyr
です。xdotool
後で参照できるように、4人のユーザーと端末のそれぞれに対して私が行ったことは次のとおりです。
では、~/.profile
システムの起動後に各ユーザーが自動的にログインするように設定しました。たとえば、次のようになります。
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
sleep 30 # for some reason it crashes if I do not let
# it sleep for a while, not necessarily so long.
# I guess it has to do with my "normal" X at DISPLAY=:0 .
# Thus for tty2 I let it sleep 40 seconds,
# for tty3 50 seconds and so on.
startx
fi
私はXserver / client(ブラックボックスを含む)とXepyr(オープンボックスを~/.Xsession
含む)を次のように始めました。
Xephyr -fullscreen -screen 1920x1200 :11 &
exec blackbox &
sleep 3 # Perhaps sleeping is redundant.
DISPLAY=:11 /usr/bin/openbox-session
私が望むのは「最終」ウィンドウマネージャですopenbox-session
。openbox
XserverとXserverを同時に使用したいのですが、Xephyr
動作 exec openbox & DISPLAY=:11 /usr/bin/openbox-session
が中断されexec openbox & DISPLAY=:11 /usr/bin/openbox
動作しません。
これにより、ユーザーは:11
モニターに表示されている間にスクリーンショットを撮ることができます:0
。 (または:13
など:14
)。
私はそれを試していませんがXVnc
、Xephyr
私が間違っている場合は訂正してください。
ベストアンサー1
方法#1 - xwdを使用する
コマンドラインツールを使用して、xwd
次のようにXディスプレイをインポートできます。
$ xwd -display :1 -root -out 1.xwd
次のように1から4まで繰り返すことができます。
$ for i in {1..4};do xwd -display :$i -root $i.xwd; done
メモ:結果.xwd
ファイルは特別な種類のX Windowsダンプファイルです。
$ file 1.xwd
1.xwd: XWD X Window Dump image data, "xwdump", 4160x1440x24
xwud
次のように表示できます。
$ xwud -in 1.xwd
あるいは、ImageMagickのdisplay
コマンドを使用して表示することもできます。
$ display 1.xwd
方法 #2 - インポートの使用
ImagMagickのimport
コマンドを使用して同様の操作を実行することもできます。
$ import -window root -display :0.0 -screen /tmp/0.png
方法#3 - scrotの使用
または、@mikeservがコメントで提案したようにActive Xディスプレイを正しく見つけることができる$DISPLAY
ように設定してください。scrot
$ DISPLAY=:1 scrot 1.png
これは次のように繰り返すことができます。
$ for i in {1..4};do DISPLAY=:$i scrot $i.png; done