![触摸板在睡眠后出现异常](https://linux22.com/image/844431/%E8%A7%A6%E6%91%B8%E6%9D%BF%E5%9C%A8%E7%9D%A1%E7%9C%A0%E5%90%8E%E5%87%BA%E7%8E%B0%E5%BC%82%E5%B8%B8.png)
有时,当我将笔记本电脑从睡眠状态唤醒时,触摸板会表现得很奇怪。鼠标指针在屏幕上跳动,很难控制鼠标。我尝试在 ubuntu 控制中心关闭和打开触摸板,希望这样可以卸载和加载模块,但没有帮助。重新启动机器可以解决这个问题。
答案1
重新启动驱动程序有助于:
只需按 Ctrl+alt+T,然后运行:
sudo rmmod psmouse
sudo modprobe psmouse
在 Macbook 上,我认为您可能需要使用“appletouch”而不是 psmouse。
答案2
这是一个老话题,但我想回答我的解决方案,因为指针设备似乎并不喜欢其他电源状态。
顺便说一句,如果您在挂起/休眠等后遇到设备问题,这是一种“重置”模块的好方法,而不仅仅是触摸板。
我的问题完全相同:
- 休眠后,我的触摸板很难使用,
- 但我连接的 USB 鼠标正常。
回答如下无漏洞我意识到
lsmod | grep touch
我的设备名称是“hid_multitouch”
sudo rmmod hid_multitouch
sudo modprobe hid_multitouch
... 我的触摸板又能正常工作了。
我在 /etc/pm/sleep.d 文件中写了一个脚本
sudo pico /etc/pm/sleep.d/20_touchpad_reset
内容如下:
case "${1}" in thaw) rmmod hid_multitouch modprobe hid_multitouch ;; esac
...并使其可执行
sudo chmod +x /etc/pm/sleep.d/20_touchpad_reset
此代码片段与上述命令完全相同,但从 现在起仅在休眠后
自动
运行
sudo pm 休眠
工作良好。
但pm-tools 不适用于 Ubuntu(Debian),所以我们需要安装一个systemd 的服务。
为此我创建了一个服务文件:
sudo pico /lib/systemd/system/touchpad-reset.service
带有以下文本:
[Unit] Description=Reset multitouch device after hibernate After=hibernate.target After=hybrid-sleep.target [Service] ExecStart=/bin/bash /etc/pm/sleep.d/20_touchpad_reset thaw [Install] WantedBy=hibernate.target WantedBy=hybrid-sleep.target
...然后我激活了我的新服务:
sudo systemctl 启用触摸板重置服务
您可以使用以下方法检查一切是否正常:
sudo systemctl status touchpad-reset.service
答案3
我的 Synaptics 触摸板也存在同样的问题HP Probook G6在 ubuntu 18.04 上睡眠后。解决方案与 V-Mark 建议的相同,但重新加载i2c_hid模块而不是hid_multitouch。
sudo rmmod i2c_hid
sudo modprobe i2c-hid
并且它开始顺利运行。
答案4
Systemctl 服务对我来说不起作用。它并不总是执行。所以我做了以下事情:
- 首先,你需要使用
lsmod | grep touch
或找到你的触摸板名称lsmod | grep mouse
,我的是psmouse
- 然后在终端中执行这两个命令后尝试鼠标是否工作正常
sudo rmmod your_device_name
sudo modprobe your_device_name
如果这两个命令有效,并且鼠标不再滞后,则可以将命令添加到在恢复后始终执行的文件中。 操作如下:
创建文件:
sudo nano /lib/systemd/system-sleep/touchpad-restart
把这个内容粘贴进去:
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
#you can add your own code there to test if the script is working
case "$1" in
pre)
;;
post)
rmmod your_device_name
modprobe your_device_name
;;
esac
exit 0
- 现在使脚本可执行
sudo chmod +x /lib/systemd/system-sleep/touchpad-restart
你完成了!
如果您想尝试脚本是否正常运行,可以尝试以下方法之一。
我们想测试一下脚本是否可以简单地执行,而无需休眠/唤醒序列。重新启动鼠标的部分只有在从睡眠状态唤醒后才会执行。要尝试在无需休眠/唤醒的情况下执行脚本,您可以在注释所在的第 3 行添加一行简单的代码。例如:
echo "Hello"
将在执行脚本的终端中打印“Hello”。要手动启动它,请输入:/lib/systemd/system-sleep/touchpad-restart
。测试完成后,不要忘记删除该命令。您还可以通过添加写入日志文件的命令来尝试脚本在唤醒后是否正常工作。为此,您需要在该
modprobe your_device_name
部分后添加一行,因为这是仅在唤醒后执行的部分。您可以写入临时日志文件或主目录。
对于主目录添加以下行:echo $(date) >> $HOME/log.txt
对于临时目录添加以下行:echo $(date) >> /tmp/log.txt
然后让计算机进入睡眠状态并唤醒它。如果一切正常,您应该会在日志文件中找到一行,其中包含当前日期。如果临时文件不起作用,则可能是权限问题,请改为写入您的主目录。
- 最后一种方法对初学者来说比较危险。如果你知道你可以修复错误,那就试试吧。删除
modprobe your_device_name
代码中的行。警告,这不会重新启动鼠标,并且它将停止响应。为了避免这个问题,我建议打开一个终端,其中已经存在你删除的行。唤醒后,如果你的鼠标不工作,则意味着命令rmmod your_device_name
正常工作。你可以在终端中按下 Enter 键并使用sudo modprobe your_device_name
准备好的命令来重新启动设备。