使用 crontab 运行 tkinter GUI

Sim*_*oux 2 python cron tkinter raspberry-pi

我有一个简单的 GUI(使用 tkinter 创建),我想在一天中的特定时间在 Raspberry pi 3 上运行它。下面是我在 crontab 中使用的代码片段。我使用 sudo crontab -e 调用 crontab 管理器。

0 18 * * * cd /home/pi/gui && python3 gui.py
Run Code Online (Sandbox Code Playgroud)

目前,我可以通过 Pi 的命令行直接调用 GUI 来执行它。但是,当我尝试使用 cron 来执行此操作时,它不起作用。我还尝试切换到基本的 python 脚本(写入文件)并且成功了。是否有我需要注意的特定奇怪交互?

我的设置:raspberry pi 3、python 3、raspi-screen、tkinter(据我所知最新版本)

Tar*_*ani 5

sudo 将在没有 tty 的情况下运行并显示,这就是您的命令不起作用的原因。

尝试安装 xvfb 并使用

0 18 * * * cd /home/pi/gui && xvfb-run python3 gui.py
Run Code Online (Sandbox Code Playgroud)

更新 1:2018 年 6 月 22 日

如果您想使用实际显示,那么您需要确保使用以下命令

XAUTHORITY=/home/<user>/.Xauthority DISPLAY=:0 python3 gui.py
Run Code Online (Sandbox Code Playgroud)

并且还要确保 cron 适合您的用户。默认DISPLAY:0.

当您有 XServer(GUI 显示)时,您不能在未经授权的情况下连接到它。当系统启动时,它会创建一个文件,并且该位置存储在环境变量 XAUTHORITY 中。

当您运行 cron 时,您的环境变量是有限的。没有现有的XAUTHORITYDISPLAY已定义的能够连接到您需要的显示。因此,您需要定义程序所需的每个环境变量

所以你定义DISPLAY=:0选择默认显示器,你需要设置XAUTHORITY=/home/<user>/.Xauthority证明你有权连接到显示器