pan*_*ita 4 arch-linux shell-script hibernate touchpad systemd
我使用的是最新的 Arch/Antergos Linux。
从休眠状态恢复后,我的触摸板停止工作。我似乎受到了这个错误的影响,我需要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
Run Code Online (Sandbox Code Playgroud)
该脚本在启动时执行,我在测试echo "something" > log.log
之前和之后if
以及就在fi
. 然而,它并没有让我的触摸板恢复原状。
我还在sh fix-touchpad.sh post
恢复后成功测试了脚本,瞧,我的触摸板再次唤醒。
为什么脚本在作为恢复程序的一部分运行时不修复触摸板?
有没有其他方法可以修复我的触摸板?
小智 5
我不确定为什么,但问题是在从 hibernation 返回时尝试删除和添加模块。
我遇到了和你一样的问题,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
Run Code Online (Sandbox Code Playgroud)
我还找到了另一种在 hibernate/resume 上执行代码的方法,它也只在 hibernation 之前删除模块时才有效。正如 Arch 的 Wiki Power management#Sleep hooks 中所述,您可以创建一个由 sleep 服务触发的 systemd 服务。
根据维基说明,我想出了以下内容:
$ 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
Run Code Online (Sandbox Code Playgroud)
该服务应启用systemd enable root-resume
。注意 ExecStart 会在 之前执行sleep.target
,ExecStop 会在恢复时执行。
systemd-suspend-modules
在AUR查看包裹。它基本上定义了一个服务,该服务为用户配置文件中列出的每个模块执行解决方案 1。它可能更适合其他模块,因为它“递归卸载给定的模块和所有依赖它的模块”(https://github.com/parkouss/systemd-suspend-modules/blob/master/suspend-modules#L19) .
归档时间: |
|
查看次数: |
2486 次 |
最近记录: |