สคริปต์ที่กำหนดเองเมื่อปิดฝาแล็ปท็อปและล็อคหน้าจอโดยไม่เข้าสู่โหมดสลีป

สวัสดีทุกคน. ฉันใช้ Lubuntu 18.04 กับแล็ปท็อปที่บ้าน วันหนึ่งฉันตัดสินใจว่าฉันไม่พอใจกับการกระทำที่ Power Manager เสนอเมื่อปิดฝาแล็ปท็อป ฉันต้องการล็อคหน้าจอเมื่อปิดฝาแล็ปท็อปและหลังจากนั้นไม่นานก็ส่งแล็ปท็อปเข้าสู่โหมดไฮเบอร์เนต ฉันเขียนสคริปต์สำหรับเรื่องนี้และรีบแบ่งปันกับคุณ

ฉันประสบปัญหาสองประการ

ขั้นแรก การไฮเบอร์เนตไม่ทำงานนอกกรอบใน Lubunta คุณต้องทำสิ่งต่อไปนี้เพื่อเปิดใช้งาน

ค้นหาการแลกเปลี่ยน UUID เพื่อดำเนินการนี้คุณต้องเรียกใช้:

grep swap /etc/fstab

ในกรณีของฉันผลลัพธ์จะเป็นดังนี้:

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

จากนั้นคุณจะต้องเพิ่ม UUID ให้กับพารามิเตอร์การเริ่มต้นเคอร์เนล ในการดำเนินการนี้ ให้เพิ่ม resume=UUID=%your UUID% ลงในบรรทัด “GRUB_CMDLINE_LINUX_DEFAULT” ในไฟล์ /etc/default/grub

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

และรันคำสั่ง:

sudo update-grub

ตอนนี้การไฮเบอร์เนตควรใช้งานได้ เพื่อตรวจสอบว่าคุณสามารถรันได้:

sudo systemctl hibernate

ปัญหาที่สองคือวิธีล็อคหน้าจอของผู้ใช้ในฐานะรูทโดยไม่ส่งแล็ปท็อปเข้าสู่โหมดสลีป ฉันแก้ไขมันโดยใช้ dbus-send คำสั่งนั้นอยู่ในสคริปต์ด้านล่าง หากใครรู้ตัวเลือกอื่น ๆ โปรดเขียนในความคิดเห็น

ตอนนี้เรามาเริ่มเขียนสคริปต์กันดีกว่า

สิ่งแรกที่เราต้องทำใน Power Manager คือเลือกปิดจอแสดงผลเป็นการดำเนินการเมื่อปิดฝา เพื่อไม่ให้ขัดแย้งกับสคริปต์ของเรา

สคริปต์ที่กำหนดเองเมื่อปิดฝาแล็ปท็อปและล็อคหน้าจอโดยไม่เข้าสู่โหมดสลีป

จากนั้นสร้างไฟล์ /etc/acpi/events/laptop-lid โดยมีเนื้อหาดังต่อไปนี้:

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

และสร้างสคริปต์ /etc/acpi/laptop-lid.sh โดยมีเนื้อหาดังต่อไปนี้:

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

ทำให้สคริปต์ปฏิบัติการได้:

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

และรีสตาร์ท acpid daemon เพื่อให้การเปลี่ยนแปลงมีผล:

sudo systemctl restart acpid.service

ทุกอย่างพร้อมแล้ว

สำหรับ Gnome ในสคริปต์คุณต้องเปลี่ยน:

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

ที่มา: will.com

เพิ่มความคิดเห็น