Pasadya nga script kung isira ang tabon sa laptop ug i-lock ang screen nga wala’y tulog

Kumusta tanan. Gigamit nako ang Lubuntu 18.04 sa akong laptop sa balay. Usa ka maayong adlaw nakahukom ko nga wala ko matagbaw sa mga aksyon nga gitanyag sa Power Manager sa dihang gisira ang laptop lid. Gusto nako nga i-lock ang screen kung gisira ang laptop lid ug pagkahuman ipadala ang laptop sa hibernation. Nagsulat ako usa ka script alang niini ug nagdali ako sa pagpaambit niini kanimo.

Naa koy duha ka problema.

Una, ang hibernation dili molihok sa gawas sa kahon sa Lubunta; aron mahimo kini, kinahanglan nimo nga buhaton ang mosunud.

Pangitaa ang UUID swap, aron mahimo kini kinahanglan nimo nga modagan:

grep swap /etc/fstab

Sa akong kaso ang output mao ang mosunod:

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

Unya kinahanglan nimo nga idugang ang UUID sa mga parameter sa kernel initialization. Aron mahimo kini, idugang ang resume=UUID=%imong UUID% sa linya nga β€œGRUB_CMDLINE_LINUX_DEFAULT” sa file /etc/default/grub

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

Ug pagdagan ang mando:

sudo update-grub

Karon ang hibernation kinahanglan nga molihok, aron masusi nga mahimo ka nga modagan:

sudo systemctl hibernate

Ang ikaduha nga problema mao kung giunsa ang pag-lock sa screen sa gumagamit ingon gamut nga wala ipadala ang laptop aron matulog. Gisulbad nako kini gamit ang dbus-send, ang command mismo anaa sa script sa ubos. Kung adunay nahibal-an sa ubang mga kapilian, palihug isulat sa mga komento

Karon magsugod kita sa pagsulat sa script.

Ang unang butang nga kinahanglan natong buhaton sa Power Manager mao ang pagpili sa Switch off display isip aksyon sa pagsira sa tabon, aron walay mga panagsumpaki sa atong script.

Pasadya nga script kung isira ang tabon sa laptop ug i-lock ang screen nga wala’y tulog

Dayon paghimo og file /etc/acpi/events/laptop-lid nga adunay mosunod nga sulod:

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

ug paghimo og script /etc/acpi/laptop-lid.sh nga adunay mosunod nga sulod:

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

Paghimo sa script nga ma-executable:

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

Ug i-restart ang acpid daemon aron ang mga pagbag-o magamit:

sudo systemctl restart acpid.service

Andam na ang tanan.

Alang sa Gnome sa script kinahanglan nimo nga usbon:

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

Source: www.habr.com

Idugang sa usa ka comment