Клавіатури надсилають події на комп’ютер. Подія говорить "сканувати код nnn вниз" або "сканувати код nnn вгору". На іншому кінці ланцюга програми, що працюють в терміналі, очікують введення у вигляді послідовності символів. (Якщо тільки вони не вимагали необробленого доступу, як це робить сервер X.) Коли ви натискаєте A, клавіатура надсилає інформацію "сканувати код 38 вниз". Драйвер консолі шукає свою картуa
клавіш і перетворює це на "символ " (якщо не натискається клавіша модифікатора).
Коли ви натискаєте клавішу або комбінацію клавіш, яка не призводить до появи символу, інформацію потрібно кодувати у вигляді символів. Кілька клавіш та комбінацій клавіш мають відповідні символи управління, наприкладCtrl + Aнадсилає символ ␁
(значення байта 1), Returnнадсилає символ ␍
(Ctrl + M, значення байта 13) тощо. Більшість функціональних клавіш не мають відповідного символу, а натомість надсилають послідовність символів, що починається з символу ␛
(біг, значення байта 27). Наприклад, ключ Upпереводиться в послідовність втечі ␛[A
(три символи: втеча, відкрита дужка, велика A).
Запит на ім’я користувача на консолі німий і не розуміє більшості послідовностей втечі. У ньому немає функцій лінійного видання та історії, до яких ви звикли: вони надаються оболонкою, і поки ви не ввійдете, не маєте оболонки. Так він просто відображає послідовність втечі. Для ␛
персонажа немає гліфів , тому він відображається як ^[
. ^
Знак традиційно використовується в якості префікса для керуючих символів, і втеча ^[
з його байт значення: це значення байта [
, мінус 64.
Якщо натиснути Upна запит на оболонку, це надішле вам таку саму 3-х символьну послідовність. Оболонка інтерпретує це як послідовність команд (як правило, для згадування попереднього елемента історії). Якщо натиснутиCtrl +, Vто Upв запиті оболонки, це додасть послідовність відходу в запиті: Ctrl+ V- це команда вставити наступний символ буквально замість того, щоб інтерпретувати його як команду, тому ␛
символ не інтерпретується як початок послідовності втечі .
Деякі клавіші є лише модифікаторами і не передаються термінальним додаткам. Наприклад, коли ви натискаєтеShift , ця інформація залишається в драйвері терміналу і враховується, якщо потім натиснути A, тож драйвер надсилає A
програму замість a
.
Крім того, деякі функціональні клавіші можуть не відображатись у вашій консолі.
Для подібного перегляду в графічному інтерфейсі див. Що таке мета-ключ bash?
getty
абоlogin
, хоча я не впевнений, чому. Освічені здогадки говорять, що екран друку спеціально інтерпретується ядром з історичних причин. Я не впевнений на 100% в будь-якому, окрім модифікаторів.