我有一台运行 Ubuntu 16.04 的联想 Ideapad Y560 笔记本电脑。启动时触摸板和 USB 鼠标都可以正常工作。
暂停后,鼠标按钮的工作方式不同且不稳定。触摸板按钮和 USB 鼠标按钮都是如此。最值得注意的是,左键无法选择打开的窗口,无法关闭 Google Chrome 中的标签页,但仍可以打开屏幕左侧 Unity Desktop Dock 中的应用程序。鼠标指针的移动对于鼠标和触摸板来说仍然正常。
我的问题是:知道发生了什么事,或者如何解决吗?
其他信息:
这台笔记本电脑有一个 i8042 控制器,据我所知,它在 Linux 上有时会出现问题。
以下是输出dmesg | grep i8042
[ 1.028910] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2P] at 0x60,0x64 irq 1,12
[ 1.062759] i8042: Detected active multiplexing controller, rev 1.1
[ 1.076908] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 1.076919] serio: i8042 AUX0 port at 0x60,0x64 irq 12
[ 1.076989] serio: i8042 AUX1 port at 0x60,0x64 irq 12
[ 1.077044] serio: i8042 AUX2 port at 0x60,0x64 irq 12
[ 1.077097] serio: i8042 AUX3 port at 0x60,0x64 irq 12
[ 1.147924] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[ 2.824853] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input10
[ 4.455565] input: PS/2 Generic Mouse as /devices/platform/i8042/serio3/input/input16
我尝试过一些方法,但没有效果:
来自这篇文章,将可执行 shell 脚本放入 /etc/pm/sleep.d/ 目录中,该脚本在挂起时解除控制器的绑定,并在唤醒时重新绑定。这似乎没有起到任何作用。
从这个帖子和这个帖子,向内核的启动选项中添加不同的选项来配置 i8042。我尝试将 i8042.reset i8042.nopnp i8042.direct i8042.dumbkbd i8042.nomux i8042.noloop 添加到文件 /etc/default/grub 中的“GRUB_CMDLINE_LINUX_DEFAULT”属性中,并分别尝试了每个方法。其中几个方法确实有效,但导致了另一个问题:它们在挂起后修复了鼠标按钮,但完全禁用了触摸板。这并不理想,因为我并不总是使用 USB 鼠标。
输出xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=11 [slave pointer (2)]
⎜ ↳ PS/2 Generic Mouse id=15 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=16 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Power Button id=9 [slave keyboard (3)]
↳ Sleep Button id=10 [slave keyboard (3)]
↳ Lenovo EasyCamera id=12 [slave keyboard (3)]
↳ Ideapad extra buttons id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
输出synclient | grep Touchpad
TouchpadOff = 2
如果有帮助的话:
使用sudo synclient TouchpadOff=0
成功将 TouchpadOff 的值从 2 更改为 0。但是,单击鼠标或触摸板按钮一次后,它会立即变回 2。
答案1
在再次尝试所有方法时,我似乎找到了一个可行的内核指令组合。我曾尝试过所有 6 或 7 个指令,也曾单独尝试过每个指令,但就是没有尝试过这个特定的三个参数组合。
我只添加了以下三个:
i8042.noloop i8042.nopnp i8042.reset
到线
GRUB_CMDLINE_LINUX_DEFAULT=""
在文件中:/etc/default/grub
然后运行sudo update-grub
更新grub2的配置文件。
我已经多次暂停并重新唤醒计算机,到目前为止每次都成功了。如果将来再次失败,我会编辑此问题和答案。