Запуск графического интерфейса tkinter с использованием crontab - PullRequest
0 голосов
/ 11 июня 2018

У меня есть простой графический интерфейс (созданный с использованием tkinter), который я хочу запускать в определенное время дня на Raspberry pi 3. Ниже приведен фрагмент кода, который я использовал в crontab.Я вызвал менеджер crontab, используя sudo crontab -e.

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

На данный момент я могу выполнить GUI, вызывая его напрямую через командную строку Pi.Тем не менее, это не работает, когда я пытаюсь сделать это с помощью cron.Я также попытался перейти на базовый скрипт на Python (запись в файл), и это сработало.Есть ли какое-то странное взаимодействие, о котором мне нужно знать?

Мои настройки: raspberry pi 3, python 3, raspi-screen, tkinter (последняя версия, насколько я знаю)

1 Ответ

0 голосов
/ 18 июня 2018

sudo будет работать без tty и отображения, поэтому ваша команда не будет работать.

Попробуйте установить xvfb и используйте

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

Update-1: 22-Jun-18

Если вы хотите использовать свой фактический дисплейтогда вам нужно убедиться, что вы используете приведенную ниже команду

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

, а также убедиться, что cron предназначен для вашего пользователя.По умолчанию DISPLAY равно :0.

Если у вас есть XServer (дисплей с графическим интерфейсом), вы не можете просто подключиться к нему без авторизации.При запуске системы создается файл, и это местоположение сохраняется в переменной окружения XAUTHORITY.

Когда вы запускаете cron, у вас ограниченные переменные окружения.Не существует существующих XAUTHORITY или DISPLAY, определенных для возможности подключения к необходимому дисплею.Поэтому вам нужно определить каждую переменную среды, которая потребуется вашей программе

Итак, вы определяете DISPLAY=:0, чтобы выбрать отображение по умолчанию, и вам нужно установить XAUTHORITY=/home/<user>/.Xauthority, чтобы доказать, что вы авторизованы для подключения кдисплей

...