语境

语境

我的键盘无缘无故停止工作。

在 Windows 主机上将 Ubuntu 作为虚拟机使用了 2.5 年后(虚拟盒)我终于下定决心,昨天重新格式化硬盘,用 Ubuntu 构建系统。今天早上我的键盘停止工作了。

我看到很多关于 Ubuntu 和 USB 键盘或鼠标随机停止工作的帖子。它们表示,这是自动暂停,关闭 USB 设备的电源以节省电量,并且当 USB 设备在某些方面不兼容时,USB 不会像它应该的那样“唤醒”。

我尝试了发布在修复 USB 自动暂停

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

以下是一些详细信息:

  • 我过去两年一直使用同一个 Kinesis 键盘和 Ubuntu 作为虚拟机,没有问题。
  • Kinesis 有宏,触发宏 100% 会引发问题。不过,当我只是打字(没有宏)时也会发生这种情况。
  • 我刚刚在一台笔记本电脑上试用了 Kinesis。这是一台使用了一年的机器,两周前我在上面安装了 Ubuntu 16.04。使用 Kinesis 键盘宏不是重现该问题。

问题机器

  • 戴尔 XPS,6 年,台式机
  • 昨天安装了 Ubuntu 16.04
  • 使用 Kinesis Advantage USB 键盘
  • 拔下/重新插入键盘 10 次中有 9 次都有效
  • 重启也有效
  • 我认为这不是 USB 电源问题,因为键盘上的 LED 保持亮起并且其他 USB 设备继续工作。
  • 我在机器上连接了 USB 和蓝牙鼠标。即使 Kinesis 停止,两者仍可继续工作。
  • 我通常会为需要使用我的电脑的非 Kinesis 用户插入第二个常规戴尔品牌键盘。今天早些时候,每次 Kinesis 停止工作时,这个键盘也会停止工作。但是现在,通过宏触发问题后,戴尔键盘仍能正常工作。

我已经使用 Kinesis 8 年了,它让我可以继续使用键盘。如果我不能解决这个问题,我就不得不回到 Windows,这真是太糟糕了。

对于要尝试的事情或调试方法的任何建议都将不胜感激。

我正在研究 USB 驱动程序,在 Linux 上我对此一无所知。但是,我发现笔记本电脑有 USB 2.0 和 3.0 端口。台式机(有问题)只有 USB 2.0。仍在研究...

答案1

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

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

语境

我迫切地不成功测试了几乎所有在网上找到的技巧,每次尝试后都重新启动:

  • ‘/etc/default/grub’ 内核启动usbcore.autosuspend=-1参数
  • 笔记本电脑模式的“runtime-pm.conf”CONTROL_RUNTIME_AUTOSUSPEND=0
  • 从“/etc/laptop-mode/laptop-mode.conf”文件中完全禁用笔记本电脑模式工具,确认问题与此内核功能无关。我检查了不同的方法laptop_mode不再运行。(参考:man laptop-mode.conf& man laptop_mode
  • 我已经阅读了一些有关“/etc/laptop-mode/conf.d/usb-autosuspend.conf”的技巧,但是这个文件在我的 Ubuntu 16.04 版本和 laptop-mode-tools v1.68 中不存在
  • 动力顶应用程序卸载。论坛上经常有人怀疑它会导致自动暂停问题,今天我知道,在我的情况下,情况并非如此,因为卸载它并没有解决任何问题。
  • options usbcore autosuspend=1在'/etc/modprobe.d/usb.conf'中效率也很低
  • '/etc/udev/rules.d/60-power.rules' 脚本由Gentoo 官方 Wiki
  • 推荐的设备专用rules文件‘/etc/udev/rules.d/usb-power.rules’udevSerge Y. 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 shell 和 root 命令用法之间的区别在 Ubuntu 官方的RootSudo 维基页面。我喜欢学习这类东西,但是嘿!为什么总是要通过痛苦的方式来学习呢?哈哈

天哪,这真是令人头痛,像我这样的菜鸟花了很长时间才理解,正如我常说的“无脑无收获”。我显然需要更多的训练。

所以,我们别再谈论自己了,赶紧去改正吧!请继续阅读...


我强烈推荐第二种解决方案让您的闲置外置硬盘不会白白耗尽您的笔记本电脑电池。但我为您提供两种解决方案,因为热爱自己自由的人也应该热爱彼此的自由 :)

解决方案 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命令放在“/etc/rc.local”文件中的exit 0以下行之前

    #!/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/powern-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"
    

    注意,根据内核版本 2.6.38 的autosuspend_delay_ms规定,autosuspendLinux 官方文档

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

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

    sudo nano /etc/rc.local
    
  5. 并将echo -1命令放在“/etc/rc.local”文件中的行前,再次不要忘记在命令中exit 0更改端口号: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. 重启你的电脑

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

无论如何,解决方法是可能的。技术更好的人可能有更聪明的方法,但我在 Ubuntu 中配置了特定于端口的别名。如果我必须在这里或那里拔出/重新插入我的 USB 设备,它允许我选择性地使用简单usb1usb2命令。你也一样!你也可以创建命令别名使用简短的单词来玩,而不是输入完整的命令。只需不到两分钟即可轻松设置,并且还可以与Alt+一起使用F2:)

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

答案2

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

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

  • 重启之前我使用的是 4.4.0-31-generic 版本
  • 重启后版本为 4.4.0-38-generic

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

这个帖子包括如何使用旧内核进行启动的说明(允许您查看旧内核是否能为您解决问题)。

答案3

如果有的话,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

答案4

在过去的一年里,我反复阅读了这篇和其他报告,最终放弃使用出现问题的键盘,改用无线键盘。

直到我突然意识到这个问题是在我买了一台新电脑的时候开始的,可能是电源问题。所以我买了一台供电USB 集线器用于连接键盘。它解决了问题!毕竟这不是软件问题,但显然我的新电脑的 USB 输出功率不足(或者我的键盘是这么认为的)。

如果您遇到上述间歇性键盘故障,并且软件方面没有任何效果,那么这可能值得一试。有源 USB 集线器不需要昂贵。

相关内容