
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-session
xterm