Skrip khusus saat menutup penutup laptop dan mengunci layar tanpa tidur

Halo semuanya. Saya menggunakan Lubuntu 18.04 di laptop rumah saya. Suatu hari, saya memutuskan bahwa saya tidak senang dengan tindakan yang ditawarkan Power Manager ketika menutup penutup laptop. Ketika saya menutup tutup laptop, saya ingin memblokir layar dan setelah beberapa saat mengirim laptop ke hibernasi. Untuk melakukan ini, saya menulis sebuah skrip dan saya segera membagikannya kepada Anda.

Saya mengalami dua masalah.

Yang pertama adalah bahwa hibernasi tidak berfungsi dalam kotak dari kotak, untuk mengaktifkannya, hal berikut harus dilakukan.

Temukan swap UUID, untuk ini yang perlu Anda lakukan:

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

Kemudian Anda perlu menambahkan UUID ke parameter inisialisasi kernel. Untuk melakukan ini, tambahkan file / etc / default / grub ke baris "GRUB_CMDLINE_LINUX_DEFAULT" resume = UUID =% UUID Anda%

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

Dan jalankan perintah:

sudo update-grub

Sekarang hibernasi akan berfungsi, untuk verifikasi Anda dapat melakukan:

sudo systemctl hibernate

Masalah kedua adalah bagaimana mengunci layar pengguna dari root tanpa mengirim laptop ke mode tidur. Saya menyelesaikannya menggunakan dbus-send, perintahnya sendiri ada di skrip di bawah ini. Jika ada yang tahu opsi lain, silakan tulis di komentar.

Sekarang mari kita mulai menulis skrip.

Hal pertama yang perlu kita lakukan di Power Manager adalah pilih Nonaktifkan tampilan sebagai tindakan saat menutup penutup sehingga tidak ada konflik dengan skrip kami.

gambar

Kemudian buat file / etc / acpi / events / laptop-tutup dengan konten berikut:

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

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

Kami membuat skrip dapat dieksekusi:

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

Dan restart daemon acpid agar perubahannya berlaku:

sudo systemctl restart acpid.service

Semuanya sudah siap.

Untuk Gnome dalam skrip, Anda perlu mengubah:

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

All Articles