Acionando uma GUI a partir de um evento ACPI

Acionando uma GUI a partir de um evento ACPI

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

Editar:

Ok, consegui fazer isso funcionar com a ajuda de 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 tenho que inserir a senha de root 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 manipulador 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 do manipulador principal chamado a cada pressionamento de tecla. Qual é o problema aqui?

Responder1

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.

Responder2

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

No final, a solução que funcionou para mim foi criar um FIFO (nomeado pipe) em meu diretório pessoal 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 o i3 ao 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/configtenho:

exec ~/.acpi_execute

Isso permite que o script seja executado sempre que meu ambiente de trabalho for iniciado (seja diretamente na máquina ou por meio de uma conexão VNC remota).

Esteja ciente de que o acima exposto tem implicações de segurança. Por exemplo, se alguém puder escrever no canal acima, poderá executar comandos arbitrárioscomo você. Obviamente isso seria ruim. Conceder permissões 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).

informação relacionada