web-dev-qa-db-ja.com

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

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

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

11

これが私のために働いたものです。

chvt 7
DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png
chvt 1
5

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

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

xwdにはx11-appsimagemagickおよびjp2aにはconvertが必要です。)

10
Niklas

ほぼすべてのXorgインストールで利用可能なxwdを使用したソリューションは次のとおりです。

 xwd -root -out screenshot.xwd

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

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

6
rendon

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

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
5
coteyr

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

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

Q-108:Linux仮想端末(VT)を使用して、ユーザーセッション間で「高速ユーザー切り替え」を実装します(たとえば、BettyはCtrl-Alt- F7、ボビーはCtrl-Alt-F8、SidはCtrl-Alt-F1にあります:彼らはそれらのキーストロークを使用してセッションを切り替えます。) Xセッションx11vncがアタッチされていない限り、更新、またはピクセルがめちゃくちゃになっているのはアクティブなVTですか?

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

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

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

0
Golar Ramblar