选择system bus还是session bus?

本文介绍了在不同系统中使用DaemonDBus时如何选择systembus与sessionbus,并详细解释了两者的应用场景及配置过程。对于手机等单用户系统,由于只有一个会话,因此两者区别不大。文章还提供了具体的命令示例,帮助读者理解如何正确配置并使用这两种bus。

不同的系统在使用daemon dbus时,有两个选择,可以选择system bus,

简单些;也可以使用session bus; 手机不象PC那样有多用户,手机一般就单用户,

所以手机系统就一个session, 所以,用system bus和session bus来讲区别不大。

 

 

如何用session bus:

 

test@test-desktop:~$ dbus-launch --sh-syntax --exit-with-session
DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-4LByHVXzpZ,guid=6c8c42131a483732eca9a90048383b44';
export DBUS_SESSION_BUS_ADDRESS;
DBUS_SESSION_BUS_PID=6836;
test@test-desktop:~$

 

这样做不行,需要把环境变量设置一下

test@test-desktop:~$ dbus-launch --sh-syntax --exit-with-session >>env.sh

test@test-desktop:~$ source ./env.sh

 

然后另外开一个terminal, 直接运行source ./env.sh就可以了,这样两个terminal中的session dbus的环境设置是一样的。

 

 

 如果用system bus:

直接运行你系统里的dbus-daemon的命令:

test@test-desktop:~$ dbus-daemon --system
Failed to start message bus: The pid file "/var/run/dbus/pid" exists, if the message bus is not running, remove this file
test@test-desktop:~$

 

一般会出现上面的错误:

可以这样处理:

test@test-desktop:~$  rm -rf "/var/run/dbus/pid

test@test-desktop:~$ dbus-daemon --system 

这样系统中的system bus就可以用了。

 

 根据各个系统的不同,可能所有的程序都挂载到system bus上,也可能都挂载到session bus上面,

向maemo平台就是使用的session bus. 从上面的启动daemon bus的过程中可以看出,用system bus简单些;

用session bus配置就麻烦些:各个不同的程序可能是运行在不同的进程的,这样往session bus上面挂链接

时,需要注意环境变量一致的问题,否则挂接上去了,也不能实现进程之间的正常通信。

 

 

当遇到 `failed to connect to system dbus` 错误时,通常意味着进程无法与 D-Bus 系统总线建立连接。这可能发生在图形界面环境启动失败、D-Bus 守护进程未运行或环境变量配置不正确的情况下。 ### 常见原因及修复方法 1. **检查 D-Bus 服务是否运行** 使用以下命令确认 `dbus` 服务正在运行: ```bash sudo systemctl status dbus ``` 如果服务未运行,可以使用以下命令启动并启用它: ```bash sudo systemctl start dbus sudo systemctl enable dbus ``` 2. **设置 DBUS_SESSION_BUS_ADDRESS 环境变量** 当前会话的 D-Bus 地址通常存储在 `/run/user/$UID/bus` 或类似路径中。可以通过以下命令手动设置环境变量[^1]: ```bash export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus ``` 这将确保应用程序能够找到当前用户的 D-Bus 会话总线。 3. **避免依赖 autolaunch 行为** 默认情况下,如果未设置 `DBUS_SESSION_BUS_ADDRESS`,程序可能会尝试通过 `dbus-launch --autolaunch` 启动一个新的会话总线实例。这种行为在某些环境中(如无头服务器或容器)可能失败。建议显式设置地址以避免依赖自动启动机制。 4. **在容器环境中配置 D-Bus** 如果是在 Docker 或其他容器环境中出现该问题,需要确保容器内挂载了主机的 D-Bus 套接字。例如,在运行容器时添加如下参数: ```bash docker run -it \ --mount type=bind,source=/run/user/$(id -u)/bus,target=/run/user/root/bus \ -e DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/root/bus \ your-image ``` 5. **安装必要的 D-Bus 包** 某些系统可能缺少必要的 D-Bus 组件。可以尝试重新安装或更新 D-Bus 软件包: ```bash sudo apt update sudo apt install --reinstall dbus ``` 6. **检查权限和用户上下文** D-Bus 会根据用户权限进行访问控制。确保执行相关操作的用户具有访问 D-Bus 的权限,并且没有 SELinux 或 AppArmor 的限制阻止访问。 --- ### 示例:修复脚本片段 ```bash # 确保 D-Bus 服务运行 sudo systemctl start dbus sudo systemctl enable dbus # 设置环境变量 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus # 验证是否成功连接 dbus-send --session --dest=org.freedesktop.DBus --type=method_call /org/freedesktop/DBus org.freedesktop.DBus.ListNames ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值