我正在使用最新的 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)。