![通过 SSH 从 Gnome 桌面获取屏幕截图](https://linux22.com/image/172921/%E9%80%9A%E8%BF%87%20SSH%20%E4%BB%8E%20Gnome%20%E6%A1%8C%E9%9D%A2%E8%8E%B7%E5%8F%96%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png)
我为基于 Fedora 30(即将推出 32)的“数字标牌客户端”设置了自动启动安装,我需要获得屏幕上当前内容的实际视觉反馈。我尝试通过命令行启用 Gnome-Remote-Desktop(请参阅通过命令行启用 Gnome 屏幕共享?)但不幸的是我不能。
所以新的方法是,截取屏幕截图(并通过 scp 复制)。虽然我可以通过 gnome 终端直接在客户端上截取屏幕截图gnome-screenshot
,但我不知道如何从远程执行此操作。我还尝试了其他工具,例如 KDE Spectacle 或 Shutter,但也没有运气。
一个想法是设置一个 cronjob 来截取屏幕截图:
$> crontab -e
1 * * * * gnome-screenshot
但这不起作用。journalctl _COMM=cron
说-- No entries --
有人知道如何从 Gnome-Wayland-Fedora 桌面截取屏幕截图吗?这应该通过 crontab 工作吗?
答案1
对于韦兰
根据n-tchen的信息,火焰射击(在 Fedora 存储库中)效果很好:
flameshot screen -p ~/
如果您通过 ssh 连接,请WAYLAND_DISPLAY=wayland-0
在上一行的开头添加。
您也可以使用gnome-screenshot
Flameshot 来代替,但您仍然需要为 ssh 添加上述内容。
附加信息 (来源):
Wayland 上跨平台截图的方式是通过xdg-桌面门户(它也适用于 Flatpak 之外)。看https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.Screenshot.xml
最后,Pyscreenshot 支持 Wayland;看GitHub 自述文件
对于X11
ImageMagick 的命令import
可以很好地完成屏幕截图:
import -silent -window root /tmp/screenshot.jpg
如果您通过 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