Script personalizado al cerrar la tapa de la computadora portátil y bloquear la pantalla sin dormir

Hola a todos. Estoy usando Lubuntu 18.04 en la computadora portátil de mi casa. Un buen día decidí que no estaba satisfecho con las acciones que ofrecía Power Manager al cerrar la tapa del portátil. Quería bloquear la pantalla al cerrar la tapa de la computadora portátil y después de un tiempo enviar la computadora portátil a hibernación. Escribí un guión para esto y me apresuro a compartirlo con ustedes.

Me encontré con dos problemas.

Primero, la hibernación no funciona de fábrica en Lubunta; para habilitarla, debe hacer lo siguiente.

Busque el intercambio de UUID; para ello debe ejecutar:

grep swap /etc/fstab

En mi caso el resultado es el siguiente:

# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none            swap    sw              0       0

Luego debe agregar el UUID a los parámetros de inicialización del kernel. Para hacer esto, agregue resume=UUID=%your UUID% a la línea “GRUB_CMDLINE_LINUX_DEFAULT” en el archivo /etc/default/grub

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...

Y ejecuta el comando:

sudo update-grub

Ahora la hibernación debería funcionar, para comprobarlo puedes ejecutar:

sudo systemctl hibernate

El segundo problema era cómo bloquear la pantalla del usuario como root sin poner la computadora portátil en suspensión. Lo resolví usando dbus-send, el comando en sí está en el siguiente script. Si alguien conoce otras opciones, por favor escriba en los comentarios.

Ahora comencemos a escribir el guión.

Lo primero que debemos hacer en Power Manager es seleccionar Apagar pantalla como acción al cerrar la tapa, para que no haya conflictos con nuestro script.

Script personalizado al cerrar la tapa de la computadora portátil y bloquear la pantalla sin dormir

Luego cree un archivo /etc/acpi/events/laptop-lid con el siguiente contenido:

event=button/lid.*
action=/etc/acpi/laptop-lid.sh

y cree un script /etc/acpi/laptop-lid.sh con el siguiente contenido:

#!/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

Hacer que el script sea ejecutable:

sudo chmod a+x /etc/acpi/laptop-lid.sh

Y reinicie el demonio acpid para que se apliquen los cambios:

sudo systemctl restart acpid.service

Todo está listo.

Para Gnome en el script necesitas cambiar:

  • lxsessin => sesión-gnome
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

Fuente: habr.com

Añadir un comentario