Имеется скрипт для вывода уведомления на экран каждые 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.