10

私は Gnome シェル拡張機能を構築していますが、エスカレートされた特権でいくつかのことを実行できるようにしたいと考えています。それで、「ポリシーキット」を使用する必要があると考えていますが、これを行う方法がわかりません。

だから、私が何かしたかったとしましょ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 に答える