我全新安装了 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 安装并配置了图形策略工具包界面(或lxpolkit
)policykit-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。lxsession
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-gnome
pkexec
policykit-1-gnome
lxpolkit
替代解决方案
使用 gksudo 而不是 pkexec
您可以右键单击菜单中的 synaptic 等应用程序,单击“属性”,然后将“命令”字段从 更改为synaptic-pkexec
。gksudo 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 工作正常。