我在晚上使用 Iris Mini 过滤蓝光,效果很好,但必须手动执行它很烦人。所以我尝试使用 cron 在每晚 8 点启动它。
这是我写的执行 crontab -e 的内容。如果我在终端中执行该命令,则该命令有效
定时任务
0 20 * * * sh /home/jogarcia/Software/open-iris-mini.sh
打开 iris-mini.sh
#!/bin/bash
export DISPLAY=0:.
/home/jogarcia/Software/iris-mini
我还执行了xhost +localhost
测试(在 cron 选项卡之前)。
在日志中搜索grep CRON /var/log/syslog
我发现这几行似乎表明实际上已执行:
计划日志
Nov 2 20:00:01 my-computer-is-name CRON[8391]: (user) CMD (sh /home/jogarcia/Software/open-iris-mini.sh)
但它不起作用,因为我在屏幕上看不到结果(它应该显示一种橙色),我真的迷失了,我不知道做错了什么。
为了查看错误,我安装了邮件服务。
本地邮件错误
QXcbConnection: Could not connect to display 0:.
答案1
秘密(正如@指出的瓦尔特纳就是正确设置DISPLAY。
那大概应该是DISPLAY=:0
格式通常为主机名:显示编号,其中主机名是可选的。
第二个问题是显示安全。如果您将 cronjob 放在您自己的 crontab 中而不是 root 的 crontab 中,那么xhost
就不需要它了xauth
。 OP(可能)通过使用crontab -e
as 自己正确地做到了这一点。 (请注意,$HOME
必须正确才能xauth
保证安全性。这是将其放入您自己的 crontab 中的一部分。)
这里的另一个技巧是安装电子邮件系统来获取错误消息。
当 OP 报告(安装电子邮件系统后)“cron 作业无法连接到显示器”时,这可能意味着 DISPLAY 不正确或显示安全性出现问题(xauth
和xhost
)。为此,我建议尝试在命令窗口中运行脚本。尝试像这样运行它env -uDISPLAY /home/jose/Software/open-iris-mini.sh
(如果它说该文件不可执行,请使用chmod +x
)
(根据OP的要求添加答案。)
答案2
这会失败,因为cron
作业在它们自己的上下文中运行,而不是在 GUI 上下文中(在 GUI 上下文中控制颜色“有意义”)。
为了让它发挥作用,有两个步骤
在您的脚本中,添加环境变量的定义DISPLAY
(用作指向 X 服务器的指针)。就像是
export DISPLAY=0:.
但请检查echo "$DISPLAY"
您的 GUI 上下文。
在你的 GUI 启动中(也许在$HOME/.config/autostart
)
xhost +localhost
告诉 X 服务器接受来自主机localhost
(或用户 ID localhost
——X Windows 安全性很奇怪)的连接。您必须在每次 GUI 登录时执行此操作。
读man xhost X
。
答案3
这正是使用在我之前回答的人的答案对我有用的方法
用于crontab -e
cron 作业
[email protected]
0 20 * * * sh /home/jogarcia/Software/open-iris-mini.sh
然后在sh文件上:
#!/bin/bash
DISPLAY=:0 /home/jogarcia/Software/iris-mini
为了查看它是否按预期工作,我使用了以下命令:
env -uDISPLAY /home/jogarcia/Software/open-iris-mini.sh
为了查看 cron 日志,我安装了 postfix sudo apt-get install postfix
,全部是本地的。