Script personalizzato quando si chiude il coperchio del laptop e si blocca lo schermo senza modalità di sospensione

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.

Script personalizzato quando si chiude il coperchio del laptop e si blocca lo schermo senza modalità di sospensione

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

Aggiungi un commento