SSHでスクリーンショットを撮る方法は?

SSHでスクリーンショットを撮る方法は?

Ubuntuデスクトップコンピュータがあります。私の範囲は、SSHを介して自分のローカルコンピュータのスクリーンショットを撮ることです。このデバイスはビデオを再生していますが、SSH経由でビデオのスクリーンショットを撮りたいです。私はrootユーザーとして試しました。

root@user-desktop:~# export DISPLAY=:0
root@user-desktop:~# echo $DISPLAY
:0
root@user-desktop:~# scrot screenshot.png
No protocol specified
Can't open X display. It *is* running, yeah?root@user-desktop:~#

それから私はそれを試しましたDISPLAY=:0.0。代わりにDISPLAY:=0(それが重要かどうかわかりません)。

root@user-desktop:~# export DISPLAY=:0.0
root@user-desktop:~# echo $DISPLAY
:0.0
root@user-desktop:~# scrot screenshot.png
No protocol specified
Can't open X display. It *is* running, yeah?root@user-desktop:~#

その後、root以外のユーザーと同じ操作を試しました。

user@user-desktop:~$ export DISPLAY=:0
user@user-desktop:~$ echo $DISPLAY
:0
user@user-desktop:~$ scrot screenshot.png
Invalid MIT-MAGIC-COOKIE-1 keyCan't open X display. It *is* running, yeah?user@user-desktop:~$

user@user-desktop:~$ export DISPLAY=:0.0
user@user-desktop:~$ echo $DISPLAY
:0.0
user@user-desktop:~$ scrot screenshot.png
Invalid MIT-MAGIC-COOKIE-1 keyCan't open X display. It *is* running, yeah?user@user-desktop:~$

答え1

これを試してみることはできますか?

ssh -x user@user-desktop<<'EOF'
export XAUTHORITY=$(
    ps -u $(id -u) -o pid= |
    xargs -I{} cat /proc/{}/environ 2>/dev/null |
    tr '\0' '\n' |
    grep -m1 '^XAUTHORITY='
)
export DISPLAY=$(
   ps -u $(id -u) -o pid= |
   xargs -I{} cat /proc/{}/environ 2>/dev/null |
   tr '\0' '\n' |
   grep -m1 '^DISPLAY='
)

scrot screenshot.png
EOF

に基づいてここ

答え2

X11セッションで実行されているプロセスと同じ環境と同じユーザーでこれを試すことができます。

sudo -u "$(ps -o user= -p "$pid")" xargs -r0a /proc/"$pid"/environ sh -c '
  env -i -- "$@" scrot -' sh > screenshot.png

実行中のプロセスのpidまたはウィンドウマネージャのpidは$pidどこにありますか?gnome-sessionxterm

関連情報