python - 使用 crontab 运行 tkinter GUI

标签 python tkinter cron raspberry-pi

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

0 18 * * * cd /home/pi/gui && python3 gui.py

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

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

最佳答案

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

尝试安装并使用 xvfb

0 18 * * * cd /home/pi/gui && xvfb-run python3 gui.py

更新 1:2018 年 6 月 22 日

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

XAUTHORITY=/home/<user>/.Xauthority DISPLAY=:0 python3 gui.py

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

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

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

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

关于python - 使用 crontab 运行 tkinter GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50801120/

相关文章:

python - Webdriver 异常 :Process unexpectedly closed with status: 1

cron - wget 不是通过 cronjob 执行而是直接在控制台中执行

linux - Cron 作业未在 Linux Mint 12 中运行

python - 嵌套一个函数

python - 将海龟图形保存为 .eps 文件时,背景颜色显示在屏幕上但未保存在 .eps 文件中

Python Tkinter - 在菜单中添加外部函数作为命令

git pull 自动通过 crontab

python - 如何传递本地变量并直接从另一个函数访问变量?

python - 根据另一列的多个条件修改一列值

python - 如何创建一个循环模块,为每个 SQL 行结果一次创建一个窗口?