Acionando um gui de um evento acpi

2

Eu criei um aplicativo tkinter para lidar com o pressionamento do botão liga / desliga, mas ele não é iniciado quando deveria. Embora se eu usar echo hello>>~/junk como a ação acpi, ele adiciona um hello a lixo para cada pressionamento de botão liga / desliga. Adicionar um exec ou um ponto antes do comando de ação (para executá-lo no shell atual) não ajudou. Como posso fazer isso funcionar?

Editar:

Ok, eu consegui isso para trabalhar com a ajuda do mikejonesey, mas mais um problema apareceu depois disso. O script é chamado com privilégios de root, mesmo com o bit suid definido no script, então eu tenho que inserir o passwd raiz na tela do xlock para continuar.

Editar 2:

Parece que posso iniciar o aplicativo a partir de um arquivo de eventos acpi como este: event=button/power PBTN action=export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority &&/home/saga/bin/shutdownprompt

mas não de um script de handler chamado de um arquivo de evento:

button/power ) if [ "$2" = "PBTN" ];then export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority && /home/saga/shutdownprompt; fi ;;

Este é um recorte do script principal do manipulador chamado em cada tecla pressionada. Qual é o problema aqui?

    
por saga 23.10.2016 / 20:26

2 respostas

2

você precisa adicionar algumas coisas para usar o X;

Eu uso isso em um cronjob (é a mesma coisa ...)

#*/15 * * * *   export DISPLAY=:0.0 && export XAUTHORITY=/home/mike/.Xauthority && /home/mike/bin/defunct-check.sh

Isso deve funcionar em qualquer script.

    
por 23.10.2016 / 22:42
0

Parece que deve haver uma solução fácil para esse problema. Eu mesmo estava tentando fazer algo semelhante: executar um programa de captura de tela (flameshot) quando um botão do teclado é pressionado.

No final, a solução que funcionou para mim foi criar um FIFO (named pipe) no meu diretório home chamado .acpi_execute.pipe . Eu então uso o seguinte script, chamado .acpi_execute .

#!/usr/bin/bash

while true ; do
    while IFS='' read command ; do
        $command
    done < ~/.acpi_execute.pipe
done

Eu prefiro i3 no GNOME, KDE, etc, devido ao seu desempenho (muito leve) e natureza lado a lado. Na parte inferior do meu arquivo de configuração do i3 ~/.config/i3/config tenho:

exec ~/.acpi_execute

Isso permite que o script seja executado sempre que o Ambiente Desktop for iniciado (diretamente na máquina ou via conexão VNC remota).

Esteja ciente de que o acima tem implicações de segurança. Por exemplo, se alguém puder escrever para o canal acima, ele poderá executar comandos arbitrários como você . Isso obviamente seria ruim. Dar as permissões de FIFO 600, de sua propriedade, reduz esse risco. Você também pode limitar os comandos possíveis. Ou seja, não execute $command , mas sim o comando específico que você deseja (por exemplo, flameshot gui ).

    
por 28.11.2018 / 04:55

Tags