10

我正在构建一个 Gnome shell 扩展,我希望能够以升级的权限做一些事情。所以,我想我需要使用“策略工具包”,但我不知道该怎么做。

所以,假设我想做类似ifconfig eth0 downifconfig eth0 up

我可以从终端运行:pkexec ifconfig eth0 down它会提示输入密码,然后执行。

但是,我应该如何从扩展内部做到这一点?

我很确定这与在 /usr/share/polkit-1/actions 中创建文件有关,但我在互联网或其他地方找不到任何东西。

我希望能够对其进行设置,以便无需输入密码,并且扩展程序可以随时运行特定命令。

我知道允许运行任何命令是一个非常糟糕的主意。这不是我想要的,我希望能够只运行一个程序/命令。

编辑:我不确定,但我认为可能不需要输入密码。我只知道 sudo 在第一次之后一段时间内不会要求输入密码,所以我有点想要类似的功能。不确定有什么可能。

4

2 回答 2

2

很久没有使用 PolicyKit 了,但据我所知,您确实必须在 actions/ 目录中创建一个文件,其内容如下:

<?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-ifconfig">
    <description>Configure network</description>
    <message>Authentication is required to set ifconfig parameters</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>...</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/sbin/ifconfig</annotate>
  </action>

</policyconfig>

您必须更改以下值:

<allow_active>...</allow_active>

到你想要的值。选择 的值:

  • “否”将拒绝访问
  • “是”将隐式允许访问
  • “auth_user”需要用户认证
  • “auth_admin”需要管理员身份验证。
  • “auth_user_keep”和“auth_admin_keep”功能类似,但在几分钟后保留身份验证。
  • 加上其他一些值,请在此处查看。

将 allow_active 密钥的值更改为“yes”应该会停止身份验证要求。

然后您需要根据您的需要调整操作文件并调用它。

雨果,

于 2012-10-18T07:20:25.087 回答
1

我在尝试实现调谐选择器时遇到了同样的问题。这是我想出的。

正如其他人回答的那样,您可能需要编写一个策略文件(我使用了“auth_admin”)。我把它放在“/usr/share/polkit-1/actions/tuned-adm.policy”中。我不认为我可以通过扩展模型分发它,所以我必须要求上游包含它。

接下来,我使用 pkexec 和我的命令来获取“sudo 弹出窗口”并让它工作。

const GLib = imports.gi.GLib;
const Util = imports.misc.util;
this.pkexec_path = GLib.find_program_in_path('pkexec');
this.tunedadm_path = GLib.find_program_in_path('tuned-adm');
let result = Util.trySpawnCommandLine(this.pkexec_path + " " + this.tunedadm_path  + " list")

这里真正的问题是我使用了其他几种方法来运行命令行,它们会锁定 gnome-shell。我在这里找到了代码:https ://github.com/nodefourtytwo/gnome-shell-extension-cpu-freq/blob/master/extension.js特别方便。

于 2014-05-14T21:02:42.777 回答