pkexecを使用して他のユーザーに通知転送を実行するにはどうすればよいですか?

pkexecを使用して他のユーザーに通知転送を実行するにはどうすればよいですか?

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

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

notify-sendしたがって、他のユーザーとしてpolkitdで実行できるように、新しい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;
        }
    }
});

このフォールケットルールは、終了メニューの終了オプションをロックし、次のコマンドを実行するスクリプトと共に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呼び出し通知を送信するにはどうすればよいですか?

ベストアンサー1

いくつかのテストを経て、次のような結果を得ました。

  • 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から他のユーザーとしてコマンドを起動できません。

おすすめ記事