键盘停止工作Ubuntu 16.04

我的键盘没有明显的原因停止工作。

在Windows主机(虚拟机)上使用Ubuntu作为虚拟机2。5年后,我终于采取了措施,重新格式化了我的硬盘,并在昨天使用Ubuntu构建了系统。 今天早上我的键盘停止了工作。

我看到很多关于Ubuntu和USB键盘或鼠标停止随机工作的post。 它们表明Autosuspend关闭了USB设备的电源以节省电力,当USB设备与某些设备不兼容时,USB不会“唤醒”它应该。

我尝试在此链接中发布的建议

但没有运气。 我还尝试了另一个建议,即在没有键盘的情况下启动,然后在Ubuntu启动后将其插入。

这是一些细节

  • 在过去的两年里,我使用与Ubuntu相同的Kinesis键盘作为虚拟机,没问题。
  • Kinesis有宏并触发宏在100%的时间触发问题。 但是,当我只是打字(没有宏)时会发生这种情况。
  • 刚才在笔记本电脑上试过Kinesis。 这是一台1年的机器,我在2周前放了Ubuntu 16.04。 使用Kinesis键盘宏没有重现问题。

问题机器

  • 戴尔XPS,6岁,桌面
  • 昨天安装了Ubuntu 16.04
  • 使用Kinesis Advantage USB键盘
  • 拔掉/重新插入键盘已经完成了10次中的9次
  • 重新启动也可以
  • 我不认为这是USB电源问题,因为键盘上的LED保持亮起,其他USB设备继续工作。
  • 我有一个USB和蓝牙鼠标连接到机器上。 即使在Kinesis停止时,两者都能继续工作。
  • 我通常会为需要使用我的电脑的非Kinesis人员安装第二个常规戴尔品牌键盘。 今天早些时候,每当Kinesis停止工作时,这个键盘就停止了工作。 但是现在,通过宏触发问题,戴尔键盘继续工作。

Kinesis,我已经有8年了,这使我有可能保持键盘输入。 如果我无法解决这个问题,我将不得不回到Windoze这将是一个真正的无赖。

任何关于尝试的事情或如何调试此事的建议都非常感激。

编辑:我深入研究USB驱动程序,这在Linux上我一无所知。 但是,我发现笔记本电脑有USB 2.0和3.0端口。 桌面(有问题)仅限USB 2.0。 还在挖……

我在Xenial 16.04上遇到了同样的问题并且搜索了很多任何解决方案……为了唤醒设备而不断移动我的鼠标光标非常烦人。 在紧张的危机附近,我正在放弃并重新安装或更换发行版的路上。 但我终于找到了解决我问题的唯一方法,而且它似乎与你的问题完全一样,klequis。

如果您不关心上下文故事, 解决方案就在本答案的最后上下文可能看起来像无用的blabla(也许是),但我认为它可以帮助读者检查我在PC上解决的问题是否与他们的问题相同。

CONTEXT

我在网上找到的每一个技巧附近都拼命测试失败 ,每次尝试后重新启动:

  • ‘/ etc / default / grub’内核启动usbcore.autosuspend=-1参数
  • laptop-mode的’runtime-pm.conf’CONTROL_RUNTIME_AUTOSUSPEND CONTROL_RUNTIME_AUTOSUSPEND=0
  • 从’/etc/laptop-mode/laptop-mode.conf’文件中完全禁用笔记本电脑模式工具,确认问题与此内核function无关,我已经检查了laptop_mode不再运行的不同方式当然。 (参考: man laptop-mode.confman laptop_mode
  • 我已经阅读了一些关于’/etc/laptop-mode/conf.d/usb-autosuspend.conf’的技巧但是我的Ubuntu 16.04版本中没有这个文件,带有笔记本电脑模式工具v1.68
  • powertop app卸载,它常常在论坛中被怀疑导致自动暂停问题,今天我知道在我的情况下这不是真的因为卸载它没有解决任何问题
  • ‘/etc/modprobe.d/usb.conf’中的options usbcore autosuspend=1也效率低下
  • ‘/etc/udev/rules.d/60-power.rules’脚本由Gentoo官方Wiki提供
  • Serge Y. Stroobandt推荐的udev ‘/etc/ udev rules.d/usb-power.rules’的设备特定rules文件

在阅读了所有这些技术资料后,我才明白原因与我的’/ sys / module / usbcore / parameters / autosuspend’值相关,无论我对配置做了什么改变,都会在2秒内停留。 你可以用cat命令检查它:

 $ cat /sys/module/usbcore/parameters/autosuspend 2 

是的,我的鼠标在2秒后完全禁用,所以我知道我的方法是正确的。 当然我已经测试了我在这里和那里看过的echo -1命令, -1意图禁用自动挂起…但是:

 sudo echo -1 > sys/module/usbcore/parameters/autosuspend bash: /sys/module/usbcore/parameters/autosuspend: Permission denied 

我不明白为什么即使在sudo模式下也拒绝了许可。 我没有尝试root,因为我不认为这可能是一个问题。 这是错误:(

感谢Alex Dekker和Bryce的评论 ,我已经学会了如何仅为我的鼠标禁用自动hover。 但当然我的第一次尝试失败了这个bash: Permission denied error所以我不得不等待理解我的root / sudo混乱之前Alex建议的echo -1命令最终工作。

我还发现了一种更好的方式以root用户身份执行命令而无需以root用户身份登录,root shell和root命令用法之间的区别在官方Ubuntu的RootSudo wiki页面中得到了很好的解释。 我喜欢学习这些东西但是嘿! 为什么总是要学习痛苦的方式呢? 大声笑

OMG这是一个真正的头痛,像我这样的菜鸟花了很多​​时间来理解,正如我通常所说的“没有大脑没有收获”。 我的明显需要更多的培训。

所以,让我们停止谈论自己并解决它! 请继续下面……


我强烈建议你的闲置外置硬盘的第二个解决方案 ,不要浪费你的笔记本电池电池。 但我给你们两个解决方案,因为谁爱自己的自由也应该彼此相爱自由:)

解决方案1

禁用每个USB设备/端口上的自动挂起

  1. 打开终端并执行:

     sudo sh -c "echo -1 > /sys/module/usbcore/parameters/autosuspend" 
  2. 这确实是一个临时解决方案,允许您立即测试此命令是否修复了鼠标或键盘自动挂起问题
  3. 如果你的USB设备现在工作正常,只需编辑’/etc/rc.local’脚本,这样它就会在系统启动时运行该命令。 这样你就可以使修复成为永久性的 。 编辑文件,例如使用nano:

     sudo nano /etc/rc.local 
  4. 并在exit 0行之前将echo -1命令放在’/etc/rc.local’文件中

     #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. (...) # By default this script does nothing. echo -1 > /sys/module/usbcore/parameters/autosuspend exit 0 
  5. 重启你的电脑

(请查看最后的重要说明)

解决方案2

禁用特定USB设备/端口的自动挂起

  1. USB设备的电源选项位于/sys/bus/usb/devices/nn/power 。 对于给定设备而言,需要一些操作才能找到,但这并不复杂。 下面的示例显示了我如何确定无线鼠标接收器的USB端口号为3-1 ,因此请根据您自己的情况进行调整:

    • 拔下USB设备,打开终端并执行sudo dmesg命令

    • 将USB设备连接回来,然后在终端再次执行sudo dmesg以检查更改

    • 以下是将鼠标插回插槽后,我的dmesg命令输出的结束:

       [40208.575249] usb 3-1: new full-speed USB device number 8 using xhci_hcd [40208.705233] usb 3-1: New USB device found, idVendor=062a, idProduct=4102 [40208.705240] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [40208.705245] usb 3-1: Product: 2.4G Wireless Mouse [40208.705248] usb 3-1: Manufacturer: MOSART Semi. [40208.707679] input: MOSART Semi. 2.4G Wireless Mouse as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0/0003:062A:4102.0007/input/input24 [40208.763946] hid-generic 0003:062A:4102.0007: input,hiddev0,hidraw0: USB HID v1.10 Mouse [MOSART Semi. 2.4G Wireless Mouse] on usb-0000:00:14.0-1/input0 

      现在我们可以看到USB设备插入的端口被识别为usb 3-1

      注意:此技巧涉及USB端口ID,而不是设备ID。 例如,如果我将鼠标插入下一个USB端口,则会在dmesg结果中将其标识为usb 3-2 。 但是如果你习惯于将鼠标或键盘插到同一个端口,这个解决方案#2仍然非常有用,而且这通常是人们无意识地使用的;)

  2. 在终端中执行以下命令,将您的端口号3-1更改为您在自己的dmesg结果中找到的端口号:

     sudo sh -c "echo -1 > /sys/bus/usb/devices/3-1/power/autosuspend_delay_ms" 

    请注意,根据Linux官方文档 , autosuspend_delay_ms已经取代了自内核版本2.6.38以来已弃用的自动autosuspend

  3. 这确实是一个临时解决方案,但您现在可以轻松测试此命令是否修复了鼠标或键盘自动悬浮问题

  4. 如果你的USB设备现在工作正常,只需编辑你的’/etc/rc.local’脚本,这样它就会在系统启动时运行该命令。 这样你就可以使修复成为永久性的 。 编辑文件,例如使用nano:

     sudo nano /etc/rc.local 
  5. 并在exit 0行之前将echo -1命令放在’/etc/rc.local’文件中,再次不要忘记在命令中更改端口号nn

      #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. (...) # By default this script does nothing. echo -1 > /sys/bus/usb/devices/3-1/power/autosuspend_delay_ms exit 0 
  6. 重启你的电脑

重要提示:不要忘记,如果在桌面环境已经启动时断开/重新连接USB设备,则必须再次手动执行sudo sh -c “temporary”命令,即使您将其插回同一USB插头。 正常,只是因为’/etc/rc.local’文件在系统启动时只调用一次。

无论如何,解决方法是可能的。 更好的技术人员可能有更聪明的方法,但我在Ubuntu中配置了端口特定的别名。 如果我必须在这里或那里拔掉/重新插入我的USB设备,它允许我有选择地使用简单的usb1usb2命令。 你也是! 你也可以创建一个命令别名来玩短字而不是输入完整的命令,它很容易在不到2分钟的时间内设置,也适用于Alt + F2 🙂

更容易实现的更多想法也将受到欢迎。

干杯:)

我有完全相同的问题(Kinesis键盘,重启后停止工作)。

我最终发现它与内核升级有关

  • 在重新启动之前,我在版本4.4.0-31-通用
  • 重新启动后它是4.4.0-38-generic

使用旧的4.4.0-31内核启动修复了我的问题。

这篇文章包含了如何使用旧内核启动的说明(允许您查看较旧的内核是否适合您)。

这不是我想要的答案,但是…我花了2天/很多小时试图解决这个问题。 我购买了一个PCIe USB 3.0集线器,看看它是否可行 – 它不是。

我的结论是,这个问题不值得解决,并且有更好的方法来达到同样目的。

我的解决方案/解决方法是依靠我的文本编辑器的片段function。 这意味着我将投资并更多地依赖于特定的编辑器(最有可能是Atom),但这比使用键盘宏更好,因为片段比键盘宏更易于维护。

我从这篇文章中学到了很多关于USB的知识。

如果您有laptop-mode-tools ,可以通过更改以下内容来完全禁用USB自动暂停:

 AUTOSUSPEND_TIMEOUT=2 

 /etc/laptop-mode/conf.d/runtime-pm.conf 

 AUTOSUSPEND_TIMEOUT=-1 

请注意,此文件中有一个注释选项

 untime-pm.conf:# Example: AUTOSUSPEND_DEVID_BLACKLIST="usbhid usb-storage" 

如果要微调电源管理设置,可以尝试使用此选项。

笔记:

  • usbcore被编译到内核中。
  • 使用systemd
  • Ubuntu 16.10
  • Linux内核4.8.0-41-通用#44-Ubuntu