在 windows 上指定 dbus 会话地址
Specify dbus session address on windows
Windows (https://code.google.com/p/dbus-windows-installer/downloads/list) 上的 DBus 默认 session.conf 使用 <listen>autolaunch:scope=install-path</listen>
,顾名思义,它使用 dbus-daemon 可执行文件的当前路径以某种方式确定会话地址。
有没有办法改为指定显式路径?也许是 tcp:
?
经过多次尝试,我找到了解决办法。尽管 Windows 的 1.4.3 DBus 版本(至少目前)在 https://code.google.com/p/dbus-windows-installer/downloads/list 可用,但它确实支持 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
- 运行 压缩文件中的可执行文件,它将 libexpat 安装到 C:\Program Files (x86)\Expat 2.0.1 目录中。
- 我们称它为 ${expatDir}
- 获取DBus源
- git 克隆 git://anongit.freedesktop.org/git/dbus/dbus
- cd dbus
- 我们称它为 ${dbusSrcDir}
- git 签出 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
或者您可以通过以下方式制作可分发的 "deploy package"
- 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
- 要在您的应用程序中使用 "the deploy package",请修改 %PATH% 以指向您的 "deploy package" bin 目录,并确保在执行任何操作之前获取 dbus-env.bat。
Windows (https://code.google.com/p/dbus-windows-installer/downloads/list) 上的 DBus 默认 session.conf 使用 <listen>autolaunch:scope=install-path</listen>
,顾名思义,它使用 dbus-daemon 可执行文件的当前路径以某种方式确定会话地址。
有没有办法改为指定显式路径?也许是 tcp:
?
经过多次尝试,我找到了解决办法。尽管 Windows 的 1.4.3 DBus 版本(至少目前)在 https://code.google.com/p/dbus-windows-installer/downloads/list 可用,但它确实支持 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
- 运行 压缩文件中的可执行文件,它将 libexpat 安装到 C:\Program Files (x86)\Expat 2.0.1 目录中。
- 我们称它为 ${expatDir}
- 获取DBus源
- git 克隆 git://anongit.freedesktop.org/git/dbus/dbus
- cd dbus
- 我们称它为 ${dbusSrcDir}
- git 签出 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
或者您可以通过以下方式制作可分发的 "deploy package"- 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
- 要在您的应用程序中使用 "the deploy package",请修改 %PATH% 以指向您的 "deploy package" bin 目录,并确保在执行任何操作之前获取 dbus-env.bat。