鼠标和触摸板按钮在挂起/休眠后改变功能

鼠标和触摸板按钮在挂起/休眠后改变功能

我有一台运行 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的配置文件。

我已经多次暂停并重新唤醒计算机,到目前为止每次都成功了。如果将来再次失败,我会编辑此问题和答案。

相关内容