LinuxShare
Навигация
Вход для пользователей
Кто на сайте
Ввод с клавиатуры
Ввод с клавиатуры | ||
---|---|---|
Пред. | Глава 4. X Window | След. |
Ввод с клавиатуры
В последних выпусках X (X11R61 и выше) имеются два «стандартных» способа ввода с клавиатуры: Xkb или X KeyBoard (раздел “Настройка Xkb”) и старый способ, работающий через утилиту xmodmap (см. раздел “xmodmap”).
Настройка Xkb
Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке Xkb можно найти у Ивана Паскаля.
Немного теории
При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют «базу данных» настроек XKB .
Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp , которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB .
Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.
База данных, необходимых XKB, состоит из 5 компонентов:
keycodes Таблицы, которые просто задают символические имена для скан-кодов. Например:
types Описывает типы клавиш. Тип клавиши определяет — как должно меняться значение, выдаваемое клавишей в зависимости от модификаторов ( Control , Shift и т.п.). Так, например, «буквенные» клавиши относятся к типу ALPHABETIC , что означает, что они имеют разное значение в зависимости от состояния Shift и CapsLock . А клавиша [Enter] имеет тип — ONE_LEVEL , что означает, что её значение всегда одно и то же, независимо от состояния модификаторов.
compat (сокращённое от compability) Описывает «поведение» модификаторов. В XKB имеется несколько внутренних переменных, которые, в конечном счёте, и определяют — какой символ будет генерироваться при нажатии клавиши в конкретной ситуации. Так вот, в compat как раз описывается — как должны меняться эти переменные при нажатии различных клавиш-модификаторов. В этом же разделе обычно описывается и поведение «лампочек-индикаторов» на клавиатуре.
symbols Таблицы, в которых для каждого скан-кода (имени скан-кода, определённого в keycodes ) перечисляются все значения ( symbols ), которые должна выдавать клавиша. Естественно, количество различных значений зависит от типа клавиши (которые описываются в types ), а какое именно значение будет выдано в конкретной ситуации, определяется состоянием модификаторов и их «поведением» (которое описывается в compat ).
geometry Описывает «геометрию» клавиатуры — то есть расположение клавиш на клавиатуре. Эти описания нужны не столько самому X-серверу, сколько прикладным программам, которые рисуют изображение клавиатуры.
Все эти компоненты разложены по одноимённым директориям в директории
Весь набор компонентов, необходимых для настройки XKB, описывается в файле конфигурации X-сервера в секции Keyboard .
Настройка
Чтобы настроить XKB, в файле конфигурации X-сервера надо задать параметры XkbRules , XkbModel , XkbLayout и, если вам нужно что-то не совсем стандартное — XkbVariant и XkbOptions .
означает, что XKB должен в соответствии с правилами, описанными в файле
Несколько практических рекомендаций.
Небольшое отступление — "о клавише-переключателе рус/лат".
Другие варианты смены кодировки:
grp:toggle — переключение правым Alt;
grp:shift_toggle — двумя клавишами shift;
grp:caps_toggle — переключение по CapsLock;
grp:lwin_toggle — переключение по левой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);
grp:rwin_toggle — переключение по правой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);
grp:menu_toggle — переключение по клавише "Контекстное меню" на Windows клавиатуре (для X Window старше 4.2);
grp:switch — переключение по правому Alt только на момент нажатия [5] ;
Когда был написан первый вариант этих рекомендаций, сама раскладка "русской" клавиатуры ( symbols/ru ) включала в себя и "переключатель групп" рус/лат, "подвешенный" на клавишу CapsLock . С одной стороны, это было удобно — в простейшем случае достаточно было выбрать "русскую раскладку", и вы автоматически получали и клавишу для переключения "на русский". Но, с другой стороны, это было неудобно для тех, кто предпочитает в качестве переключателя рус/лат другую клавишу (или комбинацию клавиш). Конечно, выбрать другой переключатель не составляло труда, но при этом оставался и переключатель на CapsLock , что многим не нравилось. Для того, чтобы убрать его, надо было "залезть" в соответствующий файл и вручную подправлять соответствующую раскладку.
В конце концов (начиная с версии 3.3.4) сами разработчики XFree убрали этот "переключатель" из "русской раскладки". Но в связи с этим появились и некоторые проблемы — теперь клавишу-переключатель надо явно "заказывать" при конфигурировании XKB .
Самый простой способ настройки — использовать программу для автоматической настройки X Window .
В XFree86 такая программа называется XF86Setup .
При этом "по умолчанию" используются "правила" ( XkbRules ) — xfree86 . Вам нужно будет только выбрать "модель" ( XkbModel ), "схему" ( XkbLayout ) и "способ переключения групп" (переключатель "РУС/ЛАТ").
Кроме того, при желании вы можете изменить "положение клавиши Ctrl ". Естественно, в конфигурации это будет выглядеть как соответствующие строчки XkbOptions .
Итак. Запустите программу XF86Setup, выберите раздел Keyboard . В этом разделе выберите из меню Model (тип клавиатуры) и Layout (язык). Не забудьте отметить в отдельных списках (в правой части) подходящий "переключатель групп" и, если хотите — "расположение Ctrl ".
При выходе из программы она запишет соответствующие строчки в файл конфигурации XFree в секции Keyboard .
Для смены кодировки можно воспользоваться любой из многочисленных программ переключения кодовых страниц через xkb — например, я пользуюсь программой xxkb Ивана Паскаля.
xmodmap
Описанное ниже относится к относительно старым версиям X Window (Заведомо к версиям, меньшим 3.3.3), в которых способ Xkb (раздел “Настройка Xkb”) не работает.
В случае русификации через xmodmap первое, что вы должны сделать, — это отключить Xkb !
Чтобы отключить поддержку Xkb , в файле XF86Config изучите раздел Keyboard и закомментируйте все строки, начинающиеся с Xkb (регистр не имеет значения). Взамен добавьте следующую строку:
Программа xmodmap позволяет настроить коды, соответствующие различными символам и их комбинациям. Эта настройка основана на файле, содержащем таблицу перекодировки.
Я настоятельно советую вам самостоятельно не разбираться с xmodmap, по крайней мере для начала. Вы не получите ничего, кроме головной боли и разочарования. Вместо этого я рекомендую вам установить пакет xruskb, который позволяет вам сконфигурировать большинство входных параметров перекодировки без необходимости сталкиваться с xmodmap.
[5] В случае замены toggle на switch в комбинациях, описанных выше, переключение регистра возникает только на момент нажатия комбинации.
Источник
Ввод с клавиатуры линукс
Клавиатура к вашему компьютеру уже, скорее всего, подключена, вопрос может состоять только в том, чтобы настроить ее. Настройка клавиатуры заключается в настройке таких вещей, как:
- раскладка клавиатуры;
- скорость повтора посылаемых клавиатурой сигналов в случае удержания клавиш пользователем;
- длительность интервала задержки от момента нажатия клавиши до того момента, когда клавиатура начинает повторять посылку сигналов.
Два последних параметра (скорость повтора и время задержки) устанавливаются с помощью специальной команды kbdrate .
9.3.1. Команда kbdrate
Скорость повтора задается в символах в секунду и может принимать только определенные значения в пределах от 2 до 30 символов в секунду. Но задать (после опции –r) вы можете любое значение в этих пределах, программа сама выберет ближайшее допустимое значение. Число после опции -d задает задержку в миллисекундах (допустимы значения от 250 до 1000 с шагом 250). Чтобы не устанавливать эти значения после каждого перезапуска компьютера, можно добавить в файл /etc/rc.d/rc.sysinit сроку следующего вида:
/sbin/kbdrate -s -r 16 -d 500
где опция -s просто подавляет вывод ненужных в данном случае сообщений. Если эту команду выполнить без указания параметров, для скорости повтора и задержки будут установлены значения по умолчанию: для скорости повтора — 10,9 символов в секунду, а для задержки — 250 миллисекунд.
Еще один вопрос, относящийся к настройке клавиатуры, — это способ изменения положения переключателей NumLock, CapsLock и ScrollLock. Для этого можно воспользоваться командой setleds . Например, для того, чтобы переключатель NumLock был по умолчанию включен, добавьте в файл /etc/rc.d/rc.sysinit следующие строки:
for tty in /dev/tty7*; do
Изменение раскладки клавиатуры — это вопрос значительно более сложный. Но, поскольку этот вопрос имеет большое значение как вообще для настройки клавиатуры, так и для решения проблемы русификации, его необходимо рассмотреть подробнее.
И начать придется с краткого изложения проблем кодировки символов.
9.3.2. Таблицы кодировки символов
В человеческом мире информация представляется последовательностями символов. Каждый символ имеет каноническое изображение, которое позволяет однозначно идентифицировать данный символ. Шрифты задают разные варианты начертания символов.
В вычислительных машинах для представления информации используются цепочки байтов. Поэтому для перевода информации из машинного представления в человеческий необходимы таблицы кодировки символов — таблицы соответствия между символами определенного языка и кодами символов.
Самой известной таблицей кодировки является код ASCII (Американский стандартный код для обмена информацией), который был разработан для передачи текстов по телеграфу задолго до появления компьютеров. Этот код является 7 битовым, т. е. для кодирования символов английского языка, служебных и управляющих символов используются только 128 7-битовых комбинаций. При этом первые 32 комбинации (кода) служат для кодирования управляющих сигналов (начало текста, конец строки, перевод каретки, звонок, конец текста и т. д.).
При разработке первых компьютеров фирмы IBM этот код был использован для представления символов в компьютере. Поскольку в исходном коде ASCII было всего 128 символов, для их кодирования хватило тех однобайтовых кодов, у которых 8-й бит равен 0. Во второй половине кодовой таблицы (значения байта с 8-м битом равным 1) фирма IBM разместила символы псевдографики, математические знаки и некоторые символы из языков, отличных от английского (немецкие умляуты, французские диакритические знаки, символы греческого алфавита и т.п.). Эту кодовую таблицу стали называть кодировкой IBM.
Когда IBM-совместимые персональные компьютеры стали использовать в других странах, потребовалось обеспечить обработку информации на языках, отличных от английского. Для того, чтобы полноценно поддерживать другие языки, фирма IBM ввела в употребление несколько кодовых таблиц, ориентированных на конкретные страны. Так для скандинавских стран была предложена таблица 865 (Nordic), для арабских стран — таблица 864 (Arabic), для Израиля — таблица 862 (Israel) и так далее. В этих таблицах часть кодов из второй половины кодовой таблицы использовалась для представления символов национальных алфавитов (за счет исключения некоторых символов псевдографики). Для представления символов кириллицы была введена кодировка IBM-866.
Однако с русским языком ситуация развивалась особым образом. Очевидно, что замену символов во второй половине кодовой таблицы можно произвести разными способами. В других европейских странах сумели найти единое решение, а для русского языка появилось несколько разных таблиц кодировки символов кириллицы: IBM-866, CP-1251, KOI8-R, ISO-8859-5. Все они одинаково изображают символы первой половины таблицы (от 0 до 127) и различаются представлением символов русского алфавита и псевдографики во второй половине.
Одна из самых известных кодовых таблиц для кириллицы получила название альтернативной (по отношению к кодировке IBM-866, наверное). Она была разработана фирмой Microsoft для MS-DOS. При ее разработке постарались сделать так, чтобы результирующая таблица была насколько это возможно совместима с кодировкой IBM. Поэтому альтернативная кодировка — это кодировка IBM, в которой все специфические европейские символы в верхней половине были заменены на кириллицу, оставляя псевдографические символы нетронутыми. Следовательно, это не портило вид программ, использующих для работы текстовые окна, что было очень существенным фактором для работы в среде MS-DOS, основой которой был именно текстовый режим.
Кодировка KOI-8 была разработана изначально с ориентировкой на UNIX. Так как UNIX в своей основе сетевая ОС, то основной идей при создании KOI-8 была идея об обеспечении перемещения кириллической информации по сети. Но для передачи-то использовался 7-битный стандарт ASCII. Разработчики поместили кириллические символы в верхней части таблицы таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в нижней части таблицы. Это означает, что, если в тексте, написанном в KOI-8, мы убираем восьмой бит каждого символа, то мы все еще имеем "читабельный" текст, хотя он и написан английскими символами! Не удивительно, что KOI8-R быстро стал фактически стандартом для кириллицы в Интернет, что и нашло отражение в RFC 1489 ( "Registration of a Cyrillic Character Set"). Автором этого документа является Андрей А. Чернов, который проделал огромный объем работы, чтобы превратить KOI-8 в стандарт Интернет.
Международная организация по стандартизации (ISO) внесла свою лепту в создание различных кодировок кириллицы, когда ввела семейство стандартов, известных как ISO 8859-X. Это семейство есть совокупность 8-битных кодировок, где младшая половина каждой кодировки (символы с кодами 0—127) соответствует ASCII, а старшая половина определяет символы для различных языков. Например:
- 8859-0 — новый европейский стандарт (так называемый Latin 0);
- 8859-1 — Европа, Латинская Америка (также известный как Latin 1);
- 8859-2 — Восточная Европа;
- 8859-5 — кириллица;
- 8859-8 — идиш.
Фирма Microsoft еще больше запутала ситуацию с кодировками для русского языка, когда при разработке Windows ввела кодировку CP-1251.
Таблицы кодировок, содержащие 256 символов, стали называть расширенными кодами ASCII (потому что в основе любой из них лежит 128-символьный код ASCII), кодовыми страницами или английским термином character set (который часто сокращают до charset).
Но в мире есть языки, такие как китайский или японский, для которых 256 символов в принципе недостаточно. Кроме того, всегда существует проблема вывода или сохранения в одном файле одновременно текстов на разных языках (например, при цитировании). Поэтому была разработана универсальная кодовая таблица UNICODE, содержащая символы, применяемые в языках всех народов мира, а также различные служебные и вспомогательные символы (знаки препинания, математические и технические символы, стрелки, диакритические знаки и т. д.). Очевидно, что одного байта недостаточно для кодирования такого большого множества символов. Поэтому в UNICODE используются 16-битовые (2-байтовые) коды, что позволяет представить 65 536 символов. К настоящему времени задействовано около 49 000 кодов (последнее значительное изменение — введение символа валюты EURO в сентябре 1998 г.). Для совместимости с предыдущими кодировками первые 128 кодов совпадают со стандартом ASCII. На рис. 9.1 схематично представлено размещение символов разных языков в кодовом пространстве UNICODE.
Рис. 9.1. Структура UNICODE.
В стандарте UNICODE кроме определенного двоичного кода (эти коды принято обозначать буквой U, после которой следуют знак + и собственно код в шестнадцатеричном представлении) каждому символу присвоено определенное имя. В следующей таблице приведено несколько примеров кодов и имен символов из стандарта UNICODE.
Таблица 9.2. Примеры именования кодов UNICODE
Источник