AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-255730

AlmuHS's questions

Martin Hope
AlmuHS
Asked: 2018-02-26 11:59:12 +0800 CST

Como permitir a execução de notificar-enviar como outro usuário com pkexec?

  • 2

Como continuação desta pergunta ( Como posso enviar uma notificação com o polkit 0.106? ), descobri que tenho que executar notify-sendcomo o usuário que desejo enviar a notificação.

Mas, com minha configuração atual, não posso fazer isso, porque o polkit executa o script como polkitdusuário e não posso ficar su $usersem a senha do usuário conhecido.

Por esse motivo, preciso criar uma nova ação do polkit, para permitir a execução notify-sendcomo outro usuário do polkitd.

Minha regra de 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;
        }
    }
});

Esta regra do polkit deve bloquear a opção de desligamento no menu de desligamento e mostra uma notificação com notify-send, com send_notify.shscript, que executa isto:

#!/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

Eu tentei adicionar este arquivo de política 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>

coloquei esse arquivo/usr/share/polkit-1/actions/org.freedesktop.policykit.notify-send.policy

Mas, depois de inserir o arquivo de política /usr/share/polkit-1/rules.d/e pressionar o botão de desligamento, o menu de desligamento demorou muito para ser exibido e a notificação não apareceu. A opção de desligamento está bloqueada corretamente

Como posso fazer com que o polkit possa chamar notify-send do meu script?

linux polkit
  • 1 respostas
  • 954 Views
Martin Hope
AlmuHS
Asked: 2018-02-20 07:30:32 +0800 CST

Como posso enviar uma notificação com o polkit 0.106?

  • 2

Estou desenvolvendo um aplicativo para não esquecer o pendrive.

Este aplicativo deve bloquear o desligamento se um pendrive estiver conectado à máquina. Conforme este formulário, caso o usuário queira desligar o sistema enquanto um pendrive estiver conectado, o sistema mostra uma notificação para alertar que deve desligar 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 esta regra de polkit e pressionar o botão de desligamento, meu usuário não recebe nenhuma notificação.

Eu depurei a regra e verifiquei se o segundo script foi executado, mas notify-sendnão mostra a notificação para o meu usuário.

Como posso resolver isso?

ATUALIZAR:

Eu tentei modificar o script assim:

#!/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 pelo pòlkit

Mas o problema continua

ATUALIZAÇÃO: Acabei de ver esse bug https://bugs.launchpad.net/ubuntu/+source/libnotify/+bug/160598 que não permite enviar notificações como root.

Mais tarde vou testar para modificar a solução alternativa alterando o usuário

UPDATE2: Depois de alterar o código para this. 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'
linux shutdown
  • 3 respostas
  • 538 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve