禁用键盘、鼠标或盖子唤醒 Ubuntu PC
禁用键盘、鼠标或盖子唤醒 Ubuntu PC
在使用Ubuntu系统时,你是否遇到过电脑在睡眠状态下被意外唤醒的情况?这可能是由于键盘、鼠标或笔记本盖子的开合触发了唤醒操作。本文将详细介绍如何禁用这些唤醒触发器,帮助你更好地控制系统的睡眠状态。
本教程介绍如何启用/禁用键盘、鼠标、盖子打开和/或其他设备事件以将 Ubuntu PC 或笔记本电脑从睡眠状态唤醒。
默认情况下,打开笔记本电脑盖子,按键盘上的任意键,或按睡眠按钮可以将计算机从挂起或休眠状态唤醒。如果需要,您可以将 Ubuntu 配置为忽略某些您不想要的唤醒触发器。
本教程在运行 Ubuntu 24.04 的 ThinkPad t480s 上进行了测试。它也应该适用于其他 Linux 和其他设备,但“Lid Open”操作可能会有所不同!
第 1 步:查看当前的唤醒触发器
通常,用户可以读取 /proc/acpi/wakeup
文件,以获取启用和禁用的唤醒触发器的列表。
1. 首先,按 Ctrl+Alt+T
打开终端窗口,然后运行命令列出已启用的唤醒触发器:
cat /proc/acpi/wakeup |grep enabled
在命令中跳过 |grep enabled
将显示所有启用或禁用的触发器。
在输出中,您将看到供应商特定的代码名称,例如 XHC (USB 3.0)、SLPB(睡眠按钮)、LID(笔记本电脑盖子)、它们的 sysfs ID,以及其中他们可以从睡眠级别(s3 - 挂起,s4 - 休眠)中醒来。
2. 对于 PCI 设备,您可以再运行一个命令来详细了解它们是什么:
lspci |grep -e "xx:xx.x" -e "xx:xx.x" -e "xx:xx.x" -e "xx:xx.x"
在命令中,根据上一条命令中获取的 sysfs
ID(后半部分)替换 xx:xx.x
。并且,根据您要列出的 PCI 设备数量添加/删除 -e "xx:xx.x"
。
正如下面的屏幕截图所示,就我而言,我可以通过以下方式唤醒我的计算机:
- GLAN,pci:0000:00:1f.6,有线网卡,处于S4(还包括S3/S2/S1)休眠状态。
- XHC、pci:0000:00:14.0、USB 3.0 设备,从 S3(睡眠到 RAM)挂起状态。
- PXSX,pci:0000:04:00.0,Thunderbolt 3 设备,来自 S4 休眠状态。
- SLPB(睡眠按钮)、LID(笔记本电脑盖)和少数其他 PCIe 设备。
步骤 2:禁用从某些 PCI 设备唤醒
上面最后一步列出的所有设备都有自己的 /sys/bus/
子文件夹,这些子文件夹是在检测时自动创建的(通常在启动时,除非您将它们热插拔然后再插入)。
每个子文件夹都包含一个 power/wakeup
文件,其中包含“启用”或“禁用”从睡眠状态唤醒的键值。
要禁用一个,只需运行命令:
echo disabled | sudo tee /sys/bus/pci/devices/0000:00:14.0/power/wakeup
这里根据您在上一个命令中获得的 ID 替换 0000:00:14.0
,以根据需要禁用任何 PCI 触发器。或者,将 disabled
替换为 enabled
以启用触发器。
而且,您可以使用不同的 sysfs ID 一次又一次地重新运行该命令,以禁用/启用多个唤醒触发器。
要进行验证,请重新运行 cat /proc/acpi/wakeup
命令,或者只是挂起计算机并尝试使用刚刚禁用的触发器来唤醒它。
使用udev规则使其永久化
最后一个 echo
命令暂时有效,直到重新启动或重新插入设备为止。为了使其在重新启动后也能保持不变,您可以创建 udev 规则。
1. 首先,运行命令创建(并编辑)自定义 udev 规则文件(本例中为 40-disable-wakeup-triggers.rules
):
sudo gnome-text-editor /etc/udev/rules.d/40-disable-wakeup-triggers.rules
此处根据您的桌面环境替换 gnome-text-editor
,旧 GNOME(22.04 及更早版本)替换 gedit
,XFCE 替换 musepad
,或使用适用于大多数桌面的 nano
。
2. 文件打开时,添加以下行:
ACTION=="add", KERNEL=="0000:00:14.0", SUBSYSTEM=="pci", ATTR{power/wakeup}="disabled"
这里:
ACTION=="add"
告诉在检测到设备时执行操作。KERNEL=="0000:00:14.0"
、SUBSYSTEM=="pci"
用于识别设备。相应地替换 ID。ATTR{power/wakeup}="disabled"
(这里只有一个“=”)告诉将“disabled”写入power/wakeup
所以要禁用触发器。
并且,您可以添加具有不同 ID(对于 KERNEL 值)的多行,以禁用或启用检测时的多个触发器。
保存文件后(对于 nano
,请按 Ctrl+S,然后按 Ctrl+X),重新启动计算机以应用更改。
(可选)禁用从某些 USB 设备唤醒
在最后一步中,禁用 XHC(在我的例子中为 pci:0000:00:14.0)将阻止所有 USB 3.0 设备唤醒计算机。
但是,如果您想禁用某些 USB 设备(例如 USB 键盘),同时保持其他 USB 设备不变,请逐步执行以下步骤。
注意:要使此步骤生效,您需要启用 XHC(在上一步中配置)。
1. 首先,运行以下命令来告知所有已连接的 USB 设备及其 ID。
lsusb
就我而言,我有 ID 为 1c4f:0034
的 USB 鼠标和 ID 为 3151:3020
的 USB 键盘。前 4 个十六进制数字是供应商 ID,后 4 个是产品 ID。
然后,运行以下命令(将产品 ID“3020”替换为您的)将告诉 USB 设备的 /sys/bus
文件夹。
grep 3020 /sys/bus/usb/devices/*/idProduct
- 要暂时禁用 USB 设备将系统从睡眠状态唤醒,请使用命令:
echo disabled | sudo tee /sys/bus/usb/devices/1-2/power/wakeup
这里根据您在上一个命令中获得的内容,将 /sys/bus/usb/devices/1-2
替换为文件夹 PATH。并且,它会一直工作,直到重新启动或重新插入 USB 设备。
3. 要使其永久化,还可以通过命令创建 udev 规则(将 gnome-text-editor 替换为文本编辑器):
sudo gnome-text-editor /etc/udev/rules.d/40-disable-wakeup-triggers.rules
文件打开后,写入以下行(将 3151
和 3020
替换为您的代码):
ACTION=="add|change", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="3151", ATTRS{idProduct}=="3020", ATTR{power/wakeup}="disabled"
这里 ACTION=="add|change"
指示在每次设备更改时尝试重新应用规则,因为 USB 设备是可热插拔的。
防止笔记本电脑盖打开唤醒 Ubuntu
注意:此步骤可能适用于您的笔记本电脑,也可能不适用于您的笔记本电脑!似乎没有统一的方法来禁用开盖唤醒功能。如果您知道,请在下面留言告诉我。
如今,大多数笔记本电脑都支持打开盖子时唤醒。要启用/禁用此功能,首先您需要尝试 BIOS 设置中的选项。
如果您的 BIOS 设置页面不包含该选项,您可以一一尝试以下步骤,但这可能不适用于某些笔记本电脑。
1. 首先,打开终端 (Ctrl+Alt+T) 并运行以下命令来查找 Lid 的 /sys/bus
子文件夹:
sudo dmesg |grep Lid
就我而言,它是 /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/
。
2. 然后,尝试将“disabled”发送到该设备文件夹的 power/wakeup
文件(相应地替换粗体文本)。
echo disabled | sudo tee /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/power/wakeup
完成后,暂停计算机,然后合上盖子。最后,尝试稍后打开盖子,看看它是否会被唤醒。如果不起作用,请尝试将盖子开关操作设置为忽略。
3. 如果最后一步有效,那么您可以创建一个 udev 规则以使其永久化。
首先,运行命令找出识别设备的关键参数(根据上一条命令替换粗体文本)。
udevadm info -q all -a /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/
就我而言(参见屏幕截图),KERNEL=="PNP0C0D:00"
、SUBSYSTEM=="acpi"
和 DRIVER=="button"
是我需要的 udev 规则。
接下来,运行命令来创建(并编辑)udev 规则(相应地替换 gnome-text-editor ):
sudo gnome-text-editor /etc/udev/rules.d/40-disable-wakeup-triggers.rules
文件打开时,添加下面的行并保存:
ACTION=="add", KERNEL=="PNP0C0D:00", SUBSYSTEM=="acpi", DRIVER=="button", ATTR{power/wakeup}="disabled"
udev 规则将在 Ubuntu Linux 系统下次启动时采取行动。