Cron不会运行锁定屏幕的命令

时间:2019-01-23 20:31:29

标签: bash cron

我想定期运行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-senddbus-launchdbus-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.

将gnome-screensaver作为root cron作业运行后出现错误:

** 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

1 个答案:

答案 0 :(得分:0)

xdg-screensaver无法知道需要锁定哪个显示手柄。您需要先设置DISPLAY。

在您当前的外壳中显示

echo $DISPLAY

然后将您的显示添加到crontab

DISPLAY=:0.1 # <-- Example Display

使用以下命令将输出重定向到日志文件

* * * * * /usr/bin/xdg-screensaver lock >/your/log/path.log 2>&1