Estou desenvolvendo um aplicativo para não esquecer o pendrive.
Este aplicativo deve bloquear o desligamento se um pendrive estiver conectado à máquina. Como este formulário, se o usuário deseja desligar o sistema enquanto um pendrive está conectado, o sistema mostra uma notificação para alertar sobre ele deve desconectar o pendrive para desbloquear o desligamento.
Para detectar o evento de desligamento, defino uma regra de polkit que chama um script para verificar se algum pendrive está conectado ao sistema.
Se houver algum pendrive conectado, a regra do polkit chama para notificar-enviar através do script send_notify.sh
, que executa este comando:
notify-send "Pendrive-Reminder" "Extract Pendrive to enable shutdown" -t 5000
A regra do polkit é esta:
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;
}
}
}
Mas. depois de colocar essa regra de polkit e pressionar o botão de desligamento, meu usuário não recebe nenhuma notificação.
Depurei a regra e verifiquei o segundo script. Ele foi executado, mas o notify-send
não mostra a notificação para o meu usuário.
Como posso resolver isso?
ATUALIZAÇÃO:
Eu tentei modificar o script desta forma:
#!/bin/bash
user=$1
XAUTHORITY="/home/$user/.Xauthority"
DISPLAY=$( who | grep -m1 $user.*\( | awk '{print $5}' | sed 's/[(|)]//g')
notify-send "Extract Pendrive to enable shutdown" -t 5000
exit 0
O usuário é passado como parâmetro por pòlkit
Mas o problema continua
ATUALIZAÇÃO: Acabei de ver esse bug link que não permite para enviar notificações como root.
Mais tarde, testarei para modificar a alternativa de alteração do usuário
UPDATE2: Depois de alterar o código para isso. o problema continua:
#!/bin/bash
export XAUTHORITY="/home/$user/.Xauthority"
export DISPLAY=$(cat "/tmp/display.$user")
user=$1
su $user -c 'notify-send "Pendrive Reminder" "Shutdown lock enabled. Disconnect pendrive to enable shutdown" -u critical'