arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
175 lines (107 loc) • 16 kB
Markdown
**Состояние перевода:** На этой странице представлен перевод статьи [Extra keyboard keys](/index.php/Extra_keyboard_keys "Extra keyboard keys"). Дата последней синхронизации: 2015-06-29\. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Extra_keyboard_keys&diff=0&oldid=379429).
На многих клавиатурах есть *специальные клавиши* (их иногда называют *горячими клавишами* или *мультимедиа клавишами*), которые сделаны для того, чтобы запускать приложения или печатать специальные символы (которые не назначены на стандартной национальной раскладке). [udev (Русский)](/index.php/Udev_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Udev (Русский)") содержит в себу большую базу данных назначений клавиш, соответствующих конкретным клавиатурам, поэтому чаще всего клавиатуры работают из коробки. Если у вас очень новая или очень редкая клавиатура, вам может понадобиться настроить раскладку самостоятельно.
Также вы можете изменить раскладку клавиатуры для того, чтобы система воспринимала клавиши как-то иначе, чем сейчас. Существует три уровня идентификации клавиши:
* [Скан код (scancode)](https://en.wikipedia.org/wiki/ru:%D0%A1%D0%BA%D0%B0%D0%BD-%D0%BA%D0%BE%D0%B4 "wikipedia:ru:Скан-код") - это низший уровень идентификации клавиши. Представляет из себя число, которое клавиатура посылает компьютеру.
* **Код клавиши (keycode)** - это следующий уровень идентификации клавиши. Кейкод соответствует какой-то функции.
* **Символ клавиши (keysym)** - это третий уровень идентификации клавиши. Он отвечает за *символ*. Он может зависеть от того, нажата ли клавиша Shift или была ли одновременно нажата какая-то другая [клавиша-модификатор](https://en.wikipedia.org/wiki/Modifier_key "wikipedia:Modifier key").
*Скан кодам* назначены *коды клавиш*, которым в свою очередь назначены *символы клавиш*, в зависимости от раскладки клавиатуры. Большинству ваших кнопок уже должны быть назначены *коды клавиш*, или, по крайней мере, *скан коды*. Клавиши без *скан кодов* не распознаны ядром; обычно это бывают дополнительные на 'игровых' клавиатурах.
В Xorg некоторым *символам клавиш* (например `XF86AudioPlay`, `XF86AudioRaiseVolume`) можно назначить действия (такие как запуск внешних приложений). Смотрите [Extra keyboard keys in Xorg (Русский)#Присваивание кодов клавиш символам](/index.php/Extra_keyboard_keys_in_Xorg_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.9F.D1.80.D0.B8.D1.81.D0.B2.D0.B0.D0.B8.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D0.B0.D0.BC "Extra keyboard keys in Xorg (Русский)") для дополнительной информации.
В консольном режиме некоторым *символам клавиш* (например от `F1` до `F246`) могут быть назначены определённые действия (такие как переключение на другую консоль или печать последовательности символов). Смотрите [Extra keyboard keys in console](/index.php/Extra_keyboard_keys_in_console "Extra keyboard keys in console") для дополнительной информации.
## Contents
* [1 Идентификация кодов клавиш](#.D0.98.D0.B4.D0.B5.D0.BD.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88)
* [1.1 Скан коды](#.D0.A1.D0.BA.D0.B0.D0.BD_.D0.BA.D0.BE.D0.B4.D1.8B)
* [1.1.1 С помощью showkey](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_showkey)
* [1.1.2 С помощью evtest](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_evtest)
* [1.1.3 С помощью dmesg](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_dmesg)
* [1.2 Коды клавиш](#.D0.9A.D0.BE.D0.B4.D1.8B_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88)
* [1.2.1 Режим консоли](#.D0.A0.D0.B5.D0.B6.D0.B8.D0.BC_.D0.BA.D0.BE.D0.BD.D1.81.D0.BE.D0.BB.D0.B8)
* [1.2.2 Режим графики](#.D0.A0.D0.B5.D0.B6.D0.B8.D0.BC_.D0.B3.D1.80.D0.B0.D1.84.D0.B8.D0.BA.D0.B8)
* [2 Назначение скан кодов кодам клавиш](#.D0.9D.D0.B0.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.BA.D0.B0.D0.BD_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2_.D0.BA.D0.BE.D0.B4.D0.B0.D0.BC_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88)
* [3 Назначение кодов клавиш символам клавиш](#.D0.9D.D0.B0.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D0.B0.D0.BC_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88)
* [3.1 В консольном режиме](#.D0.92_.D0.BA.D0.BE.D0.BD.D1.81.D0.BE.D0.BB.D1.8C.D0.BD.D0.BE.D0.BC_.D1.80.D0.B5.D0.B6.D0.B8.D0.BC.D0.B5)
* [3.2 В графическом режиме](#.D0.92_.D0.B3.D1.80.D0.B0.D1.84.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.BC_.D1.80.D0.B5.D0.B6.D0.B8.D0.BC.D0.B5)
* [4 Ноутбуки](#.D0.9D.D0.BE.D1.83.D1.82.D0.B1.D1.83.D0.BA.D0.B8)
* [4.1 Asus M series](#Asus_M_series)
* [4.2 Asus N56VJ (возможно подойдёт и для других)](#Asus_N56VJ_.28.D0.B2.D0.BE.D0.B7.D0.BC.D0.BE.D0.B6.D0.BD.D0.BE_.D0.BF.D0.BE.D0.B4.D0.BE.D0.B9.D0.B4.D1.91.D1.82_.D0.B8_.D0.B4.D0.BB.D1.8F_.D0.B4.D1.80.D1.83.D0.B3.D0.B8.D1.85.29)
* [5 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)
## Идентификация кодов клавиш
### Скан коды
#### С помощью showkey
Традиционный способ узнать *скан код* - воспользоваться утилитой *showkey*. *showkey* ожидает нажатия клавиши, или выходит, если не было нажатий в течение 10 секунд. Чтобы работать с *showkey*, вы должны быть в [виртуальной консоли](https://en.wikipedia.org/wiki/ru:%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C "wikipedia:ru:Виртуальная консоль"), а не в графическом окружении или работать, залогинившись по сети. Выполните следующую команду:
```
# showkey --scancodes
```
и понажимайте клавиши на клавиатуре; вы должны увидеть *скан коды* на экране.
#### С помощью evtest
Для USB клавиатур, видимо, нужно использовать *evtest* из пакета [evtest](https://www.archlinux.org/packages/?name=evtest) вместо *showkey*:[[1]](https://ask.fedoraproject.org/en/question/46201/how-to-map-scancodes-to-keycodes/)
```
# 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 ------------
```
Используйте поле "value" из `MSC_SCAN`. В этом примере показано, что NumLock имеет сканкод 70053 и keycode 69.
#### С помощью dmesg
**Примечание:** Этот метод не показывает *скан коды* всех клавиш, он показывает их только для неизвестных клавиш.
Вы можете узнать *скан код* клавиши, нажав её и посмотрев вывод команды `dmesg`. Например, если у вас отображается такая строка:
```
Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0
```
значит, *скан код* нужной вам клавиши - `0xa0`.
### Коды клавиш
**Важно:** Обратите внимание, что *коды клавиш* различаются в консольном и графическом режимах. Используйте соответствующую утилиту, чтобы узнать нужное значение.
#### Режим консоли
В [виртуальной консоли](https://en.wikipedia.org/wiki/ru:%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C "wikipedia:ru:Виртуальная консоль") *коды клавиш* можно узнать утилитой *showkey*. *showkey* ждёт нажатия клавиш, и если нажатий нет в течение 10 секунд, выходит (это единственный способ выйти из программы) Чтобы работать с *showkey*, вы должны быть в виртуальной консоли, а не в графическом окружении. Выполните следующую команду:
```
# showkey --keycodes
```
и понажимайте клавиши на клавиатуре. Вы должны увидеть *коды клавиш* на экране.
#### Режим графики
В графическом режиме *коды клавищ*, используемые [Xorg (Русский)](/index.php/Xorg_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Xorg (Русский)"), можно узнать с помощью утилиты *xev*, которая поставляется в пакете [xorg-xev](https://www.archlinux.org/packages/?name=xorg-xev). Разумеется, чтобы работать с *xev*, вы должны находиться в графическом окружении, а не в консоли.
Выполнив следующую команду, вы запустите *xev* с выводом только релевантной информации:
```
$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
```
Вот пример вывода:
```
38 a
27 r
54 c
43 h
153 NoSymbol
144 NoSymbol
```
В этом примере были нажаты клавиши `a`, `r`, `c`, `h` и две мультимедиа клавиши. Первым четырём клавишам с *кодами клавиш* `38`, `27`, `54` и `43` правильно назначены символы, а мультимедиа клавишам с *кодами клавиш* `153` и `144` - нет. Надпись `NoSymbol` означает, что этим клавишам не назначен *символ клавиши*.
Если вы нажимаете клавишу и ничего не появляется на терминале, это может означать, что либо у клавиши нет *скан кода*, либо *сканкоду* не назначен *код клавиши*, либо какой-то другой процесс отлавливает нажатия клавиш. Если вы подозреваете, что процесс, слушающий X сервер отлавливает нажатия клавиш, вы можете попробовать запустить xev из чистой X сессии:
```
$ xinit /usr/bin/xterm -- :1
```
## Назначение скан кодов кодам клавиш
Смотрите основную статью: [Map scancodes to keycodes](/index.php/Map_scancodes_to_keycodes "Map scancodes to keycodes").
## Назначение кодов клавиш символам клавиш
### В консольном режиме
Смотрите основную статью: [Extra keyboard keys in console](/index.php/Extra_keyboard_keys_in_console "Extra keyboard keys in console").
### В графическом режиме
Смотрите основную статью: [xmodmap (Русский)](/index.php/Xmodmap_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Xmodmap (Русский)").
## Ноутбуки
### Asus M series
Чтобы контролировать индикатор освещения и мультимедиа клавиши на вашем ноутбуке Asus, вы должны использовать следующую команду:
```
# echo 1 > /sys/devices/platform/asus_laptop/ls_switch
```
Чтобы она выполнялась всегда при запуске, создайте [Systemd tmpfile](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.92.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D0.B5_.D1.84.D0.B0.D0.B9.D0.BB.D1.8B "Systemd (Русский)"):
`/etc/tmpfiles.d/local.conf`
```
w /sys/devices/platform/asus_laptop/ls_switch - - - - 1
```
**Примечание:** Возможно, этот способ подойдёт и для других моделей ноутбуков Asus.
### Asus N56VJ (возможно подойдёт и для других)
Если большинство специальных клавиш не работает, попробуйте погрузить модуль ядра asus-nb-wmi, с помощью команды:
```
# modprobe asus-nb-wmi
```
затем проверьте, заработали ли они с помощью xev. Если вы совмещаете этот способ с опцией загрузки acpi_osi="!Windows 2012", вы можете получить странные результаты в xev, поэтому постарайтесь не использовать её. Если это помоглоЮ сделайте модуль загружаемым автоматически, как описано в статье [Модули ядра](/index.php/Kernel_modules_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel modules (Русский)")
## Смотрите также
* [Enabling Keyboard Multimedia Keys](http://wiki.linuxquestions.org/wiki/Configuring_keyboards#Enabling_Keyboard_Multimedia_Keys) - guide on LinuxQuestions wiki
* [Multimedia Keys](http://www.gentoo-wiki.info/HOWTO_Use_Multimedia_Keys) on [Gentoo Wiki Archives](http://www.gentoo-wiki.info/)