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.
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