أهلاً بكم. أنا أستخدم 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