Ciao a tutti. Sto usando Lubuntu 18.04 sul mio portatile di casa. Un bel giorno ho deciso che non ero soddisfatto delle azioni offerte da Power Manager quando si chiudeva il coperchio del laptop. Volevo bloccare lo schermo quando chiudevo il coperchio del laptop e dopo un po' mandare il laptop in ibernazione. Ho scritto una sceneggiatura per questo e mi affretto a condividerla con voi.
Ho riscontrato due problemi.
Innanzitutto, l'ibernazione non funziona immediatamente in Lubunta; per abilitarla, è necessario effettuare le seguenti operazioni.
Trova lo scambio UUID, per fare ciò devi eseguire:
grep swap /etc/fstab
Nel mio caso l'output è il seguente:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Quindi è necessario aggiungere l'UUID ai parametri di inizializzazione del kernel. Per fare ciò, aggiungi curriculum=UUID=%tuo UUID% alla riga "GRUB_CMDLINE_LINUX_DEFAULT" nel file /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
Ed esegui il comando:
sudo update-grub
Ora l'ibernazione dovrebbe funzionare, per verificare puoi eseguire:
sudo systemctl hibernate
Il secondo problema era come bloccare lo schermo dell'utente come root senza mandare il portatile in modalità di sospensione. L'ho risolto usando dbus-send, il comando stesso è nello script seguente. Se qualcuno conosce altre opzioni, scriva nei commenti
Ora iniziamo a scrivere la sceneggiatura.
La prima cosa che dobbiamo fare in Power Manager è selezionare Spegni display come azione quando chiudiamo il coperchio, in modo che non ci siano conflitti con il nostro script.
Quindi crea un file /etc/acpi/events/laptop-lid con il seguente contenuto:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
e creare uno script /etc/acpi/laptop-lid.sh con il seguente contenuto:
#!/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
Rendere eseguibile lo script:
sudo chmod a+x /etc/acpi/laptop-lid.sh
E riavvia il demone acpid in modo che le modifiche vengano applicate:
sudo systemctl restart acpid.service
È tutto pronto.
Per Gnome nello script devi modificare:
- lxsessin => sessione gnome
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Fonte: habr.com