Skrip tersuai apabila menutup penutup komputer riba dan mengunci skrin tanpa tidur

Hai semua. Saya menggunakan Lubuntu 18.04 pada komputer riba rumah saya. Pada suatu hari yang baik saya memutuskan bahawa saya tidak berpuas hati dengan tindakan yang ditawarkan oleh Power Manager apabila menutup penutup komputer riba. Saya ingin mengunci skrin apabila menutup penutup komputer riba dan selepas beberapa ketika menghantar komputer riba ke dalam hibernasi. Saya menulis skrip untuk ini dan saya bersegera untuk berkongsi dengan anda.

Saya menghadapi dua masalah.

Pertama, hibernasi tidak berfungsi di luar kotak di Lubunta; untuk membolehkannya, anda perlu melakukan perkara berikut.

Cari swap UUID, untuk melakukan ini, anda perlu menjalankan:

grep swap /etc/fstab

Dalam kes saya output adalah seperti berikut:

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

Kemudian anda perlu menambah UUID pada parameter permulaan kernel. Untuk melakukan ini, tambah resume=UUID=% UUID% anda pada baris "GRUB_CMDLINE_LINUX_DEFAULT" dalam fail /etc/default/grub

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

Dan jalankan arahan:

sudo update-grub

Sekarang hibernasi harus berfungsi, untuk menyemak anda boleh menjalankan:

sudo systemctl hibernate

Masalah kedua ialah bagaimana untuk mengunci skrin pengguna sebagai akar tanpa menghantar komputer riba tidur. Saya menyelesaikannya menggunakan dbus-send, arahan itu sendiri ada dalam skrip di bawah. Jika sesiapa tahu pilihan lain, sila tulis dalam komen

Sekarang mari kita mula menulis skrip.

Perkara pertama yang perlu kita lakukan dalam Pengurus Kuasa ialah memilih Matikan paparan sebagai tindakan semasa menutup penutup, supaya tiada konflik dengan skrip kita.

Skrip tersuai apabila menutup penutup komputer riba dan mengunci skrin tanpa tidur

Kemudian buat fail /etc/acpi/events/laptop-lid dengan kandungan berikut:

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

dan buat skrip /etc/acpi/laptop-lid.sh dengan kandungan 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

Menjadikan skrip boleh dilaksanakan:

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

Dan mulakan semula daemon acpid supaya perubahan digunakan:

sudo systemctl restart acpid.service

Segala-galanya sudah siap.

Untuk Gnome dalam skrip anda perlu menukar:

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

Sumber: www.habr.com

Tambah komen