デスクトップコンピュータの複数の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
引用する
答え2
質問の質問の私の理解は次のとおりです。
あなたはテキストコンソールttyしたがって、
Xはスクリーンショットコマンドを実行しているttyで実行されていません。あなたは実行することができますコマンドラインスクリーンショットXを押すとコマンドが表示されます。
あなたは表示するにはXを指定してください。などのスクリーンショットコマンドの場合
DISPLAY=:2 scrot out.png
。スクリーンショットコマンドが実行するアクションは次のとおりです。あなたにエラーを与えないでしょう
ただし、出力として黒い画像が表示されます。。
問題は、Xサーバーが一部のイメージバッファにイメージを描画せずに、その空のバッファからスクリーンショットを取得することです。ただし、たとえば、compiz
ペイントではなく複合ウィンドウマネージャーとすることもできます。少なくとも単一のウィンドウをキャプチャする場合、これは問題かもしれません。私は合成されていないウィンドウマネージャを使ってみる価値があると思いますmetacity
。
それでも問題が解決しない場合は、まったく異なるアプローチがあります。
1台のモニターで、すべてのXサーバーをネストされたXサーバーとして実行します。ネストされた各Xサーバーはウィンドウに画面出力を表示します。ネストされたディスプレイのフルスクリーンスクリーンショットを作成するか、メインディスプレイのウィンドウスクリーンショットを作成できます。
ネストされたXサーバー実装としてXephyr
最新のようです。より古いXnest
ものもありますXvfb
:
~からman Xephyr
:
NAME
Xephyr - X server outputting to a window on a pre-existing X display
DESCRIPTION
Xephyr is a kdrive server that outputs to a window on a pre-existing "host" X dis‐
play. Think Xnest but with support for modern extensions like composite, damage
and randr.
Unlike Xnest which is an X proxy, i.e. limited to the capabilities of the host X
server, Xephyr is a real X server which uses the host X server window as "frame‐
buffer" via fast SHM XImages.
同様に、Xvnc(vnc4serverパッケージにあります)を使用して、VNCプロトコルを介した追加のアクセスを提供できます。
~からXvnc4
:
NAME
Xvnc - the X VNC server
DESCRIPTION
Xvnc is the X VNC (Virtual Network Computing) server. It is based on a standard X
server, but it has a "virtual" screen rather than a physical one. X applications
display themselves on it as if it were a normal X display, but they can only be
accessed via a VNC viewer - see vncviewer(1).
So Xvnc is really two servers in one. To the applications it is an X server, and to
the remote VNC users it is a VNC server. By convention we have arranged that the
VNC server display number will be the same as the X server display number, which
means you can use eg. snoopy:2 to refer to display 2 on machine "snoopy" in both
the X world and the VNC world.
(UbuntuではXvnc
パッケージとして利用可能)vnc4server