O caminho do ACPID
Visão geral
Existem várias maneiras de corrigir esse problema. Se você procurar na Web, encontrará sugestões sobre a instalação de gerenciadores de energia usados em outros ambientes de desktop (DEs), como xfce4-power-manager
ou gnome-settings-daemon
. No entanto, como usuário do LXDE, você provavelmente está se esforçando para obter uma solução leve. Uma maneira leve de exibir um menu de logout no botão liga / desliga é utilizar um script ACPID.
O que é o ACPID?
Do ArchWiki :
acpid é um daemon flexível e extensível para entregar eventos ACPI. Ele escuta em / proc / acpi / event e quando um evento ocorre, executa programas para lidar com o evento. Esses eventos são desencadeados por certos ações, como:
Pressionando teclas especiais, incluindo o botão Ligar / Suspender / Suspender
Fechando uma tampa do notebook (Un) Conectando um adaptador de energia CA de um notebook
(Des) Ligação do telefone, etc.
Instalação
sudo apt-get install acpi acpid
Configuração
Abra /etc/acpi/powerbtn.sh
em um editor de texto de sua escolha, por exemplo leafpad:
gksudo leafpad /etc/acpi/powerbtn.sh
No final do arquivo, você encontrará a seguinte passagem:
# If all else failed, just initiate a plain shutdown.
/sbin/shutdown -h now "Power button pressed"
Pouco antes dessa passagem, adicione o seguinte snippet:
# If LXDE is running execute lxsession-logout
if [ -n $(pidof lxsession) ]; then
for x in /tmp/.X11-unix/*; do
displaynum='echo $x | sed s#/tmp/.X11-unix/X##'
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
export _LXSESSION_PID='pidof lxsession'
lxsession-logout
exit
fi
done
fi
A maior parte do snippet consiste em funções e comandos que garantem que um aplicativo gráfico como o menu de logout possa ser executado pelo ACPID (configurando variáveis de ambiente como XUSER
e DISPLAY
).
Nota: Se você tiver componentes do GNOME em execução na sua sessão do LXDE (por exemplo, nautilus, vários daemons), a detecção da sessão pode dar errado. Nestes casos, aconselho-o a inserir o código da seguinte forma:
if pidof x $PMS > /dev/null; then
if [ -n $(pidof lxsession) ]; then
for x in /tmp/.X11-unix/*; do
displaynum='echo $x | sed s#/tmp/.X11-unix/X##'
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
export _LXSESSION_PID='pidof lxsession'
killall lxsession-logout
lxsession-logout
fi
done
echo "if correct"
exit
else
exit
fi
<...>
Solução de problemas
Por alguma razão desconhecida, essas funções nem sempre funcionam. Nesse caso, você terá que substituir o snippet acima pelo seguinte:
if [ -n $(pidof lxsession) ]; then
export DISPLAY=:0
export _LXSESSION_PID=$(pidof lxsession)
export XUSER=user
export XAUTHORITY=/home/user/.Xauthority
lxsession-logout
exit
fi
As variáveis de ambiente são codificadas neste. Certifique-se de substituir user
pelo seu próprio nome de usuário. Deve funcionar para a maioria das configurações do sistema de usuário único.
Aqui está outra solução alternativa, apenas no caso de nenhuma das variantes acima funcionar. Substitua a função getXuser
pela seguinte passagem:
getXuser() {
user='pinky -fw | awk '{ if ( == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print ; exit; } }''
if [ x"$user" = x"" ]; then
startx='pgrep -n startx'
if [ x"$startx" != x"" ]; then
user='ps -o user --no-headers $startx'
fi
fi
if [ x"$user" = x"" ]; then # lines added
user=$(pinky -fw | awk '{ print ; exit; }') # lines added
fi # lines added
if [ x"$user" != x"" ]; then
userhome='getent passwd $user | cut -d: -f6'
export XAUTHORITY=$userhome/.Xauthority
else
export XAUTHORITY=""
fi
export XUSER=$user
}
O que isso faz?
O script powerbtn.sh
é acionado pelo ACPID cada vez que o botão liga / desliga é pressionado. Como você pode ver, ele já inclui várias verificações para DEs comuns, como Unity, GNOME e KDE. Essas verificações estão lá para garantir que o evento de desligamento seja tratado pelo respectivo gerenciador de energia. Infelizmente, o LXDE não possui um desses recursos.
É por isso que adicionamos um trecho próprio que verifica a ACPID. Se ele detectar uma sessão do LXDE, ele se certificará de que seu computador não será simplesmente desligado e, em vez disso, iniciará o menu de logout com o qual você deve estar familiarizado.
Com essas alterações, você agora deve poder iniciar seu menu de logout com o botão liga / desliga do seu hardware - sem a necessidade de instalar um gerenciador de energia volumoso. E, melhor ainda, isso não interfere de nenhuma maneira com outros DEs.
Fontes
link
Outras leituras
Lubuntu - botão de energia não desliga o computador,