通过 SSH 从 Gnome 桌面获取屏幕截图

n-t*_*hen 5 fedora ssh gnome screenshot wayland

我为基于 Fedora 30(即将发布 32)的“数字标牌客户端”设置了自动启动安装,我需要获得当前屏幕上显示的实际视觉反馈。我试图通过命令行启用 Gnome-Remote-Desktop(请参阅通过命令行启用 Gnome 屏幕共享?),但不幸的是我不能。

因此,新方法是截取屏幕截图(并通过 scp 复制)。虽然我可以通过带有 的 gnome 终端直接在客户端上截取屏幕截图gnome-screenshot,但我不知道如何从远程执行此操作。我还尝试了其他工具,如 KDE Spectacle 或 Shutter,但也没有运气。

一个想法是设置一个 cronjob 来截取屏幕截图:

$> crontab -e

1 * * * * gnome-screenshot
Run Code Online (Sandbox Code Playgroud)

但这行不通。journalctl _COMM=cron-- No entries --

有人知道如何从 Gnome-Wayland-Fedora 桌面截取屏幕截图吗?这应该通过 crontab 工作吗?

bit*_*ant 5

对于韦兰

根据来自 n-tchen 的信息,Flameshot(在 Fedora 存储库中)运行良好:

flameshot screen -p ~/
Run Code Online (Sandbox Code Playgroud)

如果您通过 ssh 连接WAYLAND_DISPLAY=wayland-0,请在上述行的开头添加。

您也可以使用gnome-screenshotFlameshot 代替,但您仍然需要为 ssh 添加上述内容。

附加信息(来源):

在 Wayland 上截取屏幕截图的跨平台方式是通过xdg-desktop-portal(它也适用于 Flatpak 之外)。请参阅https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.Screenshot.xml

最后,Pyscreenshot 支持 Wayland;请参阅GitHub 自述文件

对于 X11

import来自 ImageMagick的命令在截图方面做得很好:

import -silent -window root /tmp/screenshot.jpg
Run Code Online (Sandbox Code Playgroud)

如果你是通过ssh连接,DISPLAY=:0.0在上面一行的开头添加,你需要以本地登录的用户身份登录。

如果你想在 crontab 中运行它,这里是如何设置它。这将每 6 分钟截取一次屏幕截图,并将其与日期时间编码的文件名一起存储在/root/monitor/. 它已经在 Ubuntu 16.04 和 18.04 上进行了测试。

echo -n "/bin/bash -c '"                                                                  >cronexec
echo -n   'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && ' >>cronexec
echo -n   'export HOME=/root && '                                                        >>cronexec
echo -n   'export D1=/tmp/gneemp && '                                                    >>cronexec
echo -n   'export F2=`date --utc +/root/monitor/%Y-%m-%dT%H:%M.jpg` && '                 >>cronexec
echo -n   'mkdir -p $D1 && '                                                             >>cronexec
echo -n   'chmod 643 $D1 && '                                                            >>cronexec
echo -n   'DISPLAY=:0.0 sudo -u `who --users |head -1 |grep -o "^\S*"` import -quiet -silent -window root $D1/tmp.jpg && '  >>cronexec
echo -n   'mkdir -p /root/monitor && '                                                   >>cronexec
echo -n   'mv $D1/tmp.jpg $F2 && '                                                       >>cronexec
echo -n   'rmdir $D1 '                                                                   >>cronexec
echo    "'"                                                                              >>cronexec
perl -p -i -e 's|\%|\\\%|g;' cronexec # from the manpage:  "Percent-signs (%) in the command, unless escaped with backslash (\) ..."
(sudo crontab -l 2>/dev/null; echo -n "*/6 * * * * "; cat cronexec) |sudo crontab - && rm cronexec
Run Code Online (Sandbox Code Playgroud)