【问题标题】:Cron won't run command that locks my screen [duplicate]Cron不会运行锁定我的屏幕的命令[重复]
【发布时间】: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-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.

以 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 设置。
  • 您的桌面环境应该有一个设置,可以在定义的不活动时间后锁定屏幕。那将是一个更好的解决方案。

标签: bash cron


【解决方案1】:

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

在你当前的 shell 中通过

获得你的显示
echo $DISPLAY

然后将你的显示添加到 crontab 中

DISPLAY=:0.1 # <-- Example Display

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

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

【讨论】:

  • 谢谢。它仍然不起作用,但我取得了进展。请检查已编辑的问题
  • 请再次检查我的答案。
  • 错误:未知命令“锁定”
  • 我认为错误很明显,您可能想谷歌它。你也可以试试这个light-locker-command --lock
  • 我没有安装那个。我不知道用谷歌搜索什么。我尝试运行 cron 作业 $(xdg-screensaver lock) 但这没有用。我尝试了其他命令,但出现“连接被拒绝”的错误消息。我已经编辑了我的问题。注意我在 Ubuntu 18.10 上,一个用户。所以没有root权限。
猜你喜欢
  • 2011-10-18
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2014-05-10
  • 1970-01-01
  • 2016-03-24
相关资源
最近更新 更多