Linux: notify-send, DBus и crontab

Автор: | 31/10/2017

Имеется скрипт для вывода уведомления на экран каждые N минут из поста Arch Linux: уведомления в Openbox с libnotify:

#!/usr/bin/env bash

notify-send 'Hello, world!' 'Example.' --icon=dialog-information

Проблема в том, что по логам – он выполняется, но на экране сообщения не появляются.

Что бы заставить его работать – надо указать nofity-send на текущий адрес файла сокета DBus, т.к. из крон-задач переменные окружения пользователя не считываются.

Находим процессы:

[simterm]

$ ps aux | grep dbus
dbus       521  0.0  0.0  39360  4184 ?        Ss   10:51   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
setevoy    839  0.0  0.0  38960  3820 ?        Ss   10:52   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
...

[/simterm]

Находим файлы процесса dbus-daemon --session:

[simterm]

$ lsof -p 839                                                                                                                                                                               
...                                                                                            
dbus-daem 839 setevoy   10u     unix 0xffff9c03558d3000      0t0   16297 /run/user/1000/bus type=STREAM

[/simterm]

Проверяем значение переменной $DBUS_SESSION_BUS_ADDRESS:

[simterm]

$ echo $DBUS_SESSION_BUS_ADDRESS
unix:path=/run/user/1000/bus

[/simterm]

Обновляем скрипт:

#!/usr/bin/env bash
  
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
notify-send 'Hello, world!' 'Example.' --icon=dialog-information

Готово.

Переменная DBUS_SESSION_BUS_ADDRESS задаётся при запуске dbus-launch из Openbox.