Я использую доступ к основному DBUS из какого-то процесса. Проблема в том, что он запускается от другого пользователя, а сеанс DBUS для них другой. Поэтому я не могу получить доступ к приложению, которое использует DBUS через другой процесс, если сеансы отличаются. Я нашел способ решить эту проблему: какой-то скрипт записывает в файл данные сеанса dbus от основного пользователя (я установил его при загрузке системы). Вот этот скрипт:
#!/bin/bash
touch /.Xdbus
chmod 666 /.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > /.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /.Xdbus
Вот пример этого файла:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023
export DBUS_SESSION_BUS_ADDRESS
Теперь мне просто нужно выполнить данные из этого файла, и оба сеанса DBUS будут одинаковыми. Вот некоторые неприятности:
#!/bin/bash
if [ -f /.Xdbus ]
then
source /.Xdbus; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"
else
echo "File doesnt exist"
fi
Как вы могли заметить, я использую pidgin в качестве приложения DBUS. Но выдает ошибку, что фиолетового приложения нет, поэтому сессии DBUS разные! Итак, команда:
source /.Xdbus
Не сработало. Почему?
UPD
source /.Xdbus; echo $DBUS_SESSION_BUS_ADDRESS; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"; echo $DBUS_SESSION_BUS_ADDRESS;
→
unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023 No existing libpurple instance detected. unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023