Olá a todos. Estou usando o Lubuntu 18.04 no meu laptop doméstico. Um belo dia, decidi que não estava satisfeito com as ações que o Power Manager oferece ao fechar a tampa do laptop. Eu queria bloquear a tela ao fechar a tampa do laptop e hiberná-lo depois de um tempo. Para fazer isso, escrevi um roteiro e me apresso em compartilhá-lo com você.
Encontrei dois problemas.
A primeira é que a hibernação não funciona imediatamente no Lubunt, para ativá-la, você deve fazer o seguinte.
Encontre a troca de UUID, para isso você precisa executar:
grep swap /etc/fstab
No meu caso, a saída é a seguinte:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Então você precisa adicionar o UUID aos parâmetros de inicialização do kernel. Para fazer isso, adicione resume=UUID=%your UUID% à linha "GRUB_CMDLINE_LINUX_DEFAULT" no arquivo /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
E execute o comando:
sudo update-grub
Agora a hibernação deve funcionar, para verificar você pode executar:
sudo systemctl hibernate
O segundo problema era como bloquear a tela do usuário do root'a sem colocar o laptop no modo de suspensão. Resolvi com dbus-send, o comando em si está no script abaixo. Se alguém conhece outras opções, por favor, escreva nos comentários.
Agora vamos começar a escrever o script.
A primeira coisa que precisamos fazer no Power Manager é selecionar Desligar exibição como a ação quando a tampa é fechada para que não haja conflitos com nosso script.
Em seguida, criamos o arquivo /etc/acpi/events/laptop-lid com o seguinte conteúdo:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
e crie um script /etc/acpi/laptop-lid.sh com o seguinte conteúdo:
#!/bin/bash
#set variables
#Получаем BUS адрес из environ файла процесса lxsession
BUS=$(grep -z DBUS_SESSION_BUS_ADDRESS
/proc/$(pidof -s lxsession)/environ |
sed 's/DBUS_SESSION_BUS_ADDRESS=//g')
#Из того же файла получаем юзера, которому принадлежит этот процесс
USER=$(grep -z USER /proc/$(pidof -s lxsession)/environ | sed 's/USER=//g')
#путь до стейт файла крышки ноутбука
LID="/proc/acpi/button/lid/LID0/state"
#Check lid state (return 0 if closed)
check_lid () {
grep -q closed $LID
}
#Lock screen without sleep
check_lid
if [ $? = 0 ]
then
#TODO run command as root
sudo -u $USER -E dbus-send --bus=$BUS
--type=method_call
--dest="org.freedesktop.ScreenSaver"
"/org/freedesktop/ScreenSaver"
org.freedesktop.ScreenSaver.Lock
fi
#Wait 10 minutes and hibernate if lid is closed
sleep 600
check_lid
if [ $? = 0 ]
then
systemctl hibernate
fi
Tornando o script executável:
sudo chmod a+x /etc/acpi/laptop-lid.sh
E reinicie o daemon acpid para que as alterações entrem em vigor:
sudo systemctl restart acpid.service
Tudo está pronto.
Para o Gnome no script, você precisa alterar:
- lxsessin => gnome-session
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Fonte: habr.com