اسکریپت سفارشی هنگام بستن درب لپ تاپ و قفل کردن صفحه بدون خواب

سلام به همه. من از 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

اضافه کردن نظر