Я написал скрипт для изменения фона рабочего стола. Я хочу, чтобы этот скрипт запускался на anacron, потому что я часто выключаю свой компьютер ночью. Я протестировал части сценария, и я думаю, что проблема в этой строке:
DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"'
($wallPath
- путь к обоям)
. не когда анакрон работает. Я подумал, что это потому, что anacron запускается как root (я также проверяю dconf для root и мой пользователь проверяет это). Поэтому я нашел способ запустить анакрон от имени конкретного пользователя. Но это не сработало.
Может кто-нибудь помочь мне найти способ запуска gsettings как пользователь? Я пробовал su (имя пользователя) -c 'sh run / this / script' безрезультатно. Я нашел кое-что об экспорте некоторых переменных dbus env, но у меня возникают трудности с его отслеживанием.
В качестве root, простой sudo -u <username> <command>
будет делать.
Вы можете настроить отдельный экземпляр anacron для запуска в пользовательском режиме. Для этого создайте папку .anacron
в вашем домашнем каталоге и в ней две подпапки, etc
и spool
.
Затем перейдите к созданию нового anacrontab
во вновь созданной папке ~/.anacron/etc
со следующим содержимым:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 10 wallpaperchanger script.sh
где script.sh - путь к вашему сценарию (или однострочный , твой выбор). Сконфигурируйте интервал и задержку в свое удовольствие и сохраните файл как anacrontab
.
Затем добавьте следующую строку в ваш файл ~/.profile
:
/usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool
Anacron должен быть запущен при следующем входе в систему.
Примечание : убедитесь, что $wallPath
- это правильный путь к файлу, поскольку вы не учитывали пробелы и специальные символы в своем скрипте.
Вместо использования:
DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"
попробуйте использовать:
PID=$(pgrep gnome-session) # instead of 'gnome-session' it can be also used 'noutilus' or 'compiz' or the name of a process of a graphical program about that you are sure that is running after you log in the X session
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"
См. Объяснение в моем ответе здесь .