Script personalitzat en tancar la tapa del portàtil i bloquejar la pantalla sense dormir

Hola a tots. Estic fent servir Lubuntu 18.04 al meu portàtil de casa. Un bon dia vaig decidir que no estava satisfet amb les accions que el Power Manager va oferir en tancar la tapa del portàtil. Volia bloquejar la pantalla en tancar la tapa de l'ordinador portàtil i després d'una estona enviar l'ordinador portàtil a la hibernació. Vaig escriure un guió per a això i m'afanyo a compartir-lo amb vosaltres.

Em vaig trobar amb dos problemes.

En primer lloc, la hibernació no funciona fora de la caixa a Lubunta; per activar-la, heu de fer el següent.

Trobeu l'intercanvi d'UUID, per fer-ho, heu d'executar:

grep swap /etc/fstab

En el meu cas, la sortida és la següent:

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

Aleshores, heu d'afegir l'UUID als paràmetres d'inicialització del nucli. Per fer-ho, afegiu currículum=UUID=%el vostre UUID% a la línia "GRUB_CMDLINE_LINUX_DEFAULT" al fitxer /etc/default/grub

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

I executeu l'ordre:

sudo update-grub

Ara la hibernació hauria de funcionar, per comprovar que podeu executar:

sudo systemctl hibernate

El segon problema va ser com bloquejar la pantalla de l'usuari com a root sense enviar l'ordinador portàtil a dormir. Ho vaig resoldre amb dbus-send, l'ordre en si es troba a l'script següent. Si algú coneix altres opcions, si us plau, escrigui als comentaris

Ara comencem a escriure el guió.

El primer que hem de fer a Power Manager és seleccionar Apagar la pantalla com a acció en tancar la tapa, de manera que no hi hagi conflictes amb el nostre script.

Script personalitzat en tancar la tapa del portàtil i bloquejar la pantalla sense dormir

A continuació, creeu un fitxer /etc/acpi/events/laptop-lid amb el contingut següent:

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

i creeu un script /etc/acpi/laptop-lid.sh amb el contingut següent:

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

Fent executable l'script:

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

I reinicieu el dimoni acpid perquè s'apliquin els canvis:

sudo systemctl restart acpid.service

Tot està llest.

Per a Gnome a l'script, heu de canviar:

  • lxsessin => gnome-session
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

Font: www.habr.com

Afegeix comentari