web-dev-qa-db-ja.com

pkexecを使用して別のユーザーとしてnotify-sendの実行を許可するにはどうすればよいですか?

この質問の続きとして( polkit 0.106で通知を送信するにはどうすればよいですか? )、通知を送信するユーザーとしてnotify-sendを実行する必要があることがわかりました。

しかし、現在の設定では、polkitがスクリプトをpolkitd userとして実行し、既知のユーザーパスワードがないとsu $userを実行できないため、これを実行できません。

このため、polkitdの他のユーザーとしてnotify-sendを実行できるように、新しいpolkitアクションを作成する必要があります。

私のpolkitルールはこれです:

polkit.addRule(function(action, subject) {
     if (action.id == "org.freedesktop.consolekit.system.stop" ||
        action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions" || 
        action.id == "org.xfce.session.xfsm-shutdown-helper")  
     {

        try{    
            polkit.spawn(["/usr/bin/pendrive-reminder/check_pendrive.sh", subject.user]);        
            return polkit.Result.YES;

        }catch(error){
            polkit.spawn(["/usr/bin/pendrive-reminder/send_notify.sh", subject.user]);
           return polkit.Result.NO;
        }
    }
});

このpolkitルールはシャットダウンメニューのシャットダウンオプションをロックする必要があり、これを実行するnotify-sendスクリプトとsend_notify.shスクリプトで通知を表示します。

#!/bin/bash

export DISPLAY=":0"

user=$1
pkexec --user $user notify-send  "Pendrive Reminder" "Shutdown lock enabled. Disconnect pendrive to enable shutdown" -u critical

exit 0

私はこのpolkitポリシーファイルを追加しようとしました:

<policyconfig>
    <action id="org.freedesktop.notify-send">
    <description>Launch notify-send command</description>
    <defaults>
        <allow_any>yes</allow_any>
        <allow_inactive>yes</allow_inactive>
        <allow_active>yes</allow_active>
    </defaults>
   <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/notify-send</annotate>
   <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
   </action>
</policyconfig>

このファイルを/usr/share/polkit-1/actions/org.freedesktop.policykit.notify-send.policyに入れました

しかし、ポリシーファイルを/usr/share/polkit-1/rules.d/に入れてシャットダウンボタンを押した後、シャットダウンメニューが表示されるまでに時間がかかり、通知が表示されませんでした。シャットダウンオプションは正しくロックされています

Polkitがスクリプトからnotify-sendを呼び出すことができるようにするにはどうすればよいですか?

2
AlmuHS

いくつかのテストを行った後、私はこの結果を得ました:

  • polkitdはnologinユーザーです
  • このコマンドを実行すると、polkitdユーザーでスクリプトを実行すると、エラーが表示されます。

    Sudo su polkitd -s /bin/bash -c aux_scripts/send_notify.sh almu

    Error executing command as another user: Not authorized

    This incident has been reported.

ですから、polkitdユーザーは他のユーザーのようにコマンドを実行できない限定アカウントだと思います

結論として、このアクションはシステム内部を変更せずに実行することはできないと判断しました。アプリケーションでこれを許可できないため、polkitから別のユーザーとしてコマンドを起動できません

0
AlmuHS