如何在不使用 sysvinit(但使用 systemd)的情况下使用 consolekit 关闭

如何在不使用 sysvinit(但使用 systemd)的情况下使用 consolekit 关闭

我在 Arch Linux 机器上安装了 systemd(没有 sysvinit)。但是,我无法使用 consolekit(dbus 接口)关闭/重新启动。# systemctl {shutdown,reboot}工作得很好,所以我猜这是因为 consolekit 不知道如何联系该pid 1进程。

答案1

查看源代码后,consolekit(ck) 似乎使用了一个简短的脚本来执行关闭和重新启动。这两个脚本安装为

/usr/lib/ConsoleKit/scripts/ck-system-{stop,restart}

在 Arch Linux 中,他们只需查找并执行{,/usr}/sbin/shutdown即可做到这一点。

因此,现在似乎没有办法配置 ck 来执行此操作(通常我只是简单地编辑 中的一些文件)/etc,并且解决方法很简单。

  1. 只需将这两个脚本编辑为 exec 即可systemctl {shutdown,reboot}。 (但至少在 Arch Linux 上,每次升级后它可能都会被覆盖。)

  2. 只需创建一个包装脚本即可/sbin/shutdown执行正确的操作。 (如果您想稍后安装 sysvinit,这会导致冲突,但希望不是问题。)

我还将寻找(如果没有的话,创建)关于该问题的错误报告,我希望将来能以更好的方式完成(真的不喜欢在外面进行配置/etc)。

注意:Arch Linux 现在有 systemd-sysvcompat 软件包,它提供这些(init/ halt/shutdown等)作为systemctl/ 的符号链接systemd

相关内容