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 工作吗?
根据来自 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 自述文件
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)