关闭笔记本电脑的机盖并锁定屏幕而不睡觉时的自定义脚本

大家好。我在家用笔记本电脑上使用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添加到内核初始化参数中。为此,将文件/ etc / default / grub添加到“ GRUB_CMDLINE_LINUX_DEFAULT”行中履历= UUID =%您的UUID%

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

并重新启动acpid守护程序,以便应用更改:

sudo systemctl restart acpid.service

都准备好了。

对于脚本中的Gnome,您需要更改:

  • lxsessin => gnome会话
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

All Articles