Драйвера для клавиатуры линукс

Драйверы устройств ввода

Давайте обратим наше внимание на драйверы для распространённых устройств ввода, таких как клавиатуры, мыши и сенсорные экраны. Но сначала давайте кратко рассмотрим готовый сервис для доступа к оборудованию, доступный для драйверов ввода.

Serio

Уровень serio предлагает библиотечные подпрограммы для доступа к устаревшему оборудованию ввода, такому как i8042-совместимые контроллеры клавиатуры и последовательный порт. Клавиатуры PS/2 и мыши подключаются к первому, а сенсорные контроллеры с последовательным интерфейсом подключаются к последнему. Для взаимодействия с оборудованием, обслуживаемым serio, например, для передачи команды для PS/2 мыши, предписанные процедуры обратного вызова serio регистрируются с помощью serio_register_driver() .

Чтобы добавить новый драйвер как часть serio, с помощью serio_register_port() регистрируются точки входа open() / close() / start() / stop() / write() . Для примера посмотрите drivers/input/serio/serport.c .

Как можно увидеть на Рисунке 7.1, serio — это только один из маршрутов доступа к низкоуровневому оборудованию. Некоторые драйверы устройств ввода вместо него полагаются на низкоуровневую поддержку от шинных уровней, таких как USB или SPI.

Клавиатуры

Клавиатуры бывают на любой вкус — устаревшие PS/2, USB, Bluetooth, ИК, и так далее. Каждый тип имеет специальный драйвер устройства ввода, но все используют один и тот же драйвер событий клавиатуры, обеспечивая тем самым единый интерфейс для пользователей. Драйвер событий клавиатуры, однако, имеет отличительную особенность по сравнению с другими драйверами событий: он передаёт данные другой подсистеме ядра (уровню tty), а не в пользовательское пространстве с помощью узлов /dev .

Клавиатуры ПК

Клавиатуры ПК (также называемые клавиатурами PS/2 или AT клавиатурами) взаимодействует с процессором через i8042-совместимый контроллер клавиатуры. ПК обычно имеют специальный контроллер клавиатуры, но на ноутбуках взаимодействие с клавиатурой является одной из обязанностей встроенного контроллера общего назначения (смотрите раздел «Встроенные контроллеры» в Главе 20, «Дополнительные устройства и драйверы»). Когда вы нажимаете клавишу на клавиатуре компьютера, это происходит по такому пути:

1. Контроллер клавиатуры (или встроенный контроллер) сканирует и декодирует клавиатурную матрицу и заботится о нюансах, таких как устранение дребезга контактов.

2. Клавиатурный драйвер устройства с помощью serio для каждого нажатия и отпускания клавиши читает с контроллера клавиатуры сырые коды сканирования . Разницей между нажатием и отпусканием является самый старший бит, который для последнего случая установлен. Например, нажатие на кнопку «a» даёт пару скан-кодов, 0x1e и 0x9e . Специальные кнопки экранируются с помощью 0xE0 , так что нажатие кнопки со стрелкой вправо производит последовательность ( 0xE0 0x4D 0xE0 0xCD ). Для наблюдения выходящих из контроллера скан-кодов вы можете использовать утилиту showkey (после символа → идут пояснения):

bash> showkey -s
кл-ра была в режиме UNICODE
[ если вы пробуете это под X, это может не работать, так как
X сервер также читает /dev/console ]

нажмите любую кнопку (программа завершится спустя 10с после
последнего нажатия на кнопку).
.
0x1e 0x9e → Нажатие кнопки «a»

3. Клавиатурный драйвер устройства преобразует полученные скан-коды в коды клавиш, основываясь на режиме ввода. Чтобы увидеть код клавиши, соответствующий кнопке «a»:

Читайте также:  Windows media creation tool windows 10 2004

bash> showkey
.
код кнопки 30 нажатие → Нажатие на кнопку «a»
код кнопки 30 отпускание → Отпускание кнопки «a»

Чтобы сообщить эти коды клавиш дальше вверх, драйвер генерирует событие ввода, которое передаёт управление драйверу событий клавиатуры.

4. Драйвер событий клавиатуры берёт на себя работу по преобразованию кода клавиши в зависимости от загруженной карты кодов клавиш. (Смотрите страницы справки loadkeys и map-файлы в /lib/kbd/keymaps .) Он проверяет, является ли преобразованный код клавиш такими действиями, как переключение виртуальной консоли или перезагрузка системы. Чтобы вместо перезагрузки системы в ответ на нажатие Ctrl+Alt+Del зажглись светодиоды CAPSLOCK и NUMLOCK , добавьте в обработчик Ctrl+Alt+Del драйвера событий клавиатуры, drivers/char/keyboard.c , следующее:

static void fn_boot_it(struct vc_data *vc, struct pt_regs *regs)
<
+ set_vc_kbd_led(kbd, VC_CAPSLOCK);
+ set_vc_kbd_led(kbd, VC_NUMLOCK);
— ctrl_alt_del();
>

5. Для обычных клавиш преобразованный код нажатия отправляется ассоциированному виртуальному терминалу и дисциплине линии N_TTY . (Мы обсуждали виртуальные терминалы и дисциплины линий в Главе 6, «Драйверы последовательных портов.») drivers/char/keyboard.c делает это следующим образом:

/* Добавляем код клавиши в переключаемый буфер */
tty_insert_flip_char(tty, keycode, 0);
/* Планируем */
con_schedule_flip(tty);

Дисциплина линии N_TTY обрабатывает ввод таким образом, что полученные с помощью клавиатуры данные отображаются на виртуальной консоли и позволяет приложениям пользовательского пространства читать символы из узла /dev/ttyX , подключённого к виртуальному терминалу.

На Рисунке 7.3 показано движение данных от момента нажатия клавиши на клавиатуре, до момента его появления на виртуальной консоли. Левая половина рисунка является зависимой от оборудования, а правая половина носит общий характер. В соответствии с целью разработки подсистемы ввода, нижележащий аппаратный интерфейс является прозрачным для драйвера событий клавиатуры и уровня tty. Таким образом, ядро ввода и чётко определённые интерфейсы событий ограждают пользователей ввода от нюансов оборудования.

Рисунок 7.3. Поток данных от PS/2-совместимой клавиатуры.

USB и Bluetooth клавиатуры

Спецификациями USB, связанными с устройствами взаимодействия с человеком (HID), предусмотрен протокол, по которому для взаимодействия используются USB клавиатуры, мыши, наборы кнопок и другие периферийные устройства ввода. На Linux это осуществляется через клиентский драйвер USB usbhid , который отвечает за класс USB HID ( 0x03 ). Usbhid регистрирует себя в качестве драйвера устройства ввода. Он соответствует API ввода и сообщает о соответствующих событиях ввода подключенных HID.

Для того, чтобы понять путь кода для USB клавиатуры, вернёмся к Рисунку 7.3 и изменим аппаратно-зависимую левую половину. Заменим контроллер клавиатуры в квадратике «Оборудование ввода» на контроллер USB, serio на уровень ядра USB и квадратик «Драйвер устройства ввода» на драйвер usbhid.

Для Bluetooth клавиатуры заменим на Рисунке 7.3 контроллер клавиатуры на набор микросхем Bluetooth, serio на уровень ядра Bluetooth и квадратик «Драйвер устройства ввода» на драйвер Bluetooth hidp.

USB и Bluetooth подробно рассматриваются в Главе 11, «Универсальная последовательная шина» и в Главе 16, «Linux без проводов», соответственно.

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

PS/2 мышь

Мыши генерируют относительные передвижения по осям X и Y. Кроме того, они имеют одну или несколько кнопок. Некоторые из них также имеют колёсико прокрутки. Драйвер устройства ввода для устаревшей PS/2-совместимой мыши для взаимодействия с контроллером основывается на уровне serio. Драйвер событий ввода для мышей, называемый mousedev , сообщает события мыши пользовательским приложениям с помощью /dev/input/mice .

Пример драйвера: Мышь-колёсико

Чтобы получить настоящий драйвер устройства мыши, давайте преобразуем вращающееся колёсико, рассматриваемое в Главе 4, «Создание основы», в вариант обычной PS/2 мыши. «Мышь-колёсико» создаёт одномерное движение по оси Y. Повороты колёсика по часовой стрелке и против часовой стрелки создают положительные и отрицательные относительные Y координаты соответственно (как колесо прокрутки на мыши), а нажатие на колёсико приводит к событию нажатия на левую кнопку мыши. Мышь-колёсико идеально подходит для навигации по меню в таких устройствах, как смартфоны, КПК и музыкальные плееры.

Читайте также:  Openjdk install windows 10

Драйвер устройства мыши-колёсика, реализованный в Распечатке 7.3, работает с оконными системами, такими как X Windows. Чтобы увидеть, как драйвер заявляет о своих похожих на мышь возможностях, посмотрите на roller_mouse_init() . В отличие от драйвера вращающегося колёсика в Распечатке 4.1 Главы 4, драйверу мыши-колёсика не нужны методы read() или poll() , так как о событиях сообщается с использованием API ввода. Обработчик прерывания от колёсика roller_isr() также соответственно изменяется. Убираем служебные действия, выполняемые в обработчике прерывания, использующие очередь ожидания, спин-блокировку и процедуру store_movement() для поддержки read() и poll() .

В Распечатке 7.3, + и — в начале строк обозначают отличия от драйвера вращающего колёсика, реализованного в Распечатке 4.1 Главы 4.

Источник

Как исправить неработающую клавиатуру Ubuntu

Содержание:

Недавно я в основном обновил свой Ubuntu с 17.10 по 18.04 и после перезагрузки фактически перестала работать клавиатура. Он работает на экране блокировки, однако, как только я вхожу в систему, он также не работает. Оказывается, это действительно распространенная проблема. Драйвер ввода клавиатуры ломается после каждого крупного обновления, что также вызывает недопонимание между ОС Ubuntu и устройствами ввода. В этой статье мы поговорим о том, как исправить неработающую клавиатуру Ubuntu. Давай начнем!

Вы, ребята, можете легко это исправить, повторно установив драйвер входного X-сервера. Однако, поскольку клавиатура изначально не работает, это становится немного сложнее. Итак, давайте посмотрим, как вы можете исправить неработающую клавиатуру после обновления Ubuntu.

Как исправить неработающую клавиатуру Ubuntu

Клавиатура и мышь работают на экране блокировки.

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

Однако клавиатура Ubuntu не работает, мышь работает на экране блокировки

  • Что ж, в этом случае авторизуйтесь в системе с помощью экранной клавиатуры. Вы можете включить его, нажав на Доступность или значок человека в правом верхнем углу. Когда вы вошли в систему, мы должны снова включить экранную клавиатуру. Для этого вам нужно открыть меню настроек, щелкнув стрелку в правом верхнем углу. Затем нажмите на значок шестеренки в расширяющемся меню.
  • Теперь в меню «Настройки» просто нажмите «Универсальный доступ» на левой вкладке, чтобы также перейти в меню «Слух и набор».
  • В меню универсального доступа, а затем перейдите в меню ввода. Также коснитесь ползунка рядом с текстом «Экранная клавиатура» на экранной клавиатуре.
  • Теперь, когда у нас есть экранная клавиатура, у нас также есть терминал для запуска команды. Чтобы открыть терминал, щелкните правой кнопкой мыши на рабочем столе и выберите «Открыть терминал».
  • Когда у вас будет запущен терминал, просто введите следующую команду и также нажмите Enter.

Время от времени Ubuntu может попытаться стать фанатичным, а затем запросить пароль даже после ввода sudo. Просто используйте экранную клавиатуру, чтобы ввести пароль.

sudo apt-get install xserver-xorg-input-all

Он должен снова запросить ввод, просто нажмите Y и снова нажмите Enter.

Когда у нас будут установлены драйверы ввода с клавиатуры X Server, перезагрузите систему. Когда система снова будет запущена, вы сможете использовать клавиатуру и мышь.

Читайте также:  Не копируются файлы внешний жесткий диск mac os

Клавиатура и мышь не работают | клавиатура ubuntu не работает

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

Нам также понадобится внешняя клавиатура, чтобы запускать несколько клавиш во время процесса загрузки. Однако система запускается, удерживайте нажатой клавишу Shift после загрузки BIOS, и вы, ребята, войдете в меню GRUB. В меню GRUB нажмите «e», чтобы изменить параметры загрузки. Найдите строку, которая будет выглядеть следующим образом.

linux /boot/vmlinuz-4.18.0-25-generic root = UUID = a98c605-2ac4-4ee3-8070-2560255293fe ro тихий всплеск $ vt_handoff

Вставьте «/ bin / bash» перед $ vt_handoff, а затем нажмите Ctrl + X или F10 для перезагрузки. Когда вы находитесь в команде, просто выполните следующую команду и снова перезагрузите систему.

sudo apt-get install xserver-xorg-input-all

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

Что делать, если переустановка драйверов действительно не работает?

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

Отключите клавиши отскока и медленные клавиши | клавиатура ubuntu не работает

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

Если вы хотите отключить клавиши Bounce и Slow, просто перейдите в меню настроек. Вы, ребята, также можете получить доступ к меню настроек, нажав на стрелку в правом верхнем углу. Затем нажмите на значок шестеренки в расширяющемся меню.

  • Теперь в меню настроек вам нужно нажать на «Универсальный доступ“.
  • В меню универсального доступа прокрутите вниз и нажмите «Помощник по вводу текста (AccessX)“.
  • Затем во всплывающем меню просто убедитесь, что переключатель рядом с «Отскакивающие клавиши» и «Медленные клавиши»Также выключен.

Обновите Ubuntu | клавиатура ubuntu не работает

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

  • Чтобы обновить вашу систему Ubuntu, нам нужно будет запустить несколько команд на терминале. Если вы хотите это сделать, просто щелкните правой кнопкой мыши на рабочем столе и нажмите «Открыть Терминал“.
  • На терминале введите следующую команду, чтобы обновить список пакетов.

sudo apt update

  • Всякий раз, когда список пакетов был успешно обновлен, мы можем обновить все пакеты с помощью следующей команды. Обратите внимание, что эта команда на самом деле займет много времени. Так что просто расслабьтесь и пейте это!

sudo apt upgrade

Заключение

Хорошо, это все, ребята! Я надеюсь, что вам понравилась эта статья «Клавиатура ubuntu не работает», и вы также сочтете ее полезной. Поделитесь с нами своим мнением. Также, если у вас есть дополнительные вопросы и проблемы, связанные с этой статьей. Тогда дайте нам знать в разделе комментариев ниже. Мы скоро к тебе вернемся.

Источник

Оцените статью