Custom na script kapag isinasara ang takip ng laptop at ni-lock ang screen nang walang tulog

Kamusta kayong lahat. Gumagamit ako ng Lubuntu 18.04 sa aking home laptop. Isang magandang araw napagpasyahan kong hindi ako nasiyahan sa mga aksyon na inaalok ng Power Manager noong isinara ang takip ng laptop. Nais kong i-lock ang screen kapag isinara ang takip ng laptop at pagkaraan ng ilang sandali ipadala ang laptop sa hibernation. Sumulat ako ng script para dito at nagmamadali akong ibahagi ito sa iyo.

Nagkaroon ako ng dalawang problema.

Una, hindi gumagana ang hibernation sa labas ng kahon sa Lubunta; upang paganahin ito, kailangan mong gawin ang sumusunod.

Hanapin ang UUID swap, para magawa ito kailangan mong tumakbo:

grep swap /etc/fstab

Sa aking kaso ang output ay ang sumusunod:

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

Pagkatapos ay kailangan mong idagdag ang UUID sa mga parameter ng pagsisimula ng kernel. Upang gawin ito, idagdag ang resume=UUID=%iyong UUID% sa linyang β€œGRUB_CMDLINE_LINUX_DEFAULT” sa file /etc/default/grub

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

At patakbuhin ang utos:

sudo update-grub

Ngayon ay dapat gumana ang hibernation, upang suriin na maaari kang tumakbo:

sudo systemctl hibernate

Ang pangalawang problema ay kung paano i-lock ang screen ng user bilang root nang hindi pinapatulog ang laptop. Nalutas ko ito gamit ang dbus-send, ang utos mismo ay nasa script sa ibaba. Kung may nakakaalam ng iba pang mga pagpipilian, mangyaring sumulat sa mga komento

Ngayon simulan natin ang pagsulat ng script.

Ang unang bagay na kailangan nating gawin sa Power Manager ay piliin ang I-off ang display bilang aksyon kapag isinasara ang takip, upang walang mga salungatan sa aming script.

Custom na script kapag isinasara ang takip ng laptop at ni-lock ang screen nang walang tulog

Pagkatapos ay lumikha ng isang file /etc/acpi/events/laptop-lid na may sumusunod na nilalaman:

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

at lumikha ng isang script /etc/acpi/laptop-lid.sh na may sumusunod na nilalaman:

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

Ginagawang maipapatupad ang script:

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

At i-restart ang acpid daemon upang mailapat ang mga pagbabago:

sudo systemctl restart acpid.service

Lahat ay handa na.

Para sa Gnome sa script kailangan mong baguhin:

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

Pinagmulan: www.habr.com

Magdagdag ng komento