이 질문의 연속으로 (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에서 다른 사용자로 명령을 시작할 수 없습니다.