Linux: notify-send, DBus и crontab

By | 10/31/2017
 

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

#!/usr/bin/env bash

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

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

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

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

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
...

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

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

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

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

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

#!/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.