如何配置pkexec
以避免在运行GUI应用程序时出现错误?
我发现了两种可能的方法:
如您所见,使用以下命令:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
不会给你任何错误。这是正常的,因为man pkexec
在这件事上很清楚:
[...] pkexec will not allow you to run X11 applications
as another user since the $DISPLAY and $XAUTHORITY environment
variables are not set.[...]
结果,您可以创建一个(永久的)别名(这是最简单的方法):
alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
或者,(再次)man pkexec
说:
[...] These two variables will be retained if the
org.freedesktop.policykit.exec.allow_gui annotation on an action is set
to a nonempty value; this is discouraged, though, and should only be
used for legacy programs.[...]
您可以在其中以以下xml代码创建一个/usr/share/polkit-1/actions
名为的新策略文件,com.ubuntu.pkexec.gedit.policy
其中最重要的是将其设置org.freedesktop.policykit.exec.allow_gui
为非空值:
<?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="com.ubuntu.pkexec.gedit">
<message gettext-domain="gparted">Authentication is required to run gedit</message>
<icon_name>gedit</icon_name>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
第一次将其应用于命令后,如何告诉它不要求输入密码?
对于这三个设置标签:allow_any
,allow_inactive
以及allow_active
策略文件中的以下选项可用:
- 否:用户无权执行该操作。因此,不需要认证。
- 是:用户被授权无需任何认证即可执行该操作。
- auth_self:需要身份验证,但该用户不必是管理用户。
- auth_admin:需要认证为管理用户。
- auth_self_keep:与auth_self相同,但是
sudo
授权持续几分钟。
- auth_admin_keep:与auth_admin相同,但是
sudo
授权持续几分钟。
资料来源:Polkit-结构-行动
因此,如果您使用auth_admin_keep选项(或在适用时使用auth_self_keep),pkexec
则在一段时间内不会再次要求输入密码(默认情况下,此时间设置为我检查的5分钟)。此处的缺点是,该功能仅适用于同一命令/应用程序,并且对所有用户均有效(除非在以后的配置中被否决)。
如果尚不存在配置文件,该保存在哪里?
配置文件或polkit定义可分为两种:
在位于中的XML .policy文件中定义了操作/usr/share/polkit-1/actions
。每个操作都具有一组默认权限(例如,您需要标识为管理员才能使用GParted操作)。可以否决默认值,但是编辑动作文件不是正确的方法。此策略文件的名称应采用以下格式:
com.ubuntu.pkexec.app_name.policy
授权规则在JavaScript .rules文件中定义。它们存在于两个地方:第三方软件包可以使用/usr/share/polkit-1/rules.d
(尽管有的话很少),/etc/polkit-1/rules.d
并且用于本地配置。.rules文件指定用户的子集,引用动作文件中指定的一个(或多个)动作,并确定该(一个或多个)用户可以采取哪些限制措施。例如,使用GParted时,规则文件可能会推翻所有用户以管理员身份进行身份验证的默认要求,从而确定某些特定用户不需要。或根本不允许使用GParted。
资料来源:Polkit-结构
是否有用于配置pkexec
用法的GUI应用程序?
据我所知,到目前为止(2014年1月18日)还不存在这样的内容。如果将来我能找到一些东西,我也不会忘记更新此答案。