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