Gentoo D-Bus
安装 firefox 时发现需要 dbus USE flag支持(现在默认不需要了),不过 chromium 安装没有这个需求(我在考虑作为精简系统是否确实需要这个参数?) ,在 Gentoo Linux Sway fcitx中文输入 可以看到 fcitx
是通过 dbus
和应用通讯的,所以修订 在MacBook Pro上安装Gentoo Linux 配置。
D-Bus
D-Bus是应用程序的一个进程间通讯(interprocess communication, IPC
)系统。软件使用D-Bus实现服务间通讯。
备注
有两种不同的 D-Bus 总线:
system bus
: 和操作系统整体有关的消息总线,例如硬件连接和断开session bus
: 和特定用户会话有关的消息,例如 X 或 Wayland session
USE flags
全局 dbus
USE flag 支持D-Bus。激活这个参数会自动拉取 sys-apps/dbus
,这也是 desktop
profile默认激活的USE flag。(我在 在MacBook Pro上安装Gentoo Linux 实践采用 no-multilib (stable)
profile,构建轻量级服务器系统,则默认没有启用dbus)
编辑
/etc/protage/make.conf
激活全局D-Bus
dbus
USE="dbus"
针对 sys-apps/dbus
应用有一些可能常用参数:
X
: 支持X11elogind
: 登陆管理器增强版,用于提供 multiseat 增强,适合非 Systemd进程管理器 的init系统,但是也在KDE和GNOME环境中的一些流行程序中使用(例如可以实现普通用户关机和重启系统)systemd
: 和sys-apps/systemd
at_console 支持一起编译
在修订了 dbus
全局参数之后,使用以下命令的 --changed-use
选项确保更新整个系统
emerge --ask --changed-use --deep @world
配置
主要的配置文件有2个:
/usr/share/dbus-1/system.conf
用于 system bus/usr/share/dbus-1/session.conf
用于 session bus
D-Bus system bus: dbus
服务
D-Bus服务,也就是 OpenRC服务配置的 dbus
service,是只负责 system bus 但不负责 session bus。
对于OpenRC,需要使用如下命令启动和激活
dbus
服务:
/etc/init.d/dbus start
rc-update add dbus default
D-Bus session bus
对于 KDE 和 GNOME 桌面环境,需要自动启动一个session bus。不过,这个session bus一般没有自动启动,例如可能需要配置到 .xinitrc
中(假设终端登陆使用 startx
启动桌面)
检查在X或Wayland session 是否启动了 session bus,可以在桌面环境中启动一个终端,然后执行以下命令检查:
echo $DBUS_SESSION_BUS_ADDRESS
如果支持 session bus,则会显示一个 unix:path=
开头的字符串
为确保 X 或 Wayland 会话中具备了 D-Bus session,则可以通过
dbus-launch
来启动窗口管理器(例如 i3窗口管理器 , bspwm 等)
dbus-launch
来加载窗口管理器,确保窗口管理器会话支持 session busexec dbus-launch --exit-with-session i3
另外,在 在Gentoo环境安装和使用Sway (参考官方 gentoo wiki: Sway ),采用 dbus-run-session
命令来运行 sway
应该也是确保 session bus
的方法:
dbus-run-session
启动 sway 这样能够正确获得 D-Bus session busdbus-run-session sway
使用dbus案例
一些有用的命令
dbus-monitor --system
监控system bus的活动dbus-monitor --session
监控session bus的活动dbus-send <PARAMETER>
发送消息
观察dbus服务:
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
当使用elogind时候作为普通用户关机或重启系统:
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.PowerOff boolean:false dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Reboot boolean:false