我在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.conf
&man 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 -1
Alex提出的命令才能生效。
我还找到了一种更好的方式,以root用户身份执行命令而无需以root用户身份登录。在Ubuntu的官方RootSudo Wiki页面上很好地解释了root shell和root命令用法之间的区别。我喜欢学习这些东西,但是,嘿!为什么必须始终以痛苦的方式来学习它?大声笑
天哪,这真是一件令人头疼的事,而且像我这样的菜鸟花了很多时间才能理解,因为我通常会说“没有大脑就没收获”。矿井显然需要更多的培训。
因此,让我们停止谈论自己,去解决它!请在下面继续...
我强烈建议您为闲置的外部HDD提供第二种解决方案,以免耗尽笔记本电池的电量。但是我给你两种解决方案,因为谁爱他/她自己的自由,谁也应该爱对方自由:)
解决方案1
禁用每个USB设备/端口上的自动挂起
打开终端并执行:
sudo sh -c "echo -1 > /sys/module/usbcore/parameters/autosuspend"
这确实是一个临时解决方案,它使您可以立即测试此命令是否解决了鼠标或键盘的自动挂起问题。
如果您的USB设备现在可以正常工作,只需编辑您的'/etc/rc.local'脚本,以便在系统启动时它将运行该命令。这样,您就可以使修复永久化。编辑文件,例如使用nano:
sudo nano /etc/rc.local
并将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
重启你的电脑
(请检查最后的重要说明。)
。
解决方案2
禁用特定USB设备/端口的自动挂起
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 ;)
在终端中执行以下命令,将您的端口号更改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
了该版本。
这确实是一个临时解决方案,但是您现在可以轻松测试此命令是否解决了鼠标或键盘的自动挂起问题。
如果您的USB设备现在可以正常工作,只需编辑您的'/etc/rc.local'脚本,以便在系统启动时它将运行该命令。这样,您就可以使修复永久化。编辑文件,例如使用nano:
sudo nano /etc/rc.local
并将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
重启你的电脑
。
重要说明:sudo sh -c
如果在桌面环境已经启动的情况下断开/重新连接USB设备,即使您将其重新插入同一USB插头,也不要忘记必须再次手动执行“临时”命令。正常,只是因为'/etc/rc.local'文件在系统启动时仅被调用一次。
无论如何,解决方法是可能的。技术水平更高的人可能拥有更聪明的方法,但是我已经在Ubuntu中配置了特定于端口的别名。如果必须在此处或此处拔出/重新插入我的USB设备,它可以选择性地使用简单命令usb1
或usb2
命令。你也是!您也可以创建命令别名以使用短单词播放,而不用键入完整的命令。不到两分钟即可轻松设置,并且还可以与Alt+ F2:)一起使用
我们也欢迎更多使之变得容易的想法。