键盘在Ubuntu 16.04(Xenial Xerus)上停止工作


17

我的键盘无故停止工作。

在Windows主机(VirtualBox)上将Ubuntu用作虚拟机2.5年后,我终于大吃一惊,重新格式化了硬盘,并昨天用Ubuntu构建了系统。今天早上,我的键盘停止工作了。

我看到许多有关Ubuntu和USB键盘或鼠标停止随机运行的帖子。他们表示这是自动挂起,以关闭USB设备的电源以节省功率,并且当USB设备与某些设备不兼容时,USB不会像应有的那样“唤醒”。

我尝试了“ 修复USB自动暂停”中发布的建议。

但是没有运气。我还尝试了另一个建议,那就是不用键盘启动,然后在Ubuntu启动后将其插入。

以下是一些详细信息:

  • 过去两年中,我将相同的Kinesis键盘和Ubuntu用作虚拟机,没问题。
  • Kinesis具有宏,触发宏将在100%的时间内触发该问题。但是,当我也只是键入(没有宏)时,就会发生这种情况。
  • 我刚才在笔记本电脑上尝试过Kinesis。这是一台使用一年的计算机,我在两周前将Ubuntu 16.04投入使用。使用Kinesis键盘宏不会重现该问题。

问题机器

  • Dell XPS,6岁,台式机
  • 昨天安装了Ubuntu 16.04
  • 使用Kinesis Advantage USB键盘
  • 拔出/重新插入键盘的操作十分有效,十分之九
  • 重新启动也可以
  • 我不认为这是USB电源问题,因为键盘上的LED指示灯保持点亮并且其他USB设备继续工作。
  • 我的机器同时连接了USB和蓝牙鼠标。即使在Kinesis停止时,两者仍可继续工作。
  • 通常,我为需要使用我的计算机的非Kinesis人员插入了第二个戴尔品牌的常规键盘。今天早些时候,每次Kinesis停止工作时,此键盘都停止工作。但是,现在,通过宏触发问题后,Dell键盘仍可正常工作。

我已经有8年了,Kinesis使我可以继续使用键盘。如果我无法解决此问题,则必须回到Windows,这真是太可惜了。

任何有关尝试的方法或调试方法的建议,将不胜感激。

我正在研究USB驱动程序,在Linux上我一无所知。但是,我发现笔记本电脑同时具有USB 2.0和3.0端口。台式机(出现问题)仅USB 2.0。还在挖...


在过去的两年中,我将相同的Kinesis键盘和Ubuntu用作虚拟机,没问题。您是否确实将键盘移交给了虚拟机?否则,它将通过主机OS和VirtualBox的驱动程序。
Melebius

3年以来,我将Ubuntu用作具有Windows主机的VM,并且键盘没有问题。现在主机是Ubuntu GNOME,来宾也是Ubuntu GNOME,我遇到了这个问题。
klequis '16

然后,您没有在来宾操作系统中使用物理键盘。默认情况下,Virtualbox向来宾操作系统提供虚拟键盘。(因此,使用相同的物理键盘并不重要,因为它并不相同)
karatedog

看到这个类似的问题:askubuntu.com/questions/688445/laptop-keyboard-stopped-working安装包xserver-xorg-input-all为我工作,当我升级到Ubuntu 17.04
LILAS

Answers:


7

我在Ubuntu 16.04(Xenial Xerus)上遇到了同样的问题,并搜索了很多解决方案...

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

语境

我极力对我在网上找到的每个提示进行了不成功的测试,每次尝试后都会重新启动:

  • '/ etc / default / grub'内核引导usbcore.autosuspend=-1参数
  • 笔记本电脑模式的'runtime-pm.conf' CONTROL_RUNTIME_AUTOSUSPEND=0
  • 从“ /etc/laptop-mode/laptop-mode.conf”文件中完全禁用笔记本电脑模式工具,从而确认问题与该内核功能无关。为了确定,我已经检查过laptop_mode不再运行的不同方式。(参考:man laptop-mode.confman laptop_mode
  • 我已经阅读了有关'/etc/laptop-mode/conf.d/usb-autosuspend.conf'的一些技巧,但是在我的带有笔记本电脑模式工具v1.68的Ubuntu 16.04版本中该文件不存在
  • powertop应用程序卸载。通常在论坛中怀疑它会导致自动挂起问题,今天我知道这对我来说不是真的,因为卸载它并不能解决任何问题。
  • options usbcore autosuspend=1 '/etc/modprobe.d/usb.conf'中的效率也很低
  • Gentoo官方Wiki提供的'/etc/udev/rules.d/60-power.rules'脚本
  • Serge Y.推荐的“ /etc/udev/rules.d/usb-power.rules” 设备专用rules文件udev。Stroobandt

阅读了所有这些技术资料后,我只明白原因与我的'/ sys / module / usbcore / parameters / autosuspend'值停留两秒钟有关,无论我对配置进行了什么更改。您可以使用以下cat命令进行检查:

$ cat /sys/module/usbcore/parameters/autosuspend
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的评论,我已经学会了如何仅对鼠标禁用自动暂停。但是当然我的第一次尝试失败了bash: Permission denied error,因此我必须等待对我的root / sudo混乱的理解,然后echo -1Alex提出的命令才能生效。

我还找到了一种更好的方式,以root用户身份执行命令而无需以root用户身份登录。在Ubuntu的官方RootSudo Wiki页面上很好地解释了root shell和root命令用法之间的区别。我喜欢学习这些东西,但是,嘿!为什么必须始终以痛苦的方式来学习它?大声笑

天哪,这真是一件令人头疼的事,而且像我这样的菜鸟花了很多​​时间才能理解,因为我通常会说“没有大脑就没收获”。矿井显然需要更多的培训。

因此,让我们停止谈论自己,去解决它!请在下面继续...


我强烈建议您为闲置的外部HDD提供第二种解决方案,以免耗尽笔记本电池的电量。但是我给你两种解决方案,因为谁爱他/她自己的自由,谁也应该爱对方自由:)

解决方案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. 并将echo -1命令放在exit 0行之前的“ /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/n-n/power。什么n-n是给定设备需要一些操作找出来,但它并不复杂。下面的示例显示了我如何确定无线鼠标接收器的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

    **Note:** this trick concerns the USB port ID, not a device ID. For example, if I plug my mouse to the next USB port, it becomes identified as `usb 3-2` in the `dmesg` result. But this solution #2 remains very useful if you take the habit to always plug your mice or keyboard to the same port, and it's generally what people use to do unconsciously ;)
    
  2. 在终端中执行以下命令,将您的端口号更改3-1为您在自己的dmesg结果中找到的端口号:

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

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

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

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

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

        #!/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. 重启你的电脑

重要说明:sudo sh -c如果在桌面环境已经启动的情况下断开/重新连接USB设备,即使您将其重新插入同一USB插头,也不要忘记必须再次手动执行“临时”命令。正常,只是因为'/etc/rc.local'文件在系统启动时仅被调用一次。

无论如何,解决方法是可能的。技术水平更高的人可能拥有更聪明的方法,但是我已经在Ubuntu中配置了特定于端口的别名。如果必须在此处或此处拔出/重新插入我的USB设备,它可以选择性地使用简单命令usb1usb2命令。你也是!您也可以创建命令别名以使用短单词播放,而不用键入完整的命令。不到两分钟即可轻松设置,并且还可以与Alt+ F2:)一起使用

我们也欢迎更多使之变得容易的想法。


谢谢你的回答。不幸的是,我无法测试以确认这是答案。因此,不确定是否应将其标记为答案。
klequis

我试过了,在Ubuntu 16.0.4.2 VirtualBox 5.1.26上没有帮助
Pavlo

1

我遇到了完全相同的问题(Kinesis键盘在重新启动后停止工作)。

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

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

使用较旧的4.4.0-31内核启动对我来说解决了这个问题。

这篇文章包含有关如何使用较早版本的内核进行引导的说明(允许您查看较早版本的内核是否为您完成了窍门)。


我的新构建的计算机很可能具有比我使用的虚拟机更新的内核。但是,我的问题不是键盘在重新启动后就停止工作了,在我运行宏之前,它可以正常工作,然后将其关闭。我对宏的大部分使用是通用的编程键。我现在使用Atom编辑器,它的快捷方式/自动类型(无论他们怎么称呼)都可以满足我的大部分需求,因此我对此感到很满意。
klequis

0

如果有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

我还注意到了
安东尼奥·麦地那

不是笔记本电脑,我学会了没有笔记本电脑,但是感谢您的建议。
klequis

笔记本电脑模式工具是否在运行与系统是否为笔记本电脑无关。我一直插在墙上的A / C服务器上运行它,并在/etc/laptop-mode/conf.d/runtime-pm.conf文件中设置AUTOSUSPEND_TIMEOUT = -1最终为我解决了问题自从我从14.04更新到16.04以来一直如此。
Rezty Felty

0

我有同样的问题。对我来说,解决方案很简单,而实际原因却不得而知。

昨天,我将第二只鼠标插入了我的电脑。一切正常。今天,当我启动时,键盘在登录屏幕或桌面上不起作用。它在启动期间起作用,例如,我进入了BIOS。

拔下新鼠标并重新插入所有USB线后,键盘开始工作。


它可能是USB设备的总数(最多两个)。我有这样的系统。它可能与USB端口的类型(USB 2与USB 3)有关,也可能与无关。不幸的是,我在BIOS中没有太多选择可以解决此问题。
彼得·莫滕森


0

在过去的一年中,我已经一遍又一遍地阅读了这份报告和其他报告,最后只是放弃了使用会引起问题的键盘,而改用了无线键盘。

直到让我惊讶的是,问题在我构建新PC的那一刻就开始出现了,这可能是电源问题。所以我买了一个有源的 USB集线器来连接键盘。它解决了问题!毕竟这不是软件问题,但是显然我的新计算机的USB输出功率不足(或者我的键盘认为)。

如果您遇到如上所述的间歇性键盘故障,而软件方面没有任何作用,则可能值得尝试。有源USB集线器不需要很昂贵。


或USB端口上是否有电流限制?例如100 mA
彼得·莫滕森

0

这不是我一直在寻找的答案,但是...我花了两天很多时间试图解决这个问题。我购买了PCIe USB 3.0集线器,看是否可以使用-没用。

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

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

我从重置USB子系统中学到了很多有关USB的知识。


我大约3个月前购买了Kinesis Advantage2。只需穿上10码即可。它工作正常。没有在本期中讨论该问题。
klequis

代码段(文本模板)非常有用,但是它们不能控制键组合,只能控制纯文本(?)。例如Shift + Ctrl + Tab(用于在Firefox中移至左侧的下一个标签)不能放入摘要
Peter Mortensen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.