テキスト端末(tty1など)からX11ベースのGUIのスクリーンショットを撮る方法は?


11

DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png"importImageMagickスイートの一部です)を使用してみましたが、黒い画面が表示されるだけです。

アプリを開いてさまざまな言語でそのスクリーンショットを自動化し、言語を変更するには、lightdmを再起動する必要があるため、これを行いたいと思います。したがって、ttyで実行して、スクリプトの実行を続けます...

回答:


10

既存の回答に加えて、端末でスクリーンショットをASCIIで表示するには:

xwd -root -display :0 | convert - jpg:- | jp2a - --colors

x11-appsfor xwdimagemagickfor convertおよびが必要ですjp2a。)


正確には関係ありませんが、クールな追加です。
ヤサースアガルワル14

1
xwd -root -display :0 | convert - jpg:- > screenshot.jpg
gregn3

2
現代のImageMagickのバージョンは、多くの場合、推測することができないxwdことが明示的に入力フォーマットを指定した方が良いですので、マジックナンバーからフォーマットを: xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors
ベース

私にとって:xwd -name "$win_name" | convert xwd:- /tmp/"$win_name".png、どこwin_name=$(xwininfo -tree -root | grep 'The Window Name Im Looking For' | awk -F\" '{print $2}')
Avio

6

xwdこれは、ほとんどすべてのXorgインストールで使用可能なを使用したソリューションです。

 xwd -root -out screenshot.xwd

screenshot.xwdファイルはGIMPで開くことができます。

詳細については、http: //www.x.org/wiki/UserDocumentation/GettingStarted/を参照してください



5

シャッターを使ってみてください

DISPLAY=:0 shutter -f -e -n -o "$HOME/Pictures/screenshot.png"

ルートウィンドウが使用されていないため、インポートは機能しません。合成すると「バイパス」されます(各ウィンドウは独自のバッファでレンダリングされ、その後、「ルート」ウィンドウでレンダリングされた古い方法ではなく、ディスプレイに多重化されます)。

さらに、スクリーンショットを撮る前にVTYがアクティブであることを確認する必要があります。たとえば、

#!/bin/bash  
X :1 &  
export DISPLAY=:1  
sleep 10 # give time for X to start  
gedit &  
sleep 10 # give time for app to do something  
chvt 8  # ensure the X display is active  
shutter -f -e -n -o "$HOME/Pictures/screenshot.png" # screenshot  
killall xorg # terminate X

いいえ、まだ黒い画面が表示されます:
Yatharth Agarwal

これを行うとき、Xセッション(モニター上)にいますか。試したところ、非常にうまくいきました。ログインし、アクティブなVTYでXセッションを持つ必要があります。
coteyr

ttyで起動されたスクリプトでこれができるようにしたいのです。
ヤタルトアガルワル

はい。ただし、スクリーンショットを撮る前にXセッションに切り替えますか。X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot(完全に偽のスクリプトに注意してください)。
coteyr

また、テキストコンソールのスクリーンショットではなく、VT0(または何か)と同じことを話していることを確認してください。したがって、スクリーンショットX(VTY)を試行するTTYからスクリプトを実行します。あれは正しいですか?
coteyr

0

同じコンピューターに座って、Xサーバーが実行されているのとは異なる仮想端末から実行することはできません。

それはそこに説明されている:http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc。見積もり:

Q-108: Linux Virtual Terminals(VT's)を使用して、ユーザーセッション間の 'Fast User Switching'を実装します(たとえば、BettyはCtrl-Alt-F7、BobbyはCtrl-Alt-F8、SidはCtrl-Altです-F1:これらのキーストロークを使用してセッションを切り替えます。)x11vncに接続しているVNCビューアーのビューが完全に黒であるか、更新されないか、Xセッションx11vncが接続されていない限りピクセルがめちゃくちゃになるのはなぜですか?アクティブVT?

これは、アプリケーション(この場合はXサーバープロセス)がアクティブなVT(仮想コンソールの場合はVCと呼ばれることもあります)にない場合に「うまく再生する」方法と関係があるようです。つまり、キーボードから読み取るべきではありませんまたは、アクティブなVTがない限り、マウスまたはビデオディスプレイを管理します。XGetImage()呼び出しは最終的にビデオハードウェア自体からフレームバッファデータを取得する必要があるように見えるため、XセッションがVTをアクティブに制御していない限り、x11vncのポーリングは機能しません。

これを回避する簡単な方法はないようです。この場合、xwd(1)でも動作しません(試してみてください)。XFree86/ Xorg Xサーバーなどでは、より低いレベルで何かを行う必要があります。また、シャドウフレームバッファー(ビデオフレームバッファーのコピーがメインメモリに保持されている)を使用しても、問題は修正されないようです(最終確認2007)。

ワークステーションに誰も座っていなくて、VTをXセッションに関連付けられたものにリモートで切り替えたい場合(x11vncが正しくポーリングできるように)、chvt(1)コマンド、たとえば「chvt 7」を使用できます。 VT#7の場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.