سلام به همه. من از Lubuntu 18.04 در لپ تاپ خانگی خود استفاده می کنم. یک روز خوب تصمیم گرفتم که از اقداماتی که Power Manager هنگام بستن درب لپ تاپ ارائه داد راضی نیستم. می خواستم هنگام بستن درب لپ تاپ صفحه را قفل کنم و بعد از مدتی لپ تاپ را به حالت خواب زمستانی بفرستم. من یک فیلمنامه برای این نوشتم و عجله دارم آن را با شما به اشتراک بگذارم.
من به دو مشکل برخورد کردم
اول اینکه، خواب زمستانی در لوبونتا خارج از جعبه کار نمی کند؛ برای فعال کردن آن، باید موارد زیر را انجام دهید.
مبادله 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=%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 انجام دهیم این است که هنگام بستن درب، Switch off display را به عنوان عمل انتخاب کنیم تا هیچ تضادی با اسکریپت ما ایجاد نشود.
سپس یک فایل /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 => gnome-session
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
منبع: www.habr.com