برنامج نصي مخصص عند إغلاق غطاء الكمبيوتر المحمول وقفل الشاشة دون النوم

أهلاً بكم. أنا أستخدم 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 إلى معلمات تهيئة kernel. للقيام بذلك، قم بإضافة استئناف=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 حتى يتم تطبيق التغييرات:

sudo systemctl restart acpid.service

كل شيء جاهز

بالنسبة لـ Gnome في البرنامج النصي، تحتاج إلى تغيير:

  • lxsessin => جلسة جنوم
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

المصدر: www.habr.com

إضافة تعليق