我有一台 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