Я сделал простой сценарий Python для изменения моих обоев (Ubuntu 18.04) путем случайного взятия изображения в определенной папке. Я использую команду gsettings. Это работает, когда я выполняю его вручную, но я хочу автоматизировать его с crontab.
У меня была следующая ошибка, потому что crontab не имеет всех переменных, которые я имел, когда я запускаю свой скрипт вручную:
(process:xxxxx): dconf-WARNING **: 15:07:01.547: failed to commit changes to dconf: Impossible de lancer automatiquement D-Bus sans $DISPLAY X11
Таким образом, я нашел некоторые решения как:
dbus_session_bus_address = 'PID=$(pgrep gnome-session | head -n1) && export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-) && '
command = dbus_session_bus_address + 'gsettings set org.gnome.desktop.background picture-uri ' + getRandomImage()
Это кажется работой для большинства людей, но у меня есть проблема, мой crontab не имеет полномочий:
grep: /proc/$pid/environ: Permission denied
dconf-WARNING **: 15:19:01.514: failed to commit changes to dconf: The address indicated is empty
Таким образом, я запускаю скрипт с sudo crontab -e
, но у меня есть следующая ошибка:
dconf-WARNING **: 15:22:01.807: failed to commit changes to dconf: Connection is closed
Кроме того, я предпочитаю, используют моего пользователя crontab.. Что лучший способ состоит в том, чтобы сделать это?
Благодаря комментарию Steeldriver я нашел решение!
На самом деле, команда pgrep gnome-session
дает мне 2 PID.
Когда я ls -l /proc/
, я вижу, что первый каталог pid принадлежит gdm (Gnome Display Manager), а второй принадлежит моему пользователю.
Так что в моем сценарии я просто заменяю PID=$(pgrep gnome-session | head -n1)
на PID=$(pgrep gnome-session | tail -n1)
, чтобы использовать привязку PID для моего пользователя.
Я не знаю, может ли это решение (с tail -n1
) работать на всех. Я думаю, что лучше всего выполнить команду pgrep gnome-session
, посмотреть на владельца папок pid и выбрать ту, которая принадлежит нашему пользователю.
Надеясь, что это будет полезно!