When running the рукописный шрифт below from my локальный user crontab, with sudo
before /usr/bin/FreeFileSync
(last script's line), в small progress window opens on my GUI and things go well. The only thing is I have to неудар в лунку my вспотел passwd, which makes it интервключите and somewhat unwieldly.
Root privileges пахал necessary to run FFS, otherwise it complains about not having rights to get to some directories and поля being backed up.
#!/bin/bash
# define default display and pass it on to any child process
# from within the running shell
DISPLAY=:0.0
export DISPLAY
/usr/bin/FreeFileSync /home/user/bu-1.ffs_batch 2> \
/home/user/bu-1.ffs_log
When I call the same рукописный шрифт from my root crontab with sudo crontab -e
, FreeFileSync
never gets to run because of the following ошибка:
$ cat /home/user/bu-1.ffs_log
16:35:01: Error: Unable to initialize GTK+, is DISPLAY set properly?
Схвати хан be seen, I haveexport DISPLAY=:0.0
within the рукописный шрифт and my root crontab file is equipped with:
$ sudo crontab -e | head -4
[sudo] password for user:
1 SHELL=/bin/bash
2 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
3 HOME=/
4 MAILTO=root
Хан someone help troubleshooting the ошибка?
EDIT: Could it be that running this from root's crontab fails because user root
эксперт не open session and therefore не stdout to which to display? Хан I circumvent that difficulty by asking root to display to в current user's session's stdout? It seems to be worth в shot if doable; if so how do I do that?
Вы могли настроить sudo
не нуждаться в пароле для конкретной команды и вернуться к использованию некорневого крона. Для этого, принимая идентификатор пользователя "пользователя" хочет выполнить команду FreeFileSync
как корень, создайте файл /etc/sudoers.d/user
с
user ALL = NOPASSWD: /usr/bin/FreeFileSync
Команда должна быть дана с полным путем. Если Вы явно не перечислите args к команде, то любой args будет позволен sudo. Замена ALL
Вашим именем хоста (не localhost), чтобы быть более безопасным.
Это принимает файл /etc/sudoers
имеет строку: (обратите внимание, что # не является комментарием),
#includedir /etc/sudoers.d
В противном случае затем просто добавьте пользовательскую запись в/etc/sudoers. Будьте тщательным редактированием этого файла: используйте visudo или удостоверьтесь, чтобы у Вас были зарегистрированный корень или корень выполнения оболочки, чтобы смочь сделать любые восстановления.
У Вашего пользователя crontab запись может затем просто быть команда:
DISPLAY=:0.0 sudo /usr/bin/FreeFileSync /home/user/bu-1.ffs_batch 2>/home/user/bu-1.ffs_log
человечность sudo сохранит некоторые переменные среды для команды включая ДИСПЛЕЙ и ДОМОЙ (см. вывод sudo sudo -V
) таким образом, программа сможет считать ~/.Xauthority, файл (продолжите читать для деталей).
С другой стороны, продолжать использовать корень crontab: если, когда Вы делаете ps alxww|grep X
Вы находите свой сервер X11, работающий с -auth
опция, что-то вроде этого:
/usr/bin/X :0 ... -auth /var/run/lightdm/root/:0 ...
это означает, что клиенты должны соединить использование секрета в файле /var/run/lightdm/root/:0
. Этот файл содержит копию секрета в пользователе ~/.Xauthority
файл. Этот "секрет" является просто произвольным случайным числом. Если Вы - корень, можно считать оба файла, таким образом, клиент может просто обеспечить в среде:
XAUTHORITY=/var/run/lightdm/root/:0
С другой стороны, можно установить ДОМ на того из пользователя дисплея, HOME=/home/user
так, чтобы право .Xauthority
файл найден там.
С другой стороны, можно экспортировать секрет от этого до дома корня:
xauth -f /home/user/.Xauthority nextract - localhost/unix:0 | sudo xauth -f /root/.Xauthority nmerge -
и затем XAUTHORITY =/root/.Xauthority или просто РАЗМЕЩАЮТ =/root.