Выполненные gsettings с crontab

Я сделал простой сценарий 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.. Что лучший способ состоит в том, чтобы сделать это?

2
задан 7 July 2018 в 16:35

1 ответ

Благодаря комментарию 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 и выбрать ту, которая принадлежит нашему пользователю.

Надеясь, что это будет полезно!

2
ответ дан 2 December 2019 в 03:32

Другие вопросы по тегам:

Похожие вопросы: