问题描述
我有一个简单的图形用户界面(使用tkinter创建),我想在一天中的特定时间在Raspberry pi 3上运行它。下面是我在crontab中使用的代码片段。我使用sudo crontabb-e调用了crontabb管理器。
0 18 * * * cd /home/pi/gui && python3 gui.py
目前,我可以通过PI的命令行直接调用该图形用户界面来执行它。但是,当我尝试使用cron执行此操作时,它不起作用。我还尝试切换到基本的python脚本(写入文件),并成功了。是否有特定的奇怪交互需要我注意?
我的设置:raspberry pi 3,python3,raspi-creen,tkinter(据我所知的最新版本)
推荐答案
sudo将在没有tty的情况下运行并显示,这就是您的命令不起作用的原因。
尝试安装xvfb并使用
0 18 * * * cd /home/pi/gui && xvfb-run python3 gui.py
更新-1:22-6-18
如果要使用实际显示,则需要确保使用以下命令
XAUTHORITY=/home/<user>/.Xauthority DISPLAY=:0 python3 gui.py
,还要确保cron是为您的用户使用的。默认DISPLAY
为:0
。
当您有一个XServer(图形用户界面显示)时,您不能未经授权就直接连接到它。当系统启动时,它创建一个文件,该位置存储在环境变量XAUTHORITY中。
运行cron时,您的环境变量有限。没有定义现有的XAUTHORITY
或DISPLAY
为了能够连接到您需要的显示器。因此,您需要定义程序所需的每个环境变量
因此您定义DISPLAY=:0
以选择默认显示,并且您需要设置XAUTHORITY=/home/<user>/.Xauthority
以证明您有权连接到该显示