Я действительно хотел бы иметь возможность использовать 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