在 Mac OS X 上使用 cron 截屏

phy*_*ael 8 mac screenshot user-accounts cron macos

为了分析我自己的计算机使用情况,而不是监视任何人(尽管我想到了这一点),我希望让 cron 每分钟捕获当前屏幕。

 * * * * * /bin/bash -c "/usr/sbin/screencapture /somedir/screen.png"
Run Code Online (Sandbox Code Playgroud)

在 crontab 中将执行并截屏。但是,它完全是黑色的,因为它不像我那样运行。知道如何允许 cron 作业捕获我的屏幕吗?

更新:我say whoami在同一个 cron 命令中添加了一个,它确认它以我的用户身份运行(不涉及 sudo 或其他用户)。我以我自己的身份从终端访问 crontab。

所以,它以我的身份运行,但不附加到我的窗口系统。有任何想法吗?

小智 10

如果您查看 screencapture 联机帮助页的末尾,您会看到它说:

要在通过 ssh 登录时捕获屏幕内容,您必须启动
在与 loginwindow 相同的 mach bootstrap 层次结构中的屏幕截图:

PID=登录窗口的pid
sudo launchctl bsexec $PID screencapture [选项]

所以我认为你可以在 cron 调用的 shell 脚本中做这样的事情:

#/bin/sh
loginwindowpid=`ps axo pid,comm | grep '[l]oginwindow' | sed -n 's# *\([^ ]*\).*$#\1#p'`
sudo launchctl bsexec $loginwindowpid screencapture /somedir/screen.png

当然,您需要将用户 ID 设置为不需要 sudo 的密码。
那就是您使用 visudo 命令在 /etc/sudoers 中设置

youruserid ALL=(ALL) NOPASSWD: ALL