LINUX.ORG.RU

D-Bus проблема запуска консольных приложений

 , ,


1

1

Пишу на QT для межпроцессорного взамодействия использую D-Bus и библиотеки QtDbus. Проблема на писал консольную программу которая регистрируется как сервер на шине D-Bus, если запускаю программу с gnome-terminal все проходит нормально, если пытаюсь запустить на консоли выдает ошибку «/bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed» или при запуске по SSH на удаленной машине.



Последнее исправление: cetjs2 (всего исправлений: 3)
Ответ на: комментарий от alexD84

Не-не. Я не эксперт по dbus. Только могу указать направление в силу некоторых общих познаний. А дальше сами.

Elyas ★★★★★
()

D-Bus - это Desktop Bus. Если нужна независимость от сессии, используй механизмы IPC из POSIX вместо этого высера.

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

D-Bus меня подкупил только из-за возможности передавать сигнал/слот между различными процессами что при использовании QT довольно сильно облегчает синхронизацию и отслеживание проблем в не родственных процессах

alexD84
() автор топика
Ответ на: комментарий от annulen

Спасибо посмотрю что за библиотеки.Просто я уже довольно много сделал на завязки с D-Bus уже на этапе отладки попробовал запускать в авто запуске и тут вылезла эта проблема если не получится её решить придется всю идеологию взаимодействия пересматривать.Я уже 3-дня рою и безрезультатно может кто поможет

alexD84
() автор топика

для сессионной шины нужны иксы. Запускай перед свой программой Xvfb и экспортируй переменную DISPLAY для эмуляции иксов, теоретически поможет.

alex_custov ★★★★★
()
Последнее исправление: alex_custov (всего исправлений: 1)
Ответ на: комментарий от alex_custov

Спасибо по пробою DBUS_SESSION_BUS_ADDRESS может подскажете что это за переменная она как то завязана dbus-launch.Когда я делал так $dbus-launch myApp(процесс) то тогда мой процесс запускается. Я выяснил что появляется новый в dbus-demon но я не как не могу достучатся по D-Bus к этому процессу

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

сторонняя, и уже не развивающаяся(коммитов новых нет, баги не фиксят, пул-реквесты никто не мержит), но там много полезностей. используем только некоторые части QxtCore и QxtNetwork. http://libqxt.bitbucket.org/doc/tip/qxtrpcpeer.html - вот штука которая qt signal'ы по сети гонять может.

dhampire ★★★
()
Последнее исправление: dhampire (всего исправлений: 1)

Если регистрироваться на системной шине, то тогда иксы не нужны. Но в таком случае нужно файл конфигурации положить в /etc/dbus-1/system.d/

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

если можно поточней рассказать про файл конфигурации или подсказать где можно почитать.Открыл папку там находятся XML в Qt XML генерится для создания adptera, proxi классов для работы с шиной D-Bus но там разные форматы XML файлов

alexD84
() автор топика
Ответ на: комментарий от annulen

Вот как бы эту, без сомнения замечательную мысль втолковать бы, да поглубже, например, девелоперам BlueZ например? Чтоб они не пихали эту ....учую Desktop Bus в крайне низкоуровневую системную библиотеку обслуживающую небольшую часть сетевой подсистемы.

А то, сцуко, теперь без всякой дряни девайс не запаришь, блин. Причём, сцуко, всё отлично работало без D-Bus вообще ещё совсем недавно, но нет, надо было обязательно выкинуть опцию pin_helper и заменить на это сраное d-bus говно, которое, кстати, нормально не работает, ибо чтоб работало - надо чтоб какая-нибудь дрянь всегда была запущена и слушала этот долбаный d-bus.

Что-то отвлёкся я....

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

Я как-то методом тыка его сделал. Пытался сделать как сказано тут тут, но ничего не вышло. В итоге просто скопировал соседний файлик от Skype и перебил параметры под свои.

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

Форкни BlueZ, выкини всё связанное с d-bus и выложи на github, другого способа нет :-(

Там сейчас в каждой дырке этот D-Bus торчит, работы слишком много. Загаживают ведь этой дрянью сотни людей, а вычищать придётся в одну харю. И при выходе каждой новой версии придётся кучу работы делать заново.

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

попробовал DBUS_SESSION_BUS_ADDRESS устанавливать не чего не вышло ее надо передать параметр. При запуске X11 она DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-1yUzeHrHAj,guid=e00ac10d9d12285204ea0d540000004a кто её инициализирует не смог найти. Думал что ее инициализирует dbus-launch. Но что не получилось.

alexD84
() автор топика
Ответ на: комментарий от demidrol

Не получалось присвоить переменную DBUS_SESSION_BUS_ADDRESS но вроде разобрался я неправильно делал. Только после вызова dbus-launch появился еще один демон D-Bus (dbus-demon) [root@localhost etc]# ps -A |grep dbus- 1599 ? 00:00:02 dbus-daemon 2216 ? 00:00:00 dbus-launch 2309 ? 00:00:00 dbus-launch 2310 ? 00:00:00 dbus-daemon 6877 ? 00:00:00 dbus-daemon как я понимаю я создал еще одну шину D-Bus.Вообщем есть визуализация естественно она стартует после X11 и на D-Bus регистрируется как клиент.Вторая часть совта работает как консольное приложение регистрируется как сервер на D-Bus и не должна зависеть от X11 теперь она регистрируется на шине D-Bus но визуализация не видит сервера. Понятно что визуализация и консольное приложение работают с разными демонами D-Bus как сделать так что-бы если даже нет X11 консольное приложение работало с одним и темже dbus-daemon после старта X11

alexD84
() автор топика

Я решил отказаться от использования D-Bus.Пробовал работать через System Bus, получилось вот только нужно таскать конфигурациониик, а это меня не устраивает просто совт должен быть не зависимым, запустил и забыл.Поэтому буду использовать UNIX Soket или еще что нибудь пока не решил.В целом D-Bus можно использовать в Desktop приложениях которые регистрируются как сервер на D-Bus, особенно если пишите в Qt только для Linux

alexD84
() автор топика

Всем кто откликнулся СПАСИБО за помощь!!!!!

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