Jump to content

# Keyboard input (Русский)

4 languages

- Deutsch
- English
- 日本語
- Português

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Keyboard input. Дата последней синхронизации: 13 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Дополнительные клавиши

Необходимым условием для изменения сопоставления клавиш является понимание того, как нажатие клавиши приводит к появлению символа:

1. Клавиатура посылает компьютеру скан-код (scancode).
2. Ядро Linux сопоставляет сканкод с кодом клавиши (keycode); смотрите Map scancodes to keycodes.
3. Раскладка клавиатуры сопоставляет код клавиши с символом клавиши (keysym) в зависимости от того, какие клавиши-модификаторы нажаты.
   1. Для консоли Linux смотрите статью Конфигурация клавиатуры в консоли.
   2. Для Xorg и Wayland смотрите статью Конфигурация клавиатуры в Xorg.

Большинство ваших клавиш уже должны иметь код клавиши или хотя бы скан-код. Клавиши без скан-кода не распознаются ядром; это могут быть дополнительные клавиши от «игровых» клавиатур и т.д.

В Xorg некоторым символам клавиш (например `XF86AudioPlay`, `XF86AudioRaiseVolume`) можно назначить действия (такие как запуск внешних приложений). Подробности смотрите в статье Горячие клавиши#Xorg.

В консоли Linux некоторым символам клавиш (например, `F1` – `F246`) могут быть назначены определённые действия (например, переключение на другую консоль или печать некоторой последовательности символов). Подробности смотрите в статье Конфигурация клавиатуры в консоли#Создание своей раскладки.

## Определение скан-кодов

### С помощью showkey

Традиционный способ узнать скан код — воспользоваться утилитой showkey(1). showkey ожидает нажатия клавиши, или выходит, если не было нажатий в течение 10 секунд. Чтобы работать с showkey, вы должны быть в виртуальной консоли, а не в графическом окружении или работать, залогинившись по сети. Выполните следующую команду:

    # showkey --scancodes

и понажимайте клавиши на клавиатуре; вы должны увидеть скан коды на экране.

### С помощью evtest

Для USB клавиатур, видимо, нужно использовать evtest(1) из пакета evtest вместо showkey:[1]

    # evtest /dev/input/event12
    ...
    Event: time 1434666536.001123, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70053
    Event: time 1434666536.001123, type 1 (EV_KEY), code 69 (KEY_NUMLOCK), value 0
    Event: time 1434666536.001123, -------------- EV_SYN ------------

Совет: Если вы не знаете, какой event-номер имеет интересующее вас устройство, вы можете запустить `evtest` без параметров, и он покажет вам список устройств с их event-номерами, после чего вы можете ввести нужный номер.

Используйте поле "value" из `MSC_SCAN`. В этом примере показано, что NumLock имеет сканкод 70053 и keycode 69.

### С помощью dmesg

Примечание: Этот метод не показывает скан коды всех клавиш, он показывает их только для неизвестных клавиш.

Вы можете узнать скан-код клавиши, нажав её и посмотрев вывод команды dmesg. Например, если у вас отображается такая строка:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0

значит, скан код нужной вам клавиши - `0xa0`.

## Определение кодов клавиш

Коды клавиш Linux определены в файле `/usr/include/linux/input-event-codes.h` (смотрите переменные `KEY_`).

### Определение кодов клавиш в консоли

В виртуальной консоли Linux коды клавиш можно узнать утилитой showkey(1). showkey ждёт нажатия клавиш, и если нажатий нет в течение 10 секунд, выходит (это единственный способ выйти из программы) Чтобы работать с showkey, вы должны быть в виртуальной консоли, а не в графическом окружении. Выполните следующую команду:

    # showkey --keycodes

и понажимайте клавиши на клавиатуре. Вы должны увидеть коды клавиш на экране.

### Определение кодов клавиш в Xorg

Примечание: The Xorg keycodes are 8 larger than the Linux keycodes.[2]

В графическом режиме коды клавиш, которые использует Xorg, можно узнать с помощью утилиты xev(1), которая поставляется в пакете xorg-xev. Разумеется, чтобы работать с xev, вы должны находиться в графическом окружении, а не в консоли.

Выполнив следующую команду, вы запустите xev с выводом только релевантной информации:

    $ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'

Вот пример вывода:

    38  a
    55  v
    54  c
    50  Shift_L
    133 Super_L
    135 Menu

Xbindkeys — ещё одна обёртка для xev, которая сообщает коды клавиш.

Если вы нажимаете клавишу и ничего не появляется на терминале, это может означать, что либо у клавиши нет скан кода, либо сканкоду не назначен код клавиши, либо какой-то другой процесс отлавливает нажатия клавиш. Если вы подозреваете, что процесс, слушающий X сервер отлавливает нажатия клавиш, вы можете попробовать запустить xev из чистой X сессии:

    $ xinit /usr/bin/xterm -- :1

## Смотрите также

- kbd-project — официальный сайт утилиты showkey

Category:

- Keyboard configuration (Русский)