Клавиатура перестает работать на Ubuntu 16.04 (Xenial Xerus)

17

Моя клавиатура перестает работать без видимой причины.

После использования Ubuntu в течение 2,5 лет в качестве виртуальной машины на хосте Windows ( VirtualBox ) я наконец сделал решающий шаг, переформатировал свой жесткий диск и вчера собрал систему с Ubuntu. Сегодня утром у меня перестала работать клавиатура.

Я вижу много сообщений об Ubuntu и USB-клавиатуре или мыши, которые перестают работать случайно. Они указывают, что это автоматическое отключение питания USB-устройств для экономии энергии, а когда USB-устройство несовместимо с некоторыми устройствами, USB не «просыпается», как следует.

Я попробовал предложение, размещенное в Исправлении USB Autosuspend .

Но не повезло. Я также попробовал другое предложение, которое состояло в том, чтобы загрузить без клавиатуры и затем подключить его после запуска Ubuntu.

Вот некоторые детали:

  • Последние два года я использовал ту же клавиатуру Kinesis с Ubuntu, что и виртуальная машина, без проблем.
  • У Kinesis есть макросы, и запуск макроса вызывает проблему 100% времени. Однако это происходит, когда я просто печатаю (без макросов).
  • Я попробовал Kinesis на ноутбуке только сейчас. Это годовалый компьютер, на котором я установил Ubuntu 16.04 две недели назад. С помощью клавиатуры макрос Kinesis ничего не воспроизвести проблему.

Проблемная машина

  • Dell XPS, 6 лет, настольный компьютер
  • Установил Ubuntu 16.04 вчера
  • Использование USB-клавиатуры Kinesis Advantage
  • Отключение / повторное подключение клавиатуры сработало 9 из 10 раз
  • Перезагрузка тоже работает
  • Я не думаю, что это проблема с питанием USB, так как светодиод на клавиатуре горит, а другие устройства USB продолжают работать.
  • У меня есть как USB, так и Bluetooth мышь, подключенная к машине. Оба продолжают работать, даже когда кинезис останавливается.
  • У меня обычно есть вторая обычная клавиатура Dell под брендом для людей, не являющихся Kinesis, которым необходимо использовать мой компьютер. Ранее сегодня эта клавиатура перестала работать каждый раз, когда перестал работать Kinesis. Однако теперь, вызывая проблему с макросом, клавиатура Dell продолжает работать.

Кинезис, который у меня уже 8 лет, позволил мне продолжать играть на клавиатуре. Если я не могу решить эту проблему, мне придется вернуться к Windows, которая была бы настоящим обломом.

Будем весьма благодарны за любые предложения о том, что можно попробовать или как отладить это.

Я копаюсь в драйверах USB, о которых в Linux я ничего не знаю. Однако я обнаружил, что у ноутбука есть порты USB 2.0 и 3.0. Рабочий стол (с проблемой) только USB 2.0. Все еще копаю ...

klequis
источник
Последние 2 года я использовал ту же клавиатуру Kinesis с Ubuntu, что и виртуальная машина, без проблем. Вы фактически передали клавиатуру виртуальной машине? В противном случае это проходило через драйверы хост-ОС и VirtualBox.
Мелебиус
В течение 3 лет я использовал Ubuntu в качестве виртуальной машины с хостом Windows, и у меня не было проблем с клавиатурой. Теперь, когда хост Ubuntu GNOME и гость Ubuntu GNOME, у меня возникла эта проблема.
Klequis
Тогда вы не использовали физическую клавиатуру в гостевой ОС. Virtualbox представляет виртуальную клавиатуру гостевой ОС по умолчанию. (так что не имеет значения, если вы использовали ту же физическую клавиатуру, так как она не была той же)
karatedog
Смотрите этот похожий вопрос: askubuntu.com/questions/688445/laptop-keyboard-stopped-working Установка пакета xserver-xorg-input-allработала для меня, когда я Ubuntu 17.04
обновился

Ответы:

7

У меня была такая же проблема с 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-устройствах / портах

  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/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"
    

    Обратите внимание, что autosuspend_delay_msзаменено устаревшим autosuspendс версии ядра 2.6.38, согласно официальной документации Linux .

  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. Перезагрузите компьютер

,

Важно: не забывайте, что вам придется снова выполнять sudo sh -c«временную» команду вручную, если вы отключите / переподключите свое USB-устройство, когда среда рабочего стола уже запущена, даже если вы снова подключите его к тому же USB-разъему. Нормально, просто потому, что файл /etc/rc.local вызывается только один раз при запуске системы.

В любом случае, обходные пути возможны. У более опытных людей могут быть более умные методы, но я настроил псевдонимы для конкретных портов в Ubuntu. Это позволяет мне использовать простые команды usb1или usb2выборочно, если мне нужно отключить / снова подключить USB-устройство здесь или там. Ты тоже! Вы также можете создавать псевдонимы команд для воспроизведения коротких слов вместо ввода полной команды. Это легко установить менее чем за две минуты, а также работает с Alt+F2 :)

Другие идеи, чтобы сделать это проще, также будет приветствоваться.

Fenyx
источник
спасибо за этот ответ. К сожалению, я не могу проверить, чтобы подтвердить, что это ответ. Поэтому не уверен, стоит ли мне отмечать ответ.
Klequis
Я пытался, и это не помогло на Ubuntu 16.0.4.2 VirtualBox 5.1.26
Pavlo
1

У меня была точно такая же проблема (клавиатура Kinesis, перестала работать после перезагрузки).

В конце концов я понял, что это связано с обновлением ядра

  • до перезагрузки у меня была версия 4.4.0-31-generic
  • после перезагрузки было 4.4.0-38-generic

Загрузка с использованием более старого ядра 4.4.0-31 устранила проблему для меня.

В этом посте содержатся инструкции о том, как загрузить старое ядро ​​(чтобы узнать, подходит ли вам старое ядро).

jeroend
источник
Весьма вероятно, что у моей недавно построенной машины было более новое ядро, чем у виртуальной машины, которую я использовал. Однако моя проблема была не в том, что клавиатура перестала работать после перезагрузки, она работала нормально, пока я не запустил макрос, и в этот момент он отключился. Большая часть моего использования макросов была для общих ключей программирования. Сейчас я использую редактор Atom, и его ярлыки / авто-тип (как они это называют) делают большую часть того, что мне нужно, так что я счастлив с этим.
klequis
0

Если у вас есть, laptop-mode-toolsэто может быть возможно полностью отключить USB Auto-Suspend, изменив:

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-generic # 44-Ubuntu
Антонио Медина
источник
Я также отметил, что в:
Антонио Медина
Не ноутбук, и я научился жить без, но спасибо за предложение.
Klequis
Работают ли средства для работы в ноутбуке, имеет мало общего с тем, является ли система ноутбуком. Мой всегда подключенный к настенному A / C-серверу выполнял его, и установка AUTOSUSPEND_TIMEOUT = -1 в файле /etc/laptop-mode/conf.d/runtime-pm.conf была тем, что окончательно исправило это для меня после борьбы с тех пор, как я обновил до 16.04 с 14.04.
Резты Фелти
0

У меня была такая же проблема. Для меня решение было простым, а фактическая причина осталась неизвестной.

Вчера я подключил вторую мышь к своему компьютеру. Все работало нормально Сегодня, когда я загрузился, клавиатура не работала ни на экране входа в систему, ни на рабочем столе. Работало во время загрузки, например я попал в биос.

Клавиатура начала работать после того, как я отключил новую мышь и подключил все провода USB.

Охто Нордберг
источник
Это может быть общее количество USB-устройств (максимум два). У меня есть такая система. Это может или не может быть связано с типом порта USB, USB 2 против USB 3. К сожалению, у меня не так много вариантов в BIOS, чтобы попытаться обойти это.
Питер Мортенсен
IOMMU также может быть включен .
Питер Мортенсен
0

За прошедший год я снова и снова перечитывал этот и другие отчеты, и в конце концов просто отказался от использования клавиатуры, которая вызывала проблемы, и переключился на беспроводную клавиатуру.

Пока меня не поразило, что проблема началась примерно в то время, когда я строил новый ПК, и это могло быть проблемой питания. Поэтому я купил USB-концентратор с питанием для подключения клавиатуры. Это решило проблему! В конце концов, это не было проблемой программного обеспечения, но, очевидно, мой новый компьютер имеет выходы USB с недостаточным питанием (или так думает моя клавиатура).

Возможно, стоит попробовать, если вы страдаете от периодических отключений клавиатуры, как описано выше, и ничего со стороны программного обеспечения не работает. USB-концентратор с питанием не должен быть дорогим.

ФВД
источник
Или на порте USB действует ограничение тока? Например, 100 мА .
Питер Мортенсен
0

Это не тот ответ, который я искал, но ... я потратил два дня и много часов, пытаясь решить эту проблему. Я купил концентратор PCIe USB 3.0, чтобы посмотреть, сработает ли это - не получилось.

Я пришел к выводу, что эту проблему не стоит решать, и есть лучшие пути для достижения этой цели.

Мое решение / обходной путь - полагаться на функцию фрагментов моего текстового редактора. Это означает, что я буду инвестировать и больше полагаться на конкретный редактор (скорее всего, на Atom ), но это будет даже лучше, чем то, что было у меня с клавиатурными макросами, поскольку фрагменты кода проще поддерживать, чем клавиатурные макросы.

Я многое узнал об USB от перезагрузки подсистемы USB .

klequis
источник
Я купил Kinesis Advantage2 около 3 месяцев назад. Просто носил 10 лет. Работает нормально. Не имея проблемы, обсуждаемой в этом выпуске.
Klequis
Фрагменты (текстовые шаблоны) чрезвычайно полезны, но они не могут управлять комбинациями клавиш, только чистый текст (?). Например, Shift + Ctrl + Tab (для перехода к следующей вкладке слева в Firefox) нельзя поместить во фрагмент
Peter Mortensen