我正在构建一个Gnome shell扩展,我希望能够使用升级的权限做一些事情。所以,我认为我需要使用“政策工具包”,但我不知道如何去做这件事。
所以,说我想做ifconfig eth0 down
或ifconfig eth0 up
我可以从终端运行:pkexec ifconfig eth0 down
,它会提示输入密码然后再进行操作。
但是,我应该如何在扩展程序中执行此操作?
我很确定它与在/ usr / share / polkit-1 / actions中创建文件有关,但我无法在互联网上找到任何其他内容。
我希望能够设置它,以便不需要输入密码,扩展程序可以随时运行某个命令。
我知道允许任何命令运行是一个非常糟糕的主意。这不是我要求的,我希望能够只运行一个程序/命令。
编辑:我不确定,但我认为没有必要输入密码。我只是知道sudo第一次没有问一段时间的密码,所以我想要类似的功能。不确定是什么可能。答案 0 :(得分: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>
达到你想要的价值。选择值:
将allow_active键的值更改为“yes”应该会停止身份验证要求。
然后,您需要根据需要调整操作文件并调用它。
雨果,
答案 1 :(得分:1)
我遇到了同样的问题,试图为调优实现一个选择器。这就是我想出的。
正如其他人回答的那样,您可能需要编写一个策略文件(我使用了“auth_admin”)。我把它放进去了 “/usr/share/polkit-1/actions/tuned-adm.policy。”我不认为我可以通过扩展模型分发它,所以我将不得不要求上游包含它。
接下来,我使用pkexec和我的命令获取“sudo popup”并让它工作。
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特别方便。