问题描述
我在笔记本电脑上使用Ubuntu 14.04,通常使用外置USB鼠标,键盘和屏幕连接。然而,有时候,我拔掉所有这些并移动笔记本电脑并继续使用内置键盘和屏幕以及触摸板。
在随机时间,触摸板停止工作(但如果我插入USB鼠标,USB鼠标确实有效)。虽然这种情况很少发生,但当它发生这种情况时会非常烦恼,因为如果我需要触摸板再次工作,我将被迫重新启动。
是否有一些我可以尝试的解决方法,例如杀死一些会自动重启的进程,或者一些会导致触摸板驱动程序重启或刷新的命令?任何可能”wake up”触摸板而不必重启的东西?
最佳解决办法
我一直在用一台笔记本电脑遇到这个问题,直到我注意到那台电脑的触摸板有自己的On /Off开关,我一定是偶然打了。值得注意的是,该开关没有帮助将其重新打开。我只是小心翼翼地不按它,不久之后我开始使用带有集成无线触摸板的外置无线键盘,从那时起我就没有这个问题了。
更新:(注意:链接下面破解,解决方案在上面)自从发布此”solution”后,我发布了一条显然符合用户需求的评论。刚刚才知道评论只是暂时保留并自动删除,我将重新发布以下有用评论的内容,以便其他人可以保留:
我正在分享适合我的”solution”。今天我想到谷歌寻求更接近原始问题的解决方案,并找到以下链接。这不是我个人认为的”convenient”,但它至少可以通过使它成为一个脚本而更加优雅。 I found this (see below) – gyropyge 9月25日20:06
Press Alt+F2 and type in
gksudo modprobe -r psmouse
Type in the password, press Enter, and then press Alt+F2 again for entering the followinggksudo modprobe psmouse
and then press Enter
次佳解决办法
我找到了一种方法:
首先,打开终端,打印出所有输入设备,找到您要禁用的输入设备所需的ID。在终端中,键入:
xinput --list
下一步:注意每个输入设备的一个长列中的id = X.您想要找到与要禁用的输入设备对应的设备ID(可能听起来像”touchpad”)。然后使用表示要禁用的输入设备的id号替换以下命令中的X:
xinput disable X
注意:如果您不确定应该使用哪个设备ID来禁用触摸板,那么您可以通过测试随机ID并查看鼠标垫是否仍然有效来查找。确保您没有做任何重要事项。保存所有工作,并准备好重新启动计算机,如果您执行禁用键盘等操作。 (如果无法输入终端,可能无法再次启用它。
然后你必须运行这最后一行(感谢你抓住这个Arch Stanton!)
xinput enable X
原因:我迫切需要这个问题的答案,因为我用触摸板遇到的问题使得任何工作都无法完成。突然,在使用我的笔记本电脑的一些随机时刻,显然没有理由,我的触摸板进入某种”special mode”。仅仅在我的触摸板上移动一根手指就会导致屏幕滚动,而不是实际在屏幕上移动鼠标光标,因此如果没有相当大的协调努力来解释滚动屏幕,就不可能让鼠标悬停在broswer上的任何东西上和不动的鼠标。我想找到一种方法,在不重新启动笔记本电脑的情况下,重置触摸板。从好的方面来说,用上面的方法重置触摸板实际上解决了我的问题。
更新:为了更轻松地重置触摸板,我为上面列出的命令制作了一个热键。当我的触控板继续使用fritz时,我只需按下组合键ctrl + super + r,它就会为我重置。快捷方便。
这是如何做:
– 在主目录中创建一个文件,并将其命名为”touchpad-reset.sh”。
– 在此文件中,放入上面列出的三个(最后两个)上一个命令中的两个,除了使用设备的X id号码,因为它可能会随着添加的外围设备(可能??)而改变,你可以使用相反:
这是使用此命令在终端内的计算机输出:
xinput --list
结果:
Virtual core pointer id=2 [master pointer (3)]⎜
↳ Virtual core XTEST pointer id=4 [slave pointer (2)]⎜
↳ Genius 2.4G Wireless Mouse id=10 [slave pointer (2)]⎜
↳ MSFT0001:00 06CB:75BD UNKNOWN id=13 [slave pointer (2)]⎜
↳ ELAN Touchscreen id=12 [slave pointer (2)]⎜
– 你做了什么,你替换Xinput disable X和xinput enable X的X(这是之前的id),其名称对应于单引号内的id。例如,从上面开始,如果你想为我的触摸板设备id = 13做,你会使用:
xinput disable 'MSFT0001:00 06CB:75BD UNKNOWN'
xinput enable 'MSFT0001:00 06CB:75BD UNKNOWN'
– 现在,您将按名称而不是ID号禁用,其中ID可能会及时更改,然后您将禁用并启用其他设备。
最后,您需要授予使该文件可执行的权限;运行此命令,将终端中的工作目录作为主目录(创建文件的位置):
chmod +x your_script_name.sh
因此,一旦使用内部编写的相应命令创建此文件,确保它位于主目录中,请执行以下步骤:
-
按键盘上的超级键(PC上的Windows键)调出统一侧栏。输入’system settings’并按确认键。
-
在’Hardware’的位置找到’Keyboard’选项,然后单击它。
-
选择’Shortcuts’选项卡。
-
在左侧窗口中,选择’Custom Shortcuts’
-
单击底部中心附近的+按钮。
-
应该弹出一个窗口,要求输入描述名称和命令。
-
使名称类似于”reset touchpad”
-
使用此命令:gnome-terminal -x ./name_of_your_script.sh
-
点击’Apply’
-
您现在应该看到列出的快捷方式,并且在最右边它应该显示”Disabled”或其他一些垃圾。点击该文本并准备制作某种键组合,也许像ctrl + super + r。
-
完成此组合键后,您就完成了。
恭喜!玩得开心。
第三种解决办法
要重新启动笔记本电脑的触摸板驱动程序:
按Ctrl
+ Alt
+ T
打开终端并执行以下命令
sudo modprobe -r psmouse
然后
sudo modprobe psmouse
我找到了解决方案here,还有usb鼠标的解决方案
第四种办法
如果你不知道你的触摸板使用什么模块,你可以找到一些挖掘
grep -iA2 touchpad /proc/bus/input/devices
对我来说这回归
N: Name="Elan Touchpad"
P: Phys=
S: Sysfs=/devices/platform/80860F41:03/i2c-11/i2c-ELAN0100:00/input/input10
然后查看此类别中可用的内核模块:
ls $(find /lib/modules/$(uname -r) -type d -name mouse)
哪个对我来说
appletouch.ko bcm5974.ko cyapatp.ko elan_i2c.ko gpio_mouse.ko
psmouse.ko sermouse.ko synaptics_i2c.ko synaptics_usb.ko vsxxxaa.ko
交叉引用这两个 – 在我看来,我的触摸板的模块看起来像是elan_i2c.ko
编辑:我最近想出了如何通过一个复杂的命令可靠地获取驱动程序的名称,这对我来说很简单
grep -hriPo 'DRIVER=\K.+' /sys 2>/dev/null | while read driver; do [ -e /lib/modules/$(uname -r)/kernel/drivers/input/mouse/"$driver"* ] && echo $driver; done
要检查是否有正确的模块,请测试命令以从内核卸载它:
sudo modprobe -r elan_i2c
如果您使用了正确的模块,触摸板将立即死亡,因此您可以通过反复试验轻松找到它。用它重新加载
sudo modprobe elan_i2c
这有效地重启了模块。您可以像这样一起运行这两个命令:
sudo modprobe -r elan_i2c && sudo modprobe elan_i2c
我暂时不得不在暂停时恢复。
第五种办法
这对我有用的是[Zenbook ASUS UX501VW]:
sudo modprobe -r elan_i2c
sudo modprobe elan_i2c
我丢失的触摸板又回来了。
第六种办法
对我来说更容易的是,在内核中重新加载驱动程序。以下代码首先找到处理触摸板的内核驱动程序的名称,然后使用rmmod
卸载它并使用modprobe
重新加载它。请注意,您需要root才能运行这些命令,因此请先运行sudo su
。
> lsmod | grep touch
hid_multitouch 20480 0
> rmmod hid_multitouch
> modprobe hid_multitouch
第七种办法
如果你有一个synaptics触摸板:
synclient TouchpadOff=0
第八种办法
对我来说,在华硕ELAN1200的内核4.13.0-46上,它不是重新加载elan_i2c
而是hid-multitouch
驱动程序:
sudo modprobe -r hid-multitouch && sudo modprobe -r hid-multitouch