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

تحية للجميع. أستخدم Lubuntu 18.04 على جهاز الكمبيوتر المحمول في المنزل. في أحد الأيام الجميلة ، قررت أنني لست سعيدًا بالإجراءات التي تقدمها Power Manager عند إغلاق غطاء الكمبيوتر المحمول. عندما أغلقت غطاء الكمبيوتر المحمول ، أردت حظر الشاشة وبعد فترة وجيزة أرسل الكمبيوتر المحمول إلى وضع الإسبات. للقيام بذلك ، كتبت نصًا ، وسارع إلى مشاركته معك.

واجهت مشكلتين.

الأول هو أن السبات لا يعمل في loubunt خارج منطقة الجزاء ؛

ابحث عن مبادلة 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. للقيام بذلك ، أضف الملف / etc / default / grub إلى السطر "GRUB_CMDLINE_LINUX_DEFAULT" سيرة ذاتية = UUID =٪ your UUID٪

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

وأعد تشغيل البرنامج الخفي حتى يتم تطبيق التغييرات:

sudo systemctl restart acpid.service

كل شيء جاهز.

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

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

All Articles