【发布时间】:2019-01-24 07:07:30
【问题描述】:
我想定期运行一个锁定我的电脑的 cron 作业。
我在终端中键入这 3 个命令中的任何一个,它们都可以工作:
dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
xdg-screensaver lock
gnome-screensaver-command -l
当我将它们放入 cron 时,什么也没有发生。
我还有 2 个运行 SSH 的作业。他们工作,而这个特别不会。
我尝试添加环境,但这也不起作用。这就是我试图让 crontab 看起来的样子:
SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
* * * * * /usr/bin/xdg-screensaver lock
(newline,EOF)
我尝试在命令中使用和不使用 /usr/bin/ 前缀。我尝试过使用和不使用 cron 环境。我也试过SHELL=/bin/bash。
我试过类似nohup xdg-screensaver lock
没有结果。
我尝试将其放入脚本中,然后通过 cron 运行该脚本。没有结果。
编辑:
我尝试在 crontab 中设置 DISPLAY。当我做echo $DISPLAY 时,我得到了:1 作为回报。
我将 crontab 更改为:
DISPLAY=:1
* * * * * /usr/bin/xdg-screensaver lock
(newline,EOF)
我的电脑仍然无法锁定。但是现在当我用service cron status 检查cron 的状态时,我看到了新的东西。出现这些新行:
├─25234 /usr/sbin/cron -f
├─25852 /usr/sbin/CRON -f
├─25853 /bin/sh -c /usr/bin/xdg-screensaver lock
├─25854 /bin/sh /usr/bin/xdg-screensaver lock
├─25862 dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager
├─25863 dbus-launch --autolaunch 6cd12da16cea4d79bb7367a0f8b8bd3e --binary-syntax --close-stderr
└─25866 dbus-launch --autolaunch 6cd12da16cea4d79bb7367a0f8b8bd3e --binary-syntax --close-stderr
Jan 23 22:38:01 riff CRON[25923]: pam_unix(cron:session): session opened for user riff by (uid=0)
Jan 23 22:38:01 riff CRON[25924]: (riff) CMD (/usr/bin/xdg-screensaver lock)
Jan 23 22:38:01 riff dbus-daemon[25938]: [session uid=1000 pid=25936] AppArmor D-Bus mediation is enabled
Jan 23 22:38:04 riff dbus-daemon[25953]: [session uid=1000 pid=25951] AppArmor D-Bus mediation is enabled
Jan 23 22:38:07 riff dbus-daemon[25959]: [session uid=1000 pid=25957] AppArmor D-Bus mediation is enabled
Jan 23 22:38:10 riff CRON[25923]: (CRON) info (No MTA installed, discarding output)
Jan 23 22:38:10 riff CRON[25923]: pam_unix(cron:session): session closed for user riff
新行是以dbus-send、dbus-launch 和dbus-daemon 开头的行
我尝试在 crontab 中设置 SHELL=/bin/bash 但这并没有改变任何东西
...
将错误重定向到日志后,
运行 xdg-screensaver lock 作为 cron 作业我得到错误:
ERROR: Unknown command 'lock'.
使用 gnome-screensaver -l 我得到错误:
** Message: 23:25:04.831: Failed to get session bus: Could not connect: Connection refused
使用dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock 我得到错误:
Failed to open connection to "session" message bus: Failed to connect to socket /tmp/dbus-ITbw92LLaf: Connection refused
所以我尝试使用 root 的 crontab 运行 dbus-send.. 命令。现在的错误是:
Failed to open connection to "session" message bus: /usr/bin/dbus-launch terminated abnormally with the following error: No protocol specified
Autolaunch error: X11 initialization failed.
以 root cron 作业运行 gnome-screensaver 后出错:
** Message: 00:06:01.092: Failed to get session bus: Error spawning command line “dbus-launch --autolaunch=6cd12da16cea4d79bb7367a0f8b8bd3e --binary-syntax --close-stderr”: Child process exited with code 1
【问题讨论】:
-
可能需要 DISPLAY 设置。
-
您的桌面环境应该有一个设置,可以在定义的不活动时间后锁定屏幕。那将是一个更好的解决方案。