KEYBOARD(HW)

НАЗВАНИЕ
keyboard - клавиатура персонального компьютера.

ОПИСАНИЕ
Клавиатура персонального компьютера используется для ввода данных, переключения экранов и направления некоторых управляющих сигналов компьютеру. Система UNIX выполняет эмуляцию экрана и клавиатуры терминала и при этом извлекает пользу из некоторых особенных клавиш и их комбинаций. Эти клавиши и их комбинации имеют специальные названия, которые уникальны в системе UNIX и могут соответствовать, а могут и не соответствовать меткам клавиш на вашей клавиатуре. Эти клавиши будут описаны позже.

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

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

Различают три особенных события при нажатии клавиш:

Переключение экранов (многоэкранный режим)
Для переключения на следующий экран нажмите Ctrl-PrtSc, используя клавиши Ctrl и PrtSc. Любой активный экран может быть выбран нажатием alt-Fn, где Fn - одна из функциональных клавиш. F1 относится к дисплею компьютера (/dev/tty01).

Сигналы
Сигналы оказывают воздействие на процесс или несколько процессов. Примерами сигналов являются Ctrl-d (конец ввода и выход из оболочки), Ctrl-\ (завершение процесса), Ctrl-s ( остановка выдачи еа экран) и Ctrl-q (возобновление выдачи).

Обычно символы ставятся в соответствие сигналам с помощью stty(1). Единственный способ поставить сигнал в соответствие символам через посредство stty.

Изменение значения нажатий клавиш
Действительный код, посылаемый драйверу клавиатуры, может быть изменен с помощью комбинации некоторых клавиш. Например, клавиша SHIFT меняет значение символов ASCII буквенно-цифровых клавиш. Удерживание клавиши Ctrl при нажатии других клавиш генерирует управляющие коды (Ctrl-d, Ctrl-s, Ctrl-q и др.).

Специальные клавиши
Для облегчения отыскания специальных клавиш в следующей таблице показано соответствие клавиш типичной консоли ключам системы UNIX. В этой таблице черточка (-) между названиями клавиш означает "удерживайте первую клавишу, нажимая на вторую".
Название в системе XENIXМетки на клавиатуреДействие
INTRDelОстанавливает текущее действие и возвращает в оболочку. Эта клавиша называется также RUB OUT или INTERRUPT.
BACKSPACE<-Удаляет первый символ слева от курсора. Заметьте, что клавиша "движения курсора влево" также имеет метку "стрелка влево", но она не удаляет символы.
Ctrl-dCtrl-dСигнализирует о конце ввода с клавиатуры; кроме того осуществляет выход из текущей оболочки.
Ctrl-hCtrl-hУдаляет первый символ слева от курсора. Называется также ERASE.
Ctrl-qCtrl-qВозобновляет выдачу после ее остановки с помощью нажатия Ctrl-s.
Ctrl-sCtrl-sОстанавливает выдачу на экран (работа программы не прекращается).
Ctrl-uCtrl-uУдаляет все символы на текущей строке. Называется также KILL.
Ctrl-\Ctrl-\Прекращает выполнение текущей команды и создает core-файл, если это разрешено. (Рекомендуется только для отладки.)
ESCAPEEscСпециальный код для некоторых программ. В текстовом редакторе vi(C) переключает режим вставки в командный режим.
RETURN(down-left arrow or ENTER)Завершает введение командной строки и ининциирует действие оболочки.
FnFnФункциональная клавиша n. F1-F12 используются без нажатия SHIFT. F13-F24 генерируются с помощью SHIFT. F25-F36 генерируются с помощью Ctrl-F1 через F12, F37-F48 генерируются с помощью Ctrl-Shift-F1 через F12.

Следующие клавиши Fn (F49-F60) находятся на дополнительной цифровой панели (Shift не используется): F49 - '7'
F55 - '6'
F50 - '8'
F55 - '+'
F51 - '9'
F55 - '1'
F52 - '-'
F55 - '2'
F53 - '4'
F55 - '3'
F54 - '5'
F55 - '0'

Соответствия клавишам F61-F96 смотрите в файле /usr/lib/keyboard/strings. Эти функциональные ключи доступны не на всех клавиатурах, но вы можете поставить им в соответствие другие клавиши.

Назначение клавиш клавиатуры формируется с помощью структуры, определенной в файле /usr/include/sys/keyboard.h. Каждая клавиша может иметь десять состояний. Первые восемь таковы:

Два дополнительных состояния обозначаются двумя специальными байтами. Первый является байтом "специального состояния", биты которого указывают, является ли данный ключ "специальным" в одном или нескольких из первых восьми состояний.

Второй может быть одним из четырех символов (C, N, B, O), указывающих на то, как служебные клавиши фиксации регистров влияют на них.

Режимы клавиатуры
Большинство клавиатур обычно находятся в режиме XT, но некоторые из них могут быть установлены в режим AT. Для определения того, поддерживает ли клавиатура режим AT, имеется утилита kbmode(8), которая может быть также использована для переключения клавиатуры в режим AT после очередной перезагрузки системы. Можно установить системную конфигурацию клавиатуры на режим AT с помощью утилиты configure(8).

Клавиатуры с расширенными возможностями программируются в режиме AT более полно, в котором распознаются также по две клавиши Ctrl и Alt.

Скан-коды
В следующей таблице описывается содержимое файла /usr/lib/keyboard/keys, устанавливаемое по умолчанию. Она содержит следующие заголовки колонок:

SCAN CODE - скан-код, генерируемый аппаратной частью клавиатуры при нажатии клавиши. Пользователь не имеет доступа к скан-коду, генерируемому на отжатие клавиши.

BASE - нормальное значение, генерируемое при нажатие клавиши.

SHIFT - значение, генерируемое при нажатии клавиши при нажатой клавише SHIFT.

LOCK - указывает, как служебные клавиши фиксации регистра воздействуют на эту клавишу:

Клавиши типа C, N и B генерируют смещенное значение скан-кода в состоянии, когда эти служебные клавиши включены. Если при этом будет нажата клавиша Shift, то значение скан-кода будет переключено обратно.

Прочие колонки таблицы представляют значения, генерируемые при нажатии данной клавиши в комбинации с удерживаемыми клавишами CTRL, ALT и SHIFT.

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

SCAN CODEBASESHIFTCTRLCTRL SHIFTALTALT SHIFTALT CTRLALT CTRL SHIFTLOCK
0nopnopnopnopnopnopnopnopO
1escescnopnopescescnopnopO
2'1''!'nopnop'1''!'nopnopO
3'2''@'nopnop'2''@'nopnopO
4'3''#'nopnop'3''#'nopnopO
5'4''$'nopnop'4''#'nopnopO
6'5''%'nopnop'5''%'nopnopO
7'6''^'rsrs'6''^'rsrsO
8'7''&'nopnop'7''&'nopnopO
9'8''*'nopnop'8''*'nopnopO
10'9''('nopnop'9''('nopnopO
11'0'')'nopnop'0'')'nopnopO
12'-''_'nsns'-''_'nsnsO
13'=''+'nopnop'=''+'nopnopO
14bsbsdeldelbsbsdeldelO
15htbtabnopnophtbtabnopnopO
16'q''Q'dc1dc1'q''Q'dc1dc1C
17'w''W'etbetb'w''W'etbetbC
18'e''E'enqenq'e''E'enqenqC
19'r''R'dc2dc2'r''R'dc2dc2C
20't''T'dc4dc4't''T'dc4dc4C
21'y''Y'emem'y''Y'ememC
22'u''U'naknak'u''U'naknakC
23'i''I'htht'i''I'hthtC
24'o''O'sisi'o''O'sisiC
25'p''P'dledle'p''P'dledleC
26'[''{'escesc'[''{'escescO
27']''}'gsgs']''}'gsgsO
28crcrnlnlcrcrnlnlO
29ctrlctrlctrlctrlctrlctrlctrlctrlO
30'a''A'sohsoh'a''A'sohsohC
31's''S'dc3dc3's''S'dc3dc3C
32'd''D'eoteot'd''D'eoteotC
33'f''F'ackack'f''F'ackackC
34'g''G'belbel'g''G'belbelC
35'h''H'bsbs'h''H'bsbsC
36'j''J'nlnl'j''J'nlnlC
37'k''K'vtvt'k''K'vtvtC
38'l''L'npnp'l''L'npnpC
39';'':'nopnop';'':'nopnopO
40'\''"'nopnop'\''"'nopnopO
41'`''~'nopnop'`''~'nopnopO
42lshiftlshiftlshiftlshiftlshiftlshiftlshiftlshiftO
43'\\''|'fsfs'\\''|'fsfsO
44'z''Z'subsub'z''Z'subsubO
45'x''X'cancan'x''X'cancanC
46'c''C'etxetx'c''C'etxetxC
47'v''V'synsyn'v''V'sinsinC
48'b''B'stxstx'b''B'stxstxC
49'n''N'soso'n''N'sosoC
50'm''M'crcr'm''M'crcrC
51',''<'nopnop',''<'nopnopO
52'.''>'nopnop',''>'nopnopO
53'/''?'nopnop'/''?'nopnopO
54rshiftrshiftrshiftrshiftrshiftrshiftrshiftrshiftO
55'*''*'nscrnscr'*''*'nscrnscrO
56altaltaltaltaltaltaltaltO
57' '' '' '' '' '' '' '' 'O
58clockclockclockclockclockclockclockclockO
59fkey1fkey13fkey25fkey37scr1scr11scr1scr11O
60fkey2fkey14fkey26fkey38scr2scr12scr2scr12O
61fkey3fkey15fkey27fkey39scr3scr13scr3scr13O
62fkey4fkey16fkey28fkey40scr4scr14scr4scr14O
63fkey5fkey17fkey29fkey41scr5scr15scr5scr15O
64fkey6fkey18fkey30fkey42scr6scr16scr6scr16O
65fkey7fkey19fkey31fkey43scr7scr7scr7scr7O
66fkey8fkey20fkey32fkey44scr8scr8scr8scr8O
67fkey9fkey21fkey33fkey45scr9scr9scr9scr9O
68fkey10fkey22fkey34fkey46scr10scr10scr10scr10O
69nlocknlockdc3dc3nlocknlockdc3dc3O
70slockslockdeldelslockslockdeldelO
71fkey49'7''7''7''7''7''7''7'N
72fkey50'8''8''8''8''8''8''8'N
73fkey51'9''9''9''9''9''9''9'N
74fkey52'-''-''-''-''-''-''-'N
75fkey53'4''4''4''4''4''4''4'N
76fkey54'5''5''5''5''5''5''5'N
77fkey55'6''6''6''6''6''6''6'N
78fkey56'+''+''+''+''+''+''+'N
79fkey57'1''1''1''1''1''1''1'N
80fkey58'2''2''2''2''2''2''2'N
81fkey59'3''3''3''3''3''3''3'N
82fkey60'0''0''0''0''0''0''0'N
83del'.'deldeldeldeldeldelN
84nopnopnopnopnopnopnopnopO
85fkey11fkey23fkey35fkey47scr11scr11scr11scr11O
86fkey12fkey24fkey36fkey48scr12scr12scr12scr12O

Следующие скан-коды генерируются только на клавиатурах, которые поддерживают и находятся в режиме AT.

SCAN CODEBASESHIFTCTRLCTRL SHIFTALTALT SHIFTALT CTRLALT CTRL SHIFTLOCK
87fkey11fkey23fkey35fkey47scr11scr11scr11scr11O
88fkey12fkey24fkey36fkey48scr12scr12scr12scr12O
89nopnopnopnopnopnopnopnopO
90nopnopnopnopnopnopnopnopO
91nopnopnopnopnopnopnopnopO
92nopnopnopnopnopnopnopnopO
93nopnopnopnopnopnopnopnopO
94nopnopnopnopnopnopnopnopO
95nopnopnopnopnopnopnopnopO
96fkey50fkey50fkey50fkey50fkey50fkey50fkey50fkey50O
97fkey53fkey53fkey53fkey53fkey53fkey53fkey53fkey53O
98fkey58fkey58fkey58fkey58fkey58fkey58fkey58fkey58O
99fkey55fkey55fkey55fkey55fkey55fkey55fkey55fkey55O
100fkey49fkey49fkey49fkey49fkey49fkey49fkey49fkey49O
101fkey51fkey51fkey51fkey51fkey51fkey51fkey51fkey51O
102fkey57fkey57fkey57fkey57fkey57fkey57fkey57fkey57O
103fkey59fkey59fkey59fkey59fkey59fkey59fkey59fkey59O
104fkey60fkey60fkey60fkey60fkey60fkey60fkey60fkey60O
105deldeldeldeldeldeldeldel0
106nopnopnopnopnopnopnopnopO
107nopnopnopnopnopnopnopnopO
108nopnopnopnopnopnopnopnopO
109nopnopnopnopnopnopnopnopO
110nopnopnopnopnopnopnopnopO
111nopnopnopnopnopnopnopnopO
112nopnopnopnopnopnopnopnopO
113nopnopnopnopnopnopnopnopO
114nopnopnopnopnopnopnopnopO
115nopnopnopnopnopnopnopnopO
116nopnopnopnopnopnopnopnopO
117nopnopnopnopnopnopnopnopO
118nopnopnopnopnopnopnopnopO
119nopnopnopnopnopnopnopnopO
120nopnopnopnopnopnopnopnopO
121nopnopnopnopnopnopnopnopO
122nopnopnopnopnopnopnopnopO
123nopnopnopnopnopnopnopnopO
124nopnopnopnopnopnopnopnopO
125nopnopnopnopnopnopnopnopO
126nopnopnopnopnopnopnopnopO
127nopnopnopnopnopnopnopnopO
128rctrlrctrlrctrlrctrlrctrlrctrlrctrlrctrlO
129raltraltraltraltraltraltraltraltO
130fkey60fkey60fkey60fkey60fkey60fkey60fkey60fkey60O
131deldeldeldeldeldeldeldel0
132fkey49fkey49fkey49fkey49fkey49fkey49fkey49fkey49O
133fkey57fkey57fkey57fkey57fkey57fkey57fkey57fkey57O
134fkey51fkey51fkey51fkey51fkey51fkey51fkey51fkey51O
135fkey59fkey59fkey59fkey59fkey59fkey59fkey59fkey59O
136fkey53fkey53fkey53fkey53fkey53fkey53fkey53fkey53O
137fkey55fkey55fkey55fkey55fkey55fkey55fkey55fkey55O
138fkey50fkey50fkey50fkey50fkey50fkey50fkey50fkey50O
139fkey58fkey58fkey58fkey58fkey58fkey58fkey58fkey58O
140'/'nopnopnop'/'nopnopnopO
141crcrnlnlcrcrnlnlO

В следующей таблице перечисляются "значения" специальных ключевых слов в файле /usr/lib/keyboard/keys (и в предыдущей таблице). mapkey(ADM) помещает "значение" ключевого слова в буфер управления вводом/выводом во время назначения клавиш. Эти ключевые слова используются только в файле скан-кодов /usr/lib/keyboard/keys для упрощения его чтения.

НазваниеЗначениеОписание
nop0Действия нет - "пустое" нажатие клавиши
lshift2Левая клавиша shift
rshift3Правая клавиша shift
clock4фиксация Capslock
nclock5фиксация Numlock
slock6фиксация Scroll lock
alt7Клавиша Alt
btab8Ключ обратной табуляции - генерирует фиксированную последовательность (esc [ Z)
ctrl9Клавиша Ctrl
nscr10Переключение на следующий экран
scr111Переключение на экран #1
...
scr1626Переключение на экран #16
fkey127Функциональная клавиша #1
...
fkey96122Функциональная клавиша #96
rctl128*Правая клавиша Ctrl
ralt129*Правая клавиша Alt
* Только в режиме AT

В следующей таблице перечисляются названия ключевых слов и их десятичные значения, которые могут взаимозаменяться в файле mapkey. Эти названия используются вместо соответствующих численных констант для облегчения чтения таблицы скан-кодов. Но в буфер управления вводом/выводом помещаются только десятичные значения. Они берутся из ascci(5).

НазваниеЗначениеНазваниеЗначение
nul0dc117
soh1dc218
stx2dc319
etx3dc420
eot4nak21
enq5syn22
ack6etb23
bel7can24
bs8em25
ht9sub26
nl10esc27
vt11fs28
np12gs29
cr13rs30
so14ns31
si15del127
dle16  

Назначение клавиш клавиатуры
Установление соответствия клавиш клавиатуры является составной частью эмуляции терминала. Эта процедура выполняется только для клавиатуры компьютера, но не для удаленных терминалов. Для изменения таблицы соответствий клавиш используйте утилиту mapkey. Чтобы изменить эту таблицу для отдельных каналов (экранов в многоэкранном режиме) используйте программу mapchan(5).

Установка соответствий клавиш клавиатуры может быть также выполнена с помощью ioctl. Синтаксис - тот же, что и для соответствий функциональных клавиш в предыдущем разделе.

При установке соответствий клавиш клавиатуры значение cmd=GIO_KEYMAP высвечивает текущую таблицу соответствий, а cmd=PIO_KEYMAP помещает готовый буфер на место.

Назначение функциональных клавиш
Для назначения функциональных клавиш используйте утилиту mapstr (см. mapkey(8)). mapstr модифицирует таблицу соответствий функциональных клавиш, в которой эти клавиши определяются.

Таблица соответствий функциональных клавиш представляет собой массив из 512 байтов (typedef strmap_t - тип структуры), содержащий строки, заканчивающиеся нулем и переопределяющие функциональные клавиши. Первая строка приписывается первой функциональной клавише, вторая - второй и т.д.

Не существует ограничения на длину строки, кроме предела самой таблицы, 512 байтов, включая нули. Строки обнуляются введением дополнительных нулевых символов.

Далее приведен список значений функциональных клавиш, устанавливаемых по умолчанию:

Значения функциональных клавиш по умолчанию
Клавиша #ФункцияShift
Функция
Ctrl
Функция
Ctrl
Shift
Функция
1ESC[MESC[YESC[kESC[w
2ESC[NESC[ZESC[lESC[x
3ESC[OESC[aESC[mESC[y
4ESC[PESC[bESC[nESC[z
5ESC[QESC[cESC[oESC[@
6ESC[RESC[dESC[pESC[[
7ESC[SESC[eESC[qESC[\
8ESC[TESC[fESC[rESC[]
9ESC[UESC[gESC[sESC[^
10ESC[VESC[hESC[tESC[_
11ESC[WESC[iESC[uESC['
12ESC[XESC[jESC[vESC[{

HomeESC[HEndESC[F
Up arrowESC[ADown arrowESC[B
Page upESC[IPage downESC[G
Left arrowESC[D5ESC[E
Right arrowESC[CInsertESC[L

Вы можете назначать функциональные клавиши с помощью ioctl(2). Синтаксис имеет вид:


   #include <sys/keyboard.h>

   ioctl(fd,cmd,buf)

   int fd,cmd;

   char *buf;

   ...

При установке соответствий клавиш клавиатуры значение cmd=GIO_KEYMAP высвечивает текущую таблицу соответствий, а cmd=PIO_KEYMAP устанавливает новую таблицу на место.

ФАЙЛЫ


  /usr/lib/keyboard/keys

  /usr/lib/keyboard/strings

СМ. ТАКЖЕ
mapchan(3), mapchan(5), mapkey(8), multiscreen(5), screen(HW), setkey(1), stty(1), kbmode(8), configure(8)