Skrip khusus nalika nutup tutup laptop lan ngunci layar tanpa turu

Halo kabeh. Aku nggunakake Lubuntu 18.04 ing laptop omahku. Ing sawijining dina, aku mutusake yen aku ora puas karo tumindak sing ditawakake Power Manager nalika nutup tutup laptop. Aku pengin ngunci layar nalika nutup tutup laptop lan sawise sawetara wektu ngirim laptop menyang hibernasi. Aku nulis skrip kanggo iki lan aku cepet-cepet nuduhake karo sampeyan.

Aku nemoni rong masalah.

Kaping pisanan, hibernasi ora metu saka kothak ing Lubunta; kanggo ngaktifake, sampeyan kudu nindakake ing ngisor iki.

Temokake swap UUID, kanggo nindakake iki, sampeyan kudu mbukak:

grep swap /etc/fstab

Ing kasusku, output ing ngisor iki:

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

Banjur sampeyan kudu nambah UUID menyang paramèter initialization kernel. Kanggo nindakake iki, tambahake resume = UUID =% UUID% sampeyan menyang baris "GRUB_CMDLINE_LINUX_DEFAULT" ing file /etc/default/grub

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

Lan mbukak printah:

sudo update-grub

Saiki hibernasi kudu bisa digunakake, kanggo mriksa sampeyan bisa mbukak:

sudo systemctl hibernate

Masalah kapindho yaiku carane ngunci layar pangguna minangka root tanpa ngirim laptop turu. Aku ditanggulangi nggunakake dbus-send, printah dhewe ing script ing ngisor iki. Yen ana sing ngerti opsi liyane, tulisen ing komentar

Saiki ayo miwiti nulis naskah.

Wangsulan: Bab ingkang sapisanan kita kudu nindakake ing Power Manager kanggo milih Ngalih mati tampilan minangka tumindak nalika nutup tutup, supaya ora ana konflik karo script kita.

Skrip khusus nalika nutup tutup laptop lan ngunci layar tanpa turu

Banjur gawe file /etc/acpi/events/laptop-lid kanthi isi ing ngisor iki:

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

lan gawe skrip /etc/acpi/laptop-lid.sh kanthi isi ing ngisor iki:

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

Nggawe skrip bisa dieksekusi:

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

Lan miwiti maneh daemon acpid supaya owah-owahan ditrapake:

sudo systemctl restart acpid.service

Kabeh wis siyap.

Kanggo Gnome ing skrip sampeyan kudu ngganti:

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

Source: www.habr.com

Add a comment