连接到不同计算机上的会话 DBus

Posted

技术标签:

【中文标题】连接到不同计算机上的会话 DBus【英文标题】:Connect to session DBus on different computer 【发布时间】:2013-10-08 21:11:33 【问题描述】:

我可以通过连接到会话总线来运行我的 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) 建立隧道。这不是我要做的,我正在寻找“直接联系”。

【问题讨论】:

【参考方案1】:

会话总线守护进程通常监听 unix 套接字 /var/run/dbus/system_bus_socket(检查你的 /usr/local/etc/dbus-1/session.conf 配置),这意味着你不能通过 tcp 远程访问它。在运行总线守护程序的计算机上启动某种端口转发(例如使用 socat)或将其配置为侦听 tcp。

【讨论】:

也就是说,如果会话总线配置为监听 tcp,我可以通过 TCP 连接会话总线。需要尝试。 我建议启动简单的服务来监听 tcp 并连接到系统总线,而不是重新配置 dbus 守护进程

以上是关于连接到不同计算机上的会话 DBus的主要内容,如果未能解决你的问题,请参考以下文章

计算机无法连接到远程计算机上的另一个控制台会话,您正在运行一个控制台会话,怎么办?

无法从 ubuntu 中的服务连接到会话 dbus

dbus 如何重新连接到新的会话总线守护进程

dbus会话连接:用qt槽连接dbus信号,怎么做?

systemd 服务无法连接到会话 d-bus

如何从未知服务器连接到客户端计算机上的开放 tcp 端口?