如何在openrc系统下禁用特定的dbus系统服务

如何在openrc系统下禁用特定的dbus系统服务

我知道可以覆盖 dbus会议服务于~/.local/share/dbus-1/services

但这必然行不通系统服务。

在openrc下,因此我没有得到 systemd 的 systemctl 命令:

快速而肮脏(因为服务将在下次更新时恢复)的方法是重命名关联的服务文件/usr/share/dbus-1/system-services,这是继续的唯一方法吗?

答案1

我刚刚遇到了同样的问题,在深入研究 dbus 代码后,我想我有一个解决方案:

/usr/local/share/dbus-1/system-services中的文件覆盖中的文件/usr/share/dbus-1/system-services。因此,为了防止服务自动启动,您可以创建一个空文件。例如,要确保 dbus 永远不会自动启动 login1:

mkdir -p /usr/local/share/dbus-1/system-services
touch /usr/local/share/dbus-1/system-services/org.freedesktop.login1.service

这还允许您使用 全局禁用用户服务/usr/local/share/dbus-1/services

防止其自行启动服务的另一个有效方法是使用-Dtraditional_activation=false.但是,这会禁用所有服务。

答案2

D-Bus 服务是否有一行SystemdService=指向 Systemd 单元文件,例如SystemdService=systemd_unit_name.service

/etc/systemd/system/systemd_unit_name.service如果是,您可以添加从到 的符号链接/dev/null。这就是systemctl mask systemd_unit_name.service工作原理。

然后,任何激活 D-Bus 服务的尝试都将失败,因为链接的 Systemd 服务被屏蔽。但是,由于服务被屏蔽,您可能会在日志中看到一些关于激活失败的恼人日志。

如果没有行,您可以尝试添加从到 的SystemdService=符号链接(未测试)。我假设如果没有从名为Systemd 单元文件名 的 D-Bus 单元文件的别名映射,则 D-Bus 激活将仅查找与 D-Bus 单元文件同名的 Systemd 单元文件,例如./etc/systemd/system/dbus_unit_name.service/dev/nulldbus_unit_name.servicesystemd_unit_name.servicedbus_unit_name.service

我相信您还可以覆盖 D-Bus 系统服务/etc/dbus-1/system-services/(同样,未测试)。

相关内容