![当 X 服务器未运行时如何保存活动窗口的图像](https://linux22.com/image/160991/%E5%BD%93%20X%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9C%AA%E8%BF%90%E8%A1%8C%E6%97%B6%E5%A6%82%E4%BD%95%E4%BF%9D%E5%AD%98%E6%B4%BB%E5%8A%A8%E7%AA%97%E5%8F%A3%E7%9A%84%E5%9B%BE%E5%83%8F.png)
我在远程位置有一台计算机,我更喜欢将其用作服务器。我总是保持盖子关闭,并且它设置为在屏幕关闭时始终保持运行。因为我用这个服务器来运行软件。我想截取屏幕截图以了解正在运行的应用程序的最新情况。我想知道当 X 服务器未运行时是否有办法保存活动窗口的图像。
更新:ps -e | grep X
为 Xorg 输出 PID:581。所以我的 Xserver 正在运行。
更新:我没有使用 X11 转发。
更新:如果可能的话,我需要在远程计算机上截取活动窗口(firefox)的屏幕截图。将该屏幕截图保存在我的远程计算机上,然后使用scp host1:/path/to/screenshot/ localhost:/destinationfile
答案1
你想使用像这样的实用程序scrot
。
ssh
进入远程计算机后,您可以运行以下命令:
scrot '%Y-%m-%d_$wx$h.png' -e 'mv $f /home/user/shots/'
此命令将使用文件名截取当前屏幕的屏幕截图YEAR-MONTH-DAY_SCREENWIDTH_SCREENHEIGHT.png
,并将文件移动到您的/shots
目录(如果有的话)。如果您需要在没有输入的情况下定期运行它,您可以创建一个定时任务。
使用您要运行的命令创建 bash 脚本。如果您想每小时运行该命令,它将如下所示:
#!/bin/bash
scrot '%Y-%m-%d-%H.png' -e 'mv $f /home/user/screenshots/'
并将此文件保存在适当的位置,例如/home/user/scripts
并使其可执行( chmod +x screenshot.sh
)
如果您希望每小时运行一次,您的用户的 crontab 应包含此行(运行crontab -e
以编辑用户的 crontab):
1 * * * * /home/user/scripts/screenshot.sh >/dev/null 2>&1
这将screenshot.sh
在每小时的第一分钟执行。
或者,您可以将脚本保存到其中/etc/cron.hourly
,使其每小时运行一次。
这里是一篇关于使用 crontab 的相关文章,您应该查看。
进行测试以确保其scrot
可以满足您的需求,并且您的 cronjob 可以正常工作。然后,您可以进一步自动化该过程,自动通过电子邮件将图片发送给您或通过 .push 将图片推送到您的计算机scp
。
祝你好运!
答案2
如果你有东西在 X 中运行,那么 X 仍在运行。杀死 X 会杀死大多数使用它的程序。
因此,您可以做一些事情(记住您需要在远程术语上设置 DISPLAY 变量,例如DISPLAY=:0
):
- Imagemagick 有一个名为“导入”的实用程序,运行后
import -window root screenshot.png
会给您一个屏幕截图。 - scrot可以截图,但是不知道命令行
- x11vnc 可以让您通过 vnc 访问正在运行的 X 显示