pkexec 不会在 Lubuntu / LXDE 中启动 polkit GUI

pkexec 不会在 Lubuntu / LXDE 中启动 polkit GUI

我全新安装了 Lubuntu 12.04,桌面最小化,如这里所述

为了澄清起见,我从 Lubuntu 替代安装盘进行了命令行安装,然后执行了apt-get install --no-install-recommends lubuntu-desktop

一切运行正常,只是 Synaptic 无法从面板中的菜单项运行。系统未提示我输入密码,单击菜单项后也不会出现任何类型的窗口。我安装了 lxshortcut 来查看快捷方式正在运行的内容,命令是synaptic-pkexec。如果我在“运行”菜单中输入此命令,我会得到相同的行为(或没有行为)。

我可以通过在“运行”菜单中键入来让 Synaptic 正常打开gksudo synaptic。此外,如果我从终端运行“synaptic-pkexec”,系统会提示我在终端中输入密码,然后 Synaptic 就会正常打开。

有人能建议一下让 Synaptic 正常工作的正确方法吗?我可以将菜单项更改为“gksudo synaptic”,但我猜这样做是synaptic-pkexec有原因的。我隐约知道这项pkexec业务与 PolicyKit 有关,但我真的不知道 PolicyKit 是什么,也不知道如何判断它是否出了问题。

答案1

我正在使用已接受答案的替代解决方案。我更喜欢使用lxpolkit而不是,policykit-1-gnome因为它是为 LXDE 设计的。

无法启动身份验证屏幕的问题pkexec非常常见。首先要检查的是您是否为 LXDE 安装并配置了图形策略工具包界面(或lxpolkitpolicykit-1-gnome,因为这些软件包在 lubuntu 的重大升级期间被标记为要删除。显然,安装发行版时两者都不包含在内。

解决方案

  • 安装lxpolkit
    sudo apt-get install lxpolkit

  • 注销并登录。

  • 设置lxpolkit为默认策略代理
    在菜单中,转到Preferences > Default applications for LXSession(或lxsession-default-apps在终端中运行)。在第一部分“正在运行的应用程序”(更新:默认应用程序管理器 14.10 有所不同。使用Core applications选项卡。),转到选项Polkit agent并确保选择了 lxpolkit。

现在将不再使用包policykit-1-gnome,而是使用LXDE。lxsessionlxpolkit

LXPolkit 截图

为什么使用“pkexec不从 LXDE 菜单运行”启动的应用程序

这取决于 X11 系统中应用程序的启动方式执行命令

lxpanel 菜单中显示的应用程序存储并配置在/usr/share/applications(全局菜单项)或~/.local/share/applications(用户特定)中。请参阅LXDE Wiki——主菜单

在这些目录中,您将找到菜单中出现的每个应用程序的 .desktop 文件。以下是示例/usr/share/applications/synaptic.desktop

[Desktop Entry]
Name=Synaptic Package Manager
GenericName=Package Manager
Comment=Install, remove and upgrade software packages
Exec=synaptic-pkexec
Icon=synaptic
Terminal=false
Type=Application
Categories=PackageManager;GTK;System;Settings;
NotShowIn=KDE;
X-Ubuntu-Gettext-Domain=synaptic

注意这行Exec=synaptic-pkexec

在没有策略工具包界面的情况下,通常会要求用户在命令行中输入密码。由于这是一个菜单项,因此它会在后台启动,并且没有命令行来输入密码。因此,您需要确保您使用的是。或者,如果您更喜欢 gnome polkit,请安装每当使用时都会启动登录菜单的lxpolkit软件包。我已经删除了该软件包,并且使用适用于所有应用程序。policykit-1-gnomepkexecpolicykit-1-gnomelxpolkit

替代解决方案

使用 gksudo 而不是 pkexec
您可以右键单击菜单中的 synaptic 等应用程序,单击“属性”,然后将“命令”字段从 更改为synaptic-pkexecgksudo synaptic或者通过命令行,使用以下命令将原始文件复制到用户的应用程序目录中sudo cp /usr/share/applications/synaptic.desktop ${HOME}/.local/share/applications/synaptic.desktop

然后编辑该行Exec=synaptic-pkexec并将其替换为Exec=gksudo synaptic

gksudo 的“主要目的是运行需要 root 权限的图形命令,而无需运行 X 终端仿真器并直接使用 su。” -堪萨斯州立大学(1)

理由很充分!参见以图形方式运行 Sudo

当然,这要求对每个依赖 pkexec 的应用程序进行编辑,以便使用 gksudo 启动,如果您使用 lxpanel,则需要您做更多工作。gksudo 和 PolicyKit 的安全性和可用性功能的详细比较可以在以下网址找到:权限授权特性比较

pkexec为单个应用程序编写自己的策略
这比我想要做的要多,但在某些情况下可能会有用。我不建议在没有深入了解的情况下这样做编写 PolicyKit Actions

polkit 为您提供的操作取决于您安装的软件包。有些软件包用于多种桌面环境(org.freedesktop)。),有些是 DE 特有的 (org.gnome.) 和特定于单个程序 (org.archlinux.pkexec.gparted.policy)。命令 pkaction 列出了 /usr/share/polkit-1/actions 中定义的所有操作,以供快速参考。

下面是一个我还没有测试过的例子,来自City-busz - 使用“pkexec”命令代替“gksu”

例如,如果你想以 root 身份运行 gparted

$ pkexec gparted

命令,然后创建一个新文件

/usr/share/polkit-1/actions/org.freedesktop.policykit.pkexec.policy

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>

  <action id="org.freedesktop.policykit.pkexec.run-gparted">
    <description>Run GParted</description>
    <message>Authentication is required to run GParted</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

可以将更多操作添加到同一个文件。

archlinux.org 上的叛徒从相关的 LXDE 和 PolicyKit 文档中编译相关摘录,最终让我使用 LXPolkit 作为首选解决方案。

答案2

事实证明我需要安装该policykit-1-gnome软件包。安装此软件包并重新启动后,Synaptic 即可正常工作。

我在虚拟机中安装了完整的 Lubuntu 桌面,以便与我的最小安装进行比较,这就是我发现缺少什么的方式。根据软件包描述:

PolicyKit-gnome 提供了 D-Bus 会话总线服务,用于调出用于获取权限的身份验证对话框。

显然,如果没有所描述的功能,我将永远不会获得打开 Synaptic 的 GUI 身份验证提示。

synaptic是元包的依赖项lubuntu-desktop,因此在我的最小安装中默认安装了它。它不应该也是policykit-1-gnome依赖项lubuntu-desktop,因为没有它 Synaptic 就无法工作?你认为我应该报告错误吗?

答案3

使用建议右键单击系统工具下菜单中的突触条目,选择属性,然后选择桌面条目选项卡并将突触-pkexec 更改为 gksudo synaptic。

这没有用,所以我通过终端运行 synaptic(gksudo synaptic)进行调查。

对我来说,尝试使用 gksudo 会显示一条消息,告诉我如何安装 gksu。当我尝试安装时,会显示一条消息,说 gksu 已安装(但仍然不起作用)。我卸载了 gksu 并重新安装,现在 synaptic 工作正常。

相关内容