我有一个简单的GUI(使用tkinter创建),我希望在Raspberry pi 3上的特定时间运行.Bellow是我在crontab中使用的代码片段。我使用sudo crontab -e调用了crontab管理器。
0 18 * * * cd /home/pi/gui && python3 gui.py
目前,我可以通过Pi的命令行直接调用GUI来执行GUI。但是,当我尝试使用cron执行此操作时,它不起作用。我也试图切换到一个基本的python脚本(写入文件),这是有效的。是否需要注意特定的奇怪交互?
我的设置:raspberry pi 3,python 3,raspi-screen,tkinter(据我所知最新版本)
答案 0 :(得分:4)
sudo将在没有tty的情况下运行并显示,这就是你命令不起作用的原因。
尝试安装xvfb并使用
0 18 * * * cd /home/pi/gui && xvfb-run python3 gui.py
更新-1:18-Jun-18
如果您想使用实际显示器,则需要确保使用以下命令
XAUTHORITY=/home/<user>/.Xauthority DISPLAY=:0 python3 gui.py
并确保cron适合您的用户。默认DISPLAY
为:0
。
当您拥有XServer(GUI显示)时,您无法在未经授权的情况下连接到它。系统启动时,它会创建一个文件,该位置存储在环境变量XAUTHORITY中。
运行cron时,环境变量有限。没有定义XAUTHORITY
或DISPLAY
能够连接到您需要的显示器。因此,您需要定义程序所需的每个环境变量
因此,您定义DISPLAY=:0
以选择默认显示,并且您需要设置XAUTHORITY=/home/<user>/.Xauthority
以证明您有权连接到显示器
答案 1 :(得分:0)
Raspbian 10(破坏者):在我看来,唯一缺少的部分是使用gtk通知cron-job,该显示必须使用gtk,方法是插入
DISPLAY=:0
。我使用bash脚本使用tk启动python脚本;这也可能是python脚本。
@reboot DISPLAY=:0 /home/pi/path/to/my/script.sh start
可用于调试:
@reboot DISPLAY=:0 /home/pi/path/to/my/script.sh start >> home/pi/Desktop/cron.log
(一行)
使用cron作为pi用户(而不是以root用户身份),有必要将cron.log
文件放在某个/home/pi/...
文件夹中,以提供对日志文件的写访问权限。
也许Raspbian需要一些时间来设置所有内容,然后才能开始申请。我用过:
@reboot sleep 10 && DISPLAY=:0 /home/pi/path/to/my/script.sh start
可以使用通常的cron设置代替@reboot,例如:
*/5 * * * *
(其余行,请参见上文)
每5分钟启动一次。