Script custom saat menutup penutup laptop dan mengunci layar tanpa sleep

Halo semua. Saya menggunakan Lubuntu 18.04 di laptop rumah saya. Suatu hari saya memutuskan bahwa saya tidak puas dengan tindakan yang ditawarkan Power Manager saat menutup penutup laptop. Saya ingin mengunci layar saat menutup penutup laptop dan setelah beberapa saat mengirim laptop ke mode hibernasi. Saya menulis naskah untuk ini dan saya segera membagikannya kepada Anda.

Saya mengalami dua masalah.

Pertama, hibernasi tidak langsung berfungsi di Lubunta; untuk mengaktifkannya, Anda perlu melakukan hal berikut.

Temukan pertukaran UUID, untuk melakukan ini, Anda perlu menjalankan:

grep swap /etc/fstab

Dalam kasus saya, hasilnya adalah sebagai berikut:

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

Maka Anda perlu menambahkan UUID ke parameter inisialisasi kernel. Untuk melakukan ini, tambahkan resume=UUID=%your UUID% ke baris β€œGRUB_CMDLINE_LINUX_DEFAULT” di file /etc/default/grub

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

Dan jalankan perintah:

sudo update-grub

Sekarang hibernasi seharusnya berfungsi, untuk memeriksanya Anda dapat menjalankan:

sudo systemctl hibernate

Masalah kedua adalah bagaimana mengunci layar pengguna sebagai root tanpa membuat laptop tertidur. Saya menyelesaikannya menggunakan dbus-send, perintahnya sendiri ada pada skrip di bawah ini. Jika ada yang tahu opsi lain, silakan tulis di komentar

Sekarang mari kita mulai menulis naskahnya.

Hal pertama yang perlu kita lakukan di Power Manager adalah memilih Matikan tampilan sebagai tindakan saat menutup penutupnya, sehingga tidak ada konflik dengan skrip kita.

Script custom saat menutup penutup laptop dan mengunci layar tanpa sleep

Kemudian buat file /etc/acpi/events/laptop-lid dengan isi sebagai berikut:

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

dan buat script /etc/acpi/laptop-lid.sh dengan isi sebagai berikut:

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

Membuat skrip dapat dieksekusi:

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

Dan restart daemon acpid agar perubahan diterapkan:

sudo systemctl restart acpid.service

Semuanya sudah siap.

Untuk Gnome di skrip Anda perlu mengubah:

  • lxsessin => sesi gnome
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

Sumber: www.habr.com

Tambah komentar