LINUX.ORG.RU

DBus: сессии консоли и X'ов


0

0

Пишу приложение с использованием DBus. Общая идея: приложение графическое, если запускается еще одна копия, то она просто передает аргументы командной строки уже запущенному приложению. Если приложение запущено из cron'а или из консоли (не эмулятора терминала, а консоли), то также можно передавать какие-либо опции уже запущенной программе.

Проблема заключается в том, что, если программа запускается из cron'а или консоли, то она не видит уже запущенное приложение - насколько я понял, у них с X'ами разные DBus сессии. Если установить переменную окружения DISPLAY=:0.0, то все работает нормально, но так делать нельзя хотя бы потому, что нет никакой гарантии, что у пользователя будет именно DISPLAY=:0.0.

Подскажите, пожалуйста, как решаются подобные проблемы?

anonymous

> Подскажите, пожалуйста, как решаются подобные проблемы?

Коннектись к системной шине, а не к сессионной.

gaa ★★
()
Ответ на: комментарий от gaa

Системная шина не подходит, т. к. для нее нужно жестко прописывать DBus пути и имена (сервисы), а я этих имен не знаю во время компиляции, т. к. хочу обеспечить одновременную работу нескольких копий приложения и поэтому зашиваю в имя уникальный идентификатор конфига, с которым запускается приложение.

anonymous
()

> Общая идея: приложение графическое, если запускается еще одна копия, то она просто передает аргументы командной строки уже запущенному приложению.

а как сделана фича "открыть URL в новом табе" в том же Konqueror'е?

anonymous
()
Ответ на: комментарий от anonymous

> для нее нужно жестко прописывать DBus пути и имена (сервисы), а я этих имен не знаю во время компиляции, т. к. хочу обеспечить одновременную работу нескольких копий приложения и поэтому зашиваю в имя уникальный идентификатор конфига, с которым запускается приложение.

делай 2 сервиса, один с уникальным именем, второй с жёстко заданным -- что-то вроде singleton'а или lock-файла. Если он есть в DBus, значит приложение уже запущено, если нет -- это первый запуск, захватываем это имя.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.