在 windows 上指定 dbus 会话地址

Posted

技术标签:

【中文标题】在 windows 上指定 dbus 会话地址【英文标题】:Specify dbus session address on windows 【发布时间】:2016-03-24 08:41:59 【问题描述】:

Windows 上 DBu​​s 的默认 session.conf (https://code.google.com/p/dbus-windows-installer/downloads/list) 使用 <listen>autolaunch:scope=install-path</listen>,顾名思义,它使用 dbus-daemon 可执行文件的当前路径以某种方式确定会话地址。

有没有办法指定显式路径?也许是tcp:

【问题讨论】:

【参考方案1】:

经过多次尝试,我找到了解决方案。尽管(至少目前)在https://code.google.com/p/dbus-windows-installer/downloads/list 上可用的 Windows 版 DBus 1.4.3 版本已经很老了,但它实际上支持tcp: 语法。

安装DBus-Windows-Installer-1.4.1-2.exe 做了两件事:

    C:\Program Files (x86)\DBus中提供DBus库和默认配置 它将C:\Program Files (x86)\DBus\bin 添加到%PATH%

拥有后者是必要的,这样您的应用程序才能在运行时访问 DBus DLL 和 EXE。要使此安装使用tcp: 语法,您必须

    C:\Program Files (x86)\DBus\etc\session.conf 编辑为<listen>tcp:host=localhost,port=54321,family=ipv4</listen>C:\Program Files (x86)\DBus\bin\dbus-env.bat 编辑为set DBUS_SESSION_BUS_ADDRESS=tcp:host=localhost,port=54321,family=ipv4 从首先执行dbus-env.bat 然后运行dbus-daemon.exe --session 的环境启动会话守护程序 (可选)从首先执行dbus-env.bat 然后运行dbus-monitor.exe --session 的环境启动会话监视器 从首先执行 dbus-env.bat 然后实际运行您的应用程序的环境启动您的应用程序

正如我上面所说,DBus 1.4.3 已经很老了。事实上,根据https://code.google.com/p/support/wiki/ReadOnlyTransition 的说法,它甚至可能很快就无法下载。在撰写本文时,最新的稳定分支是 1.10。因此,这里是构建您自己的最新 DBus 的说明

    安装 Visual Studio 任何版本 2010 及更高版本都可以满足要求,包括免费的 Express 版本

    安装 CMake

    我相信任何最新版本都可以,但我使用了https://cmake.org/files/v3.4/cmake-3.4.1-win32-x86.exe 我的建议是不要将 cmake 添加到路径中,只是为了保持系统清洁

    获取 libexpat

    我相信任何最新版本都可以,但我使用了http://olex.openlogic.com/package_versions/6311/download?package_version_id=1765&path=https%3A%2F%2Folex-secure.openlogic.com%2Fcontent%2Fopenlogic%2Fexpat%2F2.0.1%2Fopenlogic-expat-2.0.1-windows-bin-1.zip 从 zipfile 运行可执行文件,它将 libexpat 安装到 C:\Program Files (x86)\Expat 2.0.1 目录中。 我们称之为 $expatDir 获取 DBus 源 git clone git://anongit.freedesktop.org/git/dbus/dbus cd dbus 我们称之为 $dbusSrcDir git checkout dbus-1.10 这是当前的稳定分支 为 VS2015 启动开发者命令提示符 cd $dbusSrcDir cd .. mkdir dbus-build cd dbus-build "c:\Program Files (x86)\CMake\bin\cmake.exe" -G "NMake Makefiles" -DCMAKE_INCLUDE_PATH:PATH="$expatDir\Source\lib" -DCMAKE_LIBRARY_PATH:PATH="$ expatDir\Bin" -DDBUS_BUILD_TESTS:BOOL=OFF -DDBUS_DISABLE_ASSERT:BOOL=ON -DDBUS_USE_OUTPUT_DEBUG_STRING:BOOL=ON -DDBUS_ENABLE_DOXYGEN_DOCS:BOOL=OFF ..\dbus\cmake nmake 此时,您可以使用nmake install 安装到C:\Program Files (x86)\DBus,也可以通过以下方式制作可分发的“部署包” mkdir c:\temp\dbus-deploy mkdir c:\temp\dbus-deploy\bin mkdir c:\temp\dbus-deploy\share mkdir c:\temp\dbus-deploy\share\dbus-1 复制 bin\dbus-1-3.dll c:\temp\dbus-deploy\bin 复制 bin\dbus-daemon.exe c:\temp\dbus-deploy\bin 复制 bin\dbus-env.bat c:\temp\dbus-deploy\bin 复制 bin\dbus-launch.exe c:\temp\dbus-deploy\bin 复制 bin\dbus-monitor.exe c:\temp\dbus-deploy\bin 复制 bin\dbus-send.exe c:\temp\dbus-deploy\bin 复制 $expatDir\Bin\libexpat.dll c:\temp\dbus-deploy\bin 创建一个 c:\temp\dbus-deploy\share\dbus-1\session.conf 包含<listen>tcp:host=localhost,port=54321,family=ipv4</listen> 的常规内容 将c:\temp\dbus-deploy\bin\dbus-env.bat 编辑为set DBUS_SESSION_BUS_ADDRESS=tcp:host=localhost,port=54321,family=ipv4 要在应用程序中使用“部署包”,请修改 %PATH% 以指向“部署包”bin 目录,并确保在执行任何操作之前获取 dbus-env.bat。

【讨论】:

以上是关于在 windows 上指定 dbus 会话地址的主要内容,如果未能解决你的问题,请参考以下文章

dbus-发送到远程机器

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

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

使用系统 DBus 的 registerService 失败(但适用于会话 DBus)

如何在 Windows 上运行 python dbus?

在初始化脚本中启动时如何设置会话 DBus 的环境变量?