Назад | Перейти на главную страницу

Как использовать Crontab для отображения чего-либо пользователям на DISPLAY =: 0.0 или запуска программы с графическим интерфейсом

Я действительно хотел бы иметь возможность использовать crontab для обновления чего-либо каждые 3 часа, НО crontab не запускает мой скрипт с достаточными привилегиями для запуска графического интерфейса.

Уточнение: у меня есть сложный скрипт, который генерирует изображение (на основе текущего доступного веб-контента с пары серверов) каждые 3 часа - я хочу, чтобы он отображал то, что он делает, чтобы я знал, не удалось это или нет.

Я пробовал: 1. Добавление файла в /etc/cron.d/myscript для запуска cron 2. варианты xdg-open, gnome-terminal, mrxvt -e, env DISPLAY =: 0.0, root / usr / local / bin / myscript 3. Редактирование моего пользовательского cron - crontab -u username -e

Myscript - это сложный маленький зверь, который загружает изображение (которое обновляется каждые полчаса), затем загружает веб-страницу другого веб-сайта как index.html - sed, находит конкретное изображение, которое ему нужно (на основе сегодняшней даты и времени), затем обрезает и преобразует это с помощью imagemagick.

man xauth
man xhost

Можешь попробовать xhost local: как начало.

Если вы хотите открыть окно на рабочем столе пользователя, вам необходимо экспортировать информацию аутентификации X11 из вашего пользовательского контекста и предоставить ее вашему корневому контексту.

Как пользователь экспортируйте информацию xauth:

$ xauth extract /home/foo/xauth-foo $DISPLAY
$ echo $DISPLAY
:0.0

Затем, как root, импортируйте его и запустите свой X-клиент:

# xauth merge /home/foo/xauth-foo
# export DISPLAY=:0.0
# xclock

Это не проверено моими записями. У меня не было варианта использования этого как минимум 5 лет.

Я на самом деле только что спросил об этом вопрос я и сумел ответить на него после получения некоторых рекомендаций ( Источник 1 & Источник 2). Однако это было для Raspberry Pi, поэтому вам может потребоваться другая команда.

gnome-terminal -e command

xterm -e command

konsole -e command

terminal -e command

lxterminal -e command

Используя команду lxterminal -e command, Я могу заставить терминал открывать новое окно. Но это еще не все, что нужно сделать. Укажите путь, а не полагайтесь на переменные среды в crontab ... и я уже использовал PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin так что я просто согласился с этим. Затем создайте простой сценарий для использования в crontab, который вызывает другой сценарий.

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
lxterminal -e /home/pi/Public/./test

Crontab (команда crontab -e) в итоге выглядит как ...

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
* * * * * /home/pi/Public/test2

Что вызывает финальный тест скрипта.

#!/bin/bash
echo 'This is a test.'
echo 'This is a written test with lxterminal -e for real.' >> /home/pi/Public/testwrite.txt
sleep 10