我喜欢运行一个 cron 来为摄像头拍摄快照,如下所示:
* 9-17 * * 1-5 vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path /home/foo/tmp/cam --scene-prefix snapshot --scene-format png vlc://quit --run-time=1
但是当 cron 运行时它只会抛出一个我不明白的错误:
** Message:
Failed to get session bus:
Error spawning command line 'dbus-launch --autolaunch=55644972b3c91c1d24d83d8252721f00 --binary-syntax --close-stderr':
Child process exited with code 1
在网络上我找不到干净或好的文档那是什么。你能帮我解决一下吗?
据我所知,您可能需要:
设置显示变量(注意,它可能不是0,可能是1甚至2):
export DISPLAY=:0
启动 dbus 会话:
dbus-launch
设置 dbus 变量:
export $(dbus-launch)
在使用 Cron 作业的情况下,您可以像这样设置环境变量:
env VARIABLE=VALUE <command>
因此,对于选项 1,您的工作将如下所示:
* 9-17 * * 1-5 env DISPLAY=:0 vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path /home/foo/tmp/cam --scene-prefix snapshot --scene-format png vlc://quit --run-time=1
对于选项 2,您可以使用 && 分隔两个命令,如下所示:
* 9-17 * * 1-5 dbus-launch && vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path /home/foo/tmp/cam --scene-prefix snapshot --scene-format png vlc://quit --run-time=1
选项 3 类似:
* 9-17 * * 1-5 export $(dbus-launch) &&vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path /home/foo/tmp/cam --scene-prefix snapshot --scene-format png vlc://quit --run-time=1
尝试在需要 root 权限的 bash 脚本中使用通知发送时遇到同样的问题。
添加
export $(dbus-launch)
bash 脚本的开头对我来说很有效。