Подключиться к сеансу DBus на другом компьютере

Я могу запустить свой тест Qt DBus, подключившись к шине сессии:

QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerService(...)
....
TestserviceInterface testserviceInterface( .... , connection, &a);

Но могу ли я подключиться к этому DBus с другого компьютера. Я знаю, что могу сделать что-то вроде этого:

 connection = QDBusConnection::connectToPeer("tcp:host=127.0.0.1,port=45000", Testservice::ServiceName);

Но как мне получить порт? Что бы я ни пытался, похоже, нет никакой связи. Или я здесь не по тому пути и нам нужен Peer 2 Peer DBus вместо сессионной шины?

Я почти уверен, что название сервиса правильное, насколько я вижу qdbusviewer, Когда я использую dbus-monitor вывод для меня много не значит, я не вижу ни одного порта и т.д.

Любая идея, как я мог бы подключиться с другого компьютера?

PS: я знаю, что есть что-то вроде gabriel для туннелирования через SSH ( http://gabriel.sourceforge.net/howto.html). Это не то, чем я занимаюсь, я ищу "прямую связь".

2 ответа

Решение

Демон Session Bus обычно слушает сокет Unix /var/run/dbus/system_bus_socket (Проверьте свои /usr/local/etc/dbus-1/session.conf config), что означает, что вы не можете получить к нему доступ через tcp. Запустите переадресацию портов на компьютере, на котором работает демон шины (используя socat например) или настройте его на прослушивание tcp.

Вы можете использовать SSH для создания туннеля для DBus.

      ssh -nNT -L ./dbus_on_local:/var/run/dbus/system_bus_socket user@remote

Объяснение

Это создаст локальный «файл» (сокет домена unix)dbus_on_localк которому вы можете подключиться.

Другие вопросы по тегам