如何以用户身份通过​​ ConsoleKit DBus 消息关闭系统?

如何以用户身份通过​​ ConsoleKit DBus 消息关闭系统?

我发现以下命令行可以关闭 Debian/GNU Linux 系统

dbus-send \
  --system \
  --dest=org.freedesktop.ConsoleKit \
  --type=method_call \
  --print-reply \
  --reply-timeout=2000 \
  /org/freedesktop/ConsoleKit/Manager \
  org.freedesktop.ConsoleKit.Manager.Stop

如果我以超级用户身份执行该命令,它会起作用,但作为非特权用户,它会显示:

Error org.freedesktop.ConsoleKit.Manager.NotPrivileged: Not Authorized

我想知道是否可以修改这样的命令,以便与PolicyKit交互,它可以向普通用户授予关闭系统的权限。

答え1

根据这个Debian 错误报告,这是由于 ConsoleKit 版本 0.4.1 和 0.4.2 之间的上游更改所致。该线程包含一些建议和解决方法,其中之一是安装直接与 ConsoleKit 对话的显示管理器(如 GDM 或 lightdm)。

答え2

如果您使用consolekit > 0.4.1(喘息和更新),这将不再开箱即用。要让它再次工作,请添加

session optional        pam_loginuid.so

/etc/pam.d/common-session

答え3

就我而言:

  • Debian 8 amd64;
  • 通量盒;
  • startx(没有任何 DM)。
  • 安装的软件包:
    • dbus
    • dbus-X11
    • consolekit
    • policykit-1
    • libpam-ck-connector

这个解决方案效果很好:

创建一个包含以下内容的 custom-actions.pkla 文件:

sudo nano /var/lib/polkit-1/localauthority/50-local.d/custom-actions.pkla

将其放入文件中。

[Actions for xbmc user]
Identity=unix-user:xbmc
Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*;org.freedesk​top.udisks.*
ResultAny=yes
ResultInactive=no
ResultActive=yes

関連情報