Я создаю сценарий для управления моими значками, и я использую команду gvfs-set-attribute
чтобы сделать это. Сценарий хорошо работает, когда я выполняю его с терминалом, но ему не удается работать, когда я использую cron
. Вот упрощенная версия моей проблемы:
#!/bin/bash
PATH=/home/myUser/bin:/home/myUser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/myUser/.local/share/gvfs-metadata
gvfs-set-attribute -t string /home/myUser/myFolder metadata::custom-icon file:///home/myUser/myImage.png
Я использовал crontab -e
и улаженный мой сценарий для выполнения каждую минуту * * * * * /home/myUser/script.bash
. Проблема состоит в том, что этот сценарий не работает вообще, когда я выполняю его с cron
.
Я уже записал PATH
на моем сценарии, как описано в этой другой проблеме и выводе команды whereis gvfs-set-attribute
:
gvfs-set-attribute: /usr/bin/gvfs-set-attribute /usr/share/man/man1/gvfs-set-attribute.1.gz
Так, я предполагаю, что нет ничего неправильно с PATH
здесь. Я также попытался запустить свой скрипт непосредственно с полным путем: /usr/bin/gvfs-set-attribute
. Но любая из тех вещей работала... Делает у любого есть любая идея того, что происходит и почему я не могу использовать команду gvfs-set-attribute
с cron
?
Попытайтесь добавить эту строку к своему сценарию (очевидно, перед вызовом к gvfs-set-attribute
):
export $(cat /proc/$(pgrep gnome-session)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)
Это берет DBUS_SESSION_BUS_ADDRESS
переменная среды от Вашей существующей сессии гнома. Это делает два предположения хотя:
Если существует несколько сессий гнома (т.е. один каждый для многочисленных пользователей) можно изменить эту строку для работы на определенного пользователя путем добавления -u
опция к pgrep
. Например:
export $(cat /proc/$(pgrep gnome-session -u myUser)/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS)
Если Вы не используете гнома - затем я думаю, что это будет работать с другими настольными средами путем замены gnome-session
с другим значением - такой как lxsession
для LXDE.
cron
задания не работают под X-оконной системой и обычно не получают доступ к объектам GUI.
Однако можно обмануть.
В терминале, работающем под GUI:
xhost +localhost
echo "export DISPLAY=\"$DISPLAY\"" >$HOME/.display
И, около начала cron
задание:
source $HOME/.display
Читать man xhost
.