我需要以与桌面环境无关的方式检查是否有可用的 polkit 代理。
现在,我正在做的是检查 polkit 代理是否正在运行,使用如下代码:
ps aux | grep some-polkit-agent
其中some-polkit-agent
可能是:
polkit-gnome-authentication-agent-1
(适用于 gnome2 和 gnome3-fallback)polkit-kde-authentication-agent-1
(对于 kde)polkit-mate-authentication-agent-1
(对于伴侣)lxpolkit
(对于 LXDE)
“无后备”gnome3(gnome-shell)在 gnome-shell 进程本身中有自己的 polkit 代理,所以我无法 ps-grep 它。我的假设是,如果gnome-shell
正在运行,则 polkit 代理已就位。
当系统有问题时就会出现问题hidepid
(请参阅http://www.linux-dev.org/2012/09/hide-process-information-for-other-users/)。这一安全措施使得ps
即使有 polkit 代理也不会向我显示任何正在运行的代理。
有没有更好的方法可以检查可用的 polkit 代理?
答案1
“我需要检查我是否有可用的 polkit 代理”
大概您希望它可用于特定进程,无论是进程 pid 还是因为您看不到 pid,所以系统总线名称?
在这种情况下,您可以对特定进程使用“pkcheck”并检查其返回值,因为 pkcheck 的手册页显示
If the specificied process is not authorized because **no suitable**
**authentication agent is available** or if the --allow-user-interaction
wasn't passed, pkcheck exits with a return value of 2 and a diagnostic
message is printed on standard error. Details are printed on standard
output.
答案2
代理通过 dbus 将自己注册到 polkit 权威机构。如果您可以拦截他们的 dbus 流量,您将确切地知道注册了哪个代理。
答案3
基于这个论坛帖子,您需要安装该policykit-desktop-privileges
软件包。