Запустите 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. Каков наилучший способ сделать это?

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

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

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