У меня была такая же проблема с 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
- удаление приложения powertop . На форумах часто подозревают проблемы с автоподвеской, и сегодня я знаю, что в моем случае это было не так, поскольку удаление не помогло.
options usbcore autosuspend=1
в /etc/modprobe.d/usb.conf тоже был неэффективен
- Сценарий '/etc/udev/rules.d/60-power.rules', предоставленный официальной вики Gentoo
- специфичный
rules
для устройства файл для udev
/etc/udev/rules.d/usb-power.rules, рекомендованный Сержом 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, потому что просто не думал, что это может быть проблемой. Здесь была ошибка :(
Благодаря комментариям Алекса Деккера и Брайса , я узнал, как отключить автоподвеску только для моей мыши. Но, конечно же, мои первые попытки потерпели неудачу с этим bash: Permission denied error
, поэтому мне пришлось подождать понимания моей путаницы root / sudo, прежде чем echo -1
команда, предложенная Алексом, наконец сработает.
Я также нашел лучший способ выполнить команду как пользователь root без входа в систему как root. Разница между использованием командной оболочки и корневых команд хорошо объяснена на официальной вики-странице Ubuntu RootSudo . Я люблю учиться таким вещам, но эй! Почему его всегда нужно выучить болевым путем? лол
О, Боже, это была настоящая головная боль, и нубу, подобному мне, потребовалось много времени, чтобы понять, как я обычно говорю: «нет мозга - нет выгоды». Моя явно нуждается в большем обучении.
Так что давайте перестанем говорить о себе и пойдем исправлять это! Пожалуйста, продолжайте ниже ...
Я настоятельно рекомендую второе решение для неработающего внешнего жесткого диска, чтобы не разряжать аккумулятор ноутбука. Но я даю вам оба решения, потому что те, кто любит свою свободу, должны любить друг друга тоже :)
РЕШЕНИЕ 1
Чтобы отключить автоподключение на всех USB-устройствах / портах
Откройте Терминал и выполните:
sudo sh -c "echo -1 > /sys/module/usbcore/parameters/autosuspend"
Это действительно временное решение, которое позволяет вам мгновенно проверить, исправляет ли эта команда проблему с автоподвеской мыши или клавиатуры.
Если ваше устройство USB работает нормально, просто отредактируйте ваш скрипт /etc/rc.local, чтобы он запускал эту команду при каждой загрузке системы. Таким образом, вы сделаете исправление постоянным . Отредактируйте файл, например, с помощью nano:
sudo nano /etc/rc.local
и поместите 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
Перезагрузите компьютер
(Пожалуйста, проверьте Важное примечание в конце.)
,
РЕШЕНИЕ 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"
Обратите внимание, что autosuspend_delay_ms
заменено устаревшим autosuspend
с версии ядра 2.6.38, согласно официальной документации Linux .
Это действительно временное решение, но теперь вы можете легко проверить, исправила ли эта команда проблему с автоподвеской мыши или клавиатуры.
Если ваше USB-устройство теперь работает нормально, просто отредактируйте ваш скрипт /etc/rc.local, чтобы он запускал эту команду при каждой загрузке системы. Таким образом, вы сделаете исправление постоянным . Отредактируйте файл, например, с помощью nano:
sudo nano /etc/rc.local
и поместите 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
Перезагрузите компьютер
,
Важно: не забывайте, что вам придется снова выполнять sudo sh -c
«временную» команду вручную, если вы отключите / переподключите свое USB-устройство, когда среда рабочего стола уже запущена, даже если вы снова подключите его к тому же USB-разъему. Нормально, просто потому, что файл /etc/rc.local вызывается только один раз при запуске системы.
В любом случае, обходные пути возможны. У более опытных людей могут быть более умные методы, но я настроил псевдонимы для конкретных портов в Ubuntu. Это позволяет мне использовать простые команды usb1
или usb2
выборочно, если мне нужно отключить / снова подключить USB-устройство здесь или там. Ты тоже! Вы также можете создавать псевдонимы команд для воспроизведения коротких слов вместо ввода полной команды. Это легко установить менее чем за две минуты, а также работает с Alt+F2 :)
Другие идеи, чтобы сделать это проще, также будет приветствоваться.