ڪسٽم اسڪرپٽ جڏهن ليپ ٽاپ جي لٺ کي بند ڪرڻ ۽ اسڪرين کي لاڪ ڪرڻ کان سواءِ ننڊ ۾

هيلو سڀ. مان استعمال ڪري رهيو آهيان Lubuntu 18.04 منهنجي گهر جي ليپ ٽاپ تي. هڪ سٺو ڏينهن مون فيصلو ڪيو ته مان انهن ڪمن مان مطمئن نه آهيان جيڪي پاور مئنيجر پيش ڪيا هئا جڏهن ليپ ٽاپ جي لِڊ کي بند ڪيو ويو. مون ليپ ٽاپ جي لِڊ کي بند ڪرڻ وقت اسڪرين کي لاڪ ڪرڻ چاهيو ۽ ٿوري دير کان پوءِ ليپ ٽاپ کي هائيبرنيشن ۾ موڪليو. مون ان لاءِ هڪ اسڪرپٽ لکيو آهي ۽ مون کي جلدي جلدي توهان سان شيئر ڪيو آهي.

مون کي ٻن مسئلن ۾ ڀڄي ويا.

پهريون، هائيبرنيشن لبنٽا ۾ دٻي کان ٻاهر ڪم نٿو ڪري؛ ان کي فعال ڪرڻ لاء، توهان کي هيٺين ڪرڻ جي ضرورت آهي.

UUID سوپ ڳولھيو، ھن کي ڪرڻ لاء توھان کي ھلڻو پوندو:

grep swap /etc/fstab

منهنجي صورت ۾ پيداوار هيٺ ڏنل آهي:

# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none            swap    sw              0       0

پوء توھان کي UUID شامل ڪرڻ جي ضرورت آھي ڪنييل شروعاتي پيٽرولن ۾. هن کي ڪرڻ لاءِ، فائل ۾ "GRUB_CMDLINE_LINUX_DEFAULT" لائن ۾ resume=UUID=%Your UUID% شامل ڪريو /etc/default/grub

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...

۽ حڪم هلايو:

sudo update-grub

ھاڻي ھائيبرنيشن ڪم ڪرڻ گھرجي، چيڪ ڪرڻ لاءِ توھان ھلائي سگھوٿا:

sudo systemctl hibernate

ٻيو مسئلو اهو هو ته ليپ ٽاپ کي ننڊ ۾ موڪلڻ کان سواءِ صارف جي اسڪرين کي روٽ طور ڪيئن لاڪ ڪيو وڃي. مون ان کي dbus-send استعمال ڪندي حل ڪيو، حڪم پاڻ ھيٺ ڏنل اسڪرپٽ ۾ آھي. جيڪڏهن ڪنهن کي ٻين اختيارن جي ڄاڻ آهي، مهرباني ڪري تبصرن ۾ لکندا

هاڻي اچو ته اسڪرپٽ لکڻ شروع ڪريون.

پهرين شيء جيڪا اسان کي پاور مئنيجر ۾ ڪرڻ جي ضرورت آهي اهو آهي سوئچ آف ڊسپلي کي چونڊيو عمل جي طور تي جڏهن لڊ کي بند ڪيو وڃي، ته جيئن اسان جي اسڪرپٽ سان ڪو به تضاد نه هجي.

ڪسٽم اسڪرپٽ جڏهن ليپ ٽاپ جي لٺ کي بند ڪرڻ ۽ اسڪرين کي لاڪ ڪرڻ کان سواءِ ننڊ ۾

پوءِ ھيٺ ڏنل مواد سان فائل ٺاھيو /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

۽ ايڪڊ ڊيمن کي ٻيهر شروع ڪريو ته جيئن تبديليون لاڳو ٿين:

sudo systemctl restart acpid.service

سڀ تيار آهي.

اسڪرپٽ ۾ Gnome لاءِ توھان کي تبديل ڪرڻ جي ضرورت آھي:

  • lxsessin => gnome-sation
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

جو ذريعو: www.habr.com

تبصرو شامل ڪريو