休眠后触摸板不工作

休眠后触摸板不工作

我正在使用最新的 Arch/Antergos Linux。

从休眠状态恢复后,我的触摸板停止工作。我似乎受到了影响bug,我需要sudo rmmod i2c_hid; modprobe i2c_hid在每次恢复后键入以使触摸板恢复到工作状态。

我尝试通过添加脚本fix-touchpad.sh来自动化该过程/usr/lib/systemd/system-sleep,以便它在从休眠状态恢复时运行:

#!/bin/sh
if [ $1 = post ]
then
    rmmod i2c_hid
    modprobe i2c_hid
fi

该脚本在启动时执行,我在测试echo "something" > log.log之前和之后if以及之前进行了测试fi。然而,它并没有让我的触摸板恢复正常。

我还在恢复后成功测试了脚本sh fix-touchpad.sh post,你瞧,我的触摸板再次醒来。

当脚本作为恢复过程的一部分运行时,为什么它不修复触摸板?

还有其他方法可以修复我的触摸板吗?

答案1

我不知道为什么,但是问题是从休眠状态返回时尝试删除和添加模块

解决方案1

我遇到了与您相同的问题,fix-touchpad.sh直到我尝试在休眠前删除模块并在休眠后将其添加回来之前,您的脚本才起作用。

总部设在这个答案在 Fedora 论坛上,它可能是这样的:

$ cat /usr/lib/systemd/system-sleep/fix-touchpad.sh
#!/bin/bash
[ "$1" = "pre" ] && modprobe -r i2c_hid
[ "$1" = "post" ] && modprobe i2c_hid
exit 0

解决方案2

我还找到了另一种在休眠/恢复上执行代码的方法,并且它也仅在休眠前移除模块时才起作用。正如 Arch 维基百科中所述电源管理#睡眠挂钩,您可以创建一个由睡眠服务触发的systemd服务。

根据 wiki 的说明,我得出以下结论:

$ cat /etc/systemd/system/root-resume.service
[Unit]
Description=(un)load module i2c_hid when going to/from sleep
Before=sleep.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=modprobe -r i2c_hid
ExecStop=modprobe i2c_hid

[Install]
WantedBy=sleep.target

该服务应通过 启用systemd enable root-resume。注意ExecStart会在之前执行sleep.target,ExecStop会在resume时执行。

解决方案3

查看systemd-suspend-modules包裹尿素尿率。它基本上定义了一个执行的服务解决方案1对于用户配置文件中列出的每个模块。它可能更适合其他模块,因为它“递归地卸载给定的模块以及所有依赖于它的模块”(https://github.com/parkouss/systemd-suspend-modules/blob/master/suspend-modules#L19)。

相关内容