К вопросу оценки пэмин цифровых сигналов. клавиатуры. Имитируем работу клавиатуры Скан коды клавиш клавиатуры dinovo

К вопросу оценки пэмин цифровых сигналов. клавиатуры. Имитируем работу клавиатуры Скан коды клавиш клавиатуры dinovo
К вопросу оценки пэмин цифровых сигналов. клавиатуры. Имитируем работу клавиатуры Скан коды клавиш клавиатуры dinovo

Следующим типовым устройством ПЭВМ, вроде бы и несложным, но доставляющим, порою, хлопоты исследователю, является клавиатура.

В общем-то устройство несложное. Особенно ноне уже устаревшие модели, подключаемые к порту PS/2. Как показывают многочисленные экспериментальные данные микросхема управления «клавы» сканирует нажатия клавиш и передаёт в последовательном коде в порт. Тактовая частота этой передачи кратна (в подавляющем числе случаев) » 6,3 или 10 кГц. Хотя автору попались в самые последние года пара экземпляров, тактовая частота которых лежала в районе 20 кГц.

Все клавиатуры при нажатии и удерживании любой клавиши начинают (после некоторой паузы) повторять передачу кода клавиши «до бесконечности». В обычном режиме это, как правило, через несколько секунд приводит к переполнению буфера контроллера и нарушению работы. Появляется звуковой сигнал системного «динамика» - «писк». Суть тест-режима (самого общепринятого) заключается в блокировании команды переполнения буфера, что позволяет, при нажатой клавише, обеспечить бесконечную передачу по кабелю «клавы» выбранного символа.

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

10101010 (55) клавиша « +; = »

01010101 (АА) в типовых таблицах - не применяется

Общая таблица скан-кодов приведена в таблице 14.1

Таблица 14.1 - Скан-коды клавиатуры

Клавиша

Скан-код

Клавиша

Скан-код

Клавиша

Скан-код

Клавиша

Скан-код

Таким образом, при реализации тест-режима и, например, положенном на клавишу «+» грузике в кабеле «клавы» будет присутствовать бесконечная последовательность пакетов импульсов. При этом период следования импульсов в пакете (то есть тактовая частота), будет равна 6,10 или 20 кГц, а частота следования пакетов будет много ниже. Формат данных приведён на рисунке 14.1

Для обмена данными в кабеле клавиатуры служат две линии – KBData и KBSync. При передаче скан-кодов клавиатура выставляет очередной разряд данных на линии KBData и подтверждает передачу переводом из «1» в «0» сигнала на линии KBSync.

Контроллер может сигнализировать о своей неготовности передавать/принимать данные низким уровнем на линии KBSync. Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала.



Как следует из вышеприведённого, в спектре ПЭМИН кабеля клавиатуры следует ожидать частотных составляющих с тактовой частотой 1/76,04·10 -6 =13,15 кГц. Причём из-за наличия двух, сдвинутых по фазе, сигналов с разными (но кратными!) периодами, чётные и нечётные частотные составляющие будут отличаться по амплитуде.

Как и следует ожидать, ПЭМИН линии синхроданных неинформативен, в принципе. Но отличить один ПЭМИН от другого совсем непросто. Кабель один, сигналы синхронны…

Практически единственный способ – подобрать скан-код с минимальным числом логических «1» в посылке. Таковыми являются клавиши «F3» и F9» (03 и 01 в hex-коде). Код «00» не используется.

Осциллограмма скан-кода «F3» приведена ниже.


Строго «по энергетике», если измерить все частотные составляющие ПЭМИН с кодом «=» и, например, кодом «F9», то разность в показаниях приёмника на КАЖДОЙ из частотных составляющих и есть истинно информационная часть энергии ПЭМИН. Причём это максимум максиморум. Работа достаточно сложная и утомительная, если нет возможности поручить её «автомату». Сами-то составляющие ПЭМИН для столь низких частот выявляются не без труда. Так ещё и разности «ловить»…



В практике СИ, в подавляющем числе случаев, просто измеряют уровни ПЭМИН (ничего не вычитая) и считают параметр защищённости. Можно и так, «с запасом», но знать истинное положение дел специалист обязан.

В заключение рассмотрения - «распиновка» разъемов AT- и PS/2-клавиатуры.


«Картинки» на приёмнике выглядит далеко не так «классически», однако и он вполне узнаваем. Вот примеры



На спектре хорошо видно возрастание амплитуды компонент с уменьшением частоты.

Есть ещё особенности измерений «клавы» в этой частотной области (от десятков кГц и далее). Дело в том, что клавиатура, в обычном размещении, находится неподалеку от системного блока. А в верхней части СБ находится импульсный блок питания – мощнейший источник ПЭМИН и по «Е», и по «Н» компонентам. В «свете» такого театрального софита, тускловатый «свет» клавиатуры узреть – особое искусство! Поэтому предлагаю следующий приём. Отодвиньте «клаву» от СБ как можно дальше. Лучше – на удлинителе PS/2. Эдак метра на 2-2,5.

Разместите антенну так, чтобы на неё наводилось как можно меньше от СБ (сигнал, при полосе приёмника больше 10 кГц – сплошной спектр). И вот около так сориентированной, неподвижной антенны, начинайте крутить «клаву» и её кабель (не наоборот!). Тогда у Вас будет много больше шансов обнаружить сигналы ПЭМИН именно клавиатуры, увидеть компоненты ПЭМИН на экране анализатора воочую.

Всё вышеизложенное относилось к клавиатуре с интерфейсом PS/2. Но сейчас их массово заменяют клавиатуры с интерфейсом USB.

Вообще этот интерфейс достаточно подробно рассматривался совместно с принтерами. Однако будет нелишним дать некоторое «целеуказание» и относительно клавиатуры.

Вспомним построение пакетов для интерфейса USB, учитывая, что клавиатура подключается, строго, с low-speed (то есть, фактически по интерфейсу USB 1.0).

Максимальный размер полезной нагрузки DATA (payload) для low-speed устройств составляет 8 байт. То есть это, как раз, то, что требует скан-код клавиатуры.

Увидеть сигнал (именно данные) в линии USB оказалось не такой уж простой задачей. Тем не менее – вот что выявилось именно в кабеле типовой USB «клавы» модели GENIUS KB-06XE, конкретно в линии (проводе) «data +» (рисунок 14.10)


Эти две осциллограммы меняют друг друга с неустановленной (хаотической) периодичностью, причём «картинки» сигналов не зависят от нажатой клавиши клавиатуры (или ненажатой никакой). Никаких иных изменений в «переменной» части пакета (фрейма) выявить не удалось.

Периодичность следования этих пакетов жёстко стабилизирована (рис. 14.11), а длительность каждого составляет (видно на осциллограммах) около 34 ±1 мкс.


Пакеты следуют каждые 4 мс. Однако необходимо отметить, что окончание каждого пакета всё время «дрожит», причём заметно, классический «джиттер». Поэтому спектральная картинка несколько размыта и становится чёткой лишь при достаточно длительном усреднении.


Кроме того, следует учитывать, что из-за разных периодов следования импульсов и разной их длительности спектр носит характер некоторой смеси из спектра сплошного и линейчаатого. Тем не менее лепестковый характер спектра, естественный для бесконечной последовательности пакетов и кратный в своих «лепестках» средней длительности пакета, сохраняется весьма наглядно. Только «нули» функции сглажены джиттером и неременным периодом следования отдельных импульсов. Однако сама картинка вполне характерна. При более тонком частотном разрешении спектр начинает разрешаться на «линии», обусловленные частотой следования пакетов (250 Гц) (рис. 14.13)Таким образом, при простейшем и незасинхронизованном с истинной передачей скан-кода просмотре осциллограмм, выявить и визуализовать участки фрейма (пакета), отвечающий за передачу данных, не удалось. Тем не менее, можно утверждать, что ПЭМИН кабеля клавиатуры всё равно будет вот такой и никакой другой. Понятно, на каких частотах его искать, понятно, что он будет носить характер сплошного (во всяком случае, при частотном разрешении приёмника более 0,3 кГц). И понятно, какую величину подставлять при расчётах в качестве тактовой (минимальный период импульсов в пакете в эксперименте составил 1,322 мкс). Измерить это, при любых СИ, имея осциллограф, хотя бы с 200 МГц полосой – задача тривиальная. Тест-режим, по сути – любой, можно нажимать клавиши (любые), можно не нажимать ничего. Пакеты по интерфейсу передаются всё равно. И, в первом приближении, считаем их информативными (пока не доказано обратное).

Приведённые осциллограммы и спектры получены с помощью осциллографа АКИП-4108/2, подключённому к тому же компьютеру, на котором выполнялись измерения (надо заметить – весьма функциональный повтор разработки фирмы «PICO Technology» нашими. Не хуже китайцев:)) .

Спектр явно уходит далеко за 1 МГц (больше не позволил осциллограф, а подключать анализатор большого смысла не было). Остальное обусловлено уже кабелем, как случайной антенной и степенью его экранирования.

Для иных режимов интерфейса USB нужен уже осциллограф с полосою в многие ГГц.

Как именно считать сплошной спектр и, при этом, остаться в рамках действующих НМД – разговор отдельный и не для открытого обсуждения, увы… Однако в последующих публикациях придётся к нему вернуться, деваться некуда. Попытаюсь «остаться в рамках дозволенного»…

  1. В верхней части окна Google Play есть поисковая строка. Именно ею мы и воспользуемся. Активируем и пишем название нашего приложения. Вводить его до конца необязательно. Как только в поисковой выдаче появится обозначенный на скриншоте объект, просто тапайте по нему.
  1. Мы будем переадресованы на домашнюю страничку программы. Тут есть большая зеленая кнопка с надписью «УСТАНОВИТЬ». Нажмите ее.
  1. Дожидаемся окончания скачивания приложения. Так как оно «весит» немногим менее 5 МБ, процесс не займет много времени.
  1. Готово. После того как автоматическая инсталляция будет окончена, мы сможем запустить программу прямо отсюда.
  1. Также на домашнем экране (если активировано в настройках) появится ярлык запуска.

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

На скриншоте ниже вы видите программный интерфейс. Тут он поделен на 3 основные вкладки. Также есть иконка настроек, выполненная в виде шестеренки. На главной вкладке «SCAN» находятся 4 основных инструмента:

  • Scan Barcode. Это и есть сканер QR, который работает посредством камеры;
  • Manual Key-in. Функция ручного ввода данных о коде;
  • Decode from File. Декодирование из файла. Отсюда можно открыть ранее загруженный QR-код и считать его;
  • Decode from Url. Сканирование по ссылке.

Внизу находятся несколько кнопок, не несущих полезного функционала. На них обращать внимание не следует.

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

Например, на первом экране можно включить или отключить звук программы. То же самое получится сделать и с виброоткликом. Можно задать режим работы, когда программа начнет запускаться сразу со сканера, минуя главное меню. Еще одной важной особенностью является автоматическое копирование данных в буфер обмена.

Как только мы захотим начать сканирование и запустим сам сканер, программа запросит доступ к нужным системным ресурсам. Естественно, его нужно разрешить. Жмем кнопку, отмеченную на скриншоте.

Далее, наводим рамку сканера так, чтобы горизонтальная полоска попала прямо на QR. Старайтесь чтобы ваши руки не дрожали и в то же время следите за фокусировкой. Без нормальной резкости сканирование не удастся.

Для работы QR BARCODE SCANNER в условиях недостаточной освещенности присутствует подсветка.

Как только код будет распознан, вы увидите информацию, приведенную на скриншоте ниже.

Кроме сканирования QR тут можно также создавать их. Для этого переходим в третью вкладку. Мы отметили ее на скриншоте. В виде списка приведены все типы данных, которые можно зашифровать. Поддерживается следующее:

  • контакт телефонной книги;
  • номер телефона;
  • URL-адрес;
  • Email;
  • приложение;
  • местоположение;
  • любой текст;
  • закладка;
  • событие календаря.

Выглядит все это следующим образом:

Когда тип данных будет выбран и задан, нам остается лишь нажать кнопку «Encode». В данном случае мы зашифровали ссылку.

Давайте попробуем зашифровать также произвольный текст. Для этого выбираем нужный пункт.

Вводим фразу в обозначенное поле и жмем кнопку «Encode».

Результат выглядит прекрасно. Давайте еще поменяем его цвет. Жмем кнопку, предназначенную для этого.

Выбираем нужный оттенок из палитры.

И любуемся полученным QR.

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

QR Droid Code Scanner

Еще одно приложение, найти которое можно в Google Play. Также вы можете скачать его по прямой ссылке на сайте Google . Мы же пока рассмотрим саму программу.

Так выглядит ярлык запуска QR Droid Code Scanner – жмем по нему.

Данное приложение, в отличие от предыдущего, выполнено на русском языке и, как только оно запустится, нам понадобится нажать на кнопку с надписью: «НАЧАЛО РАБОТЫ».

Сразу же виден сканер, но для начала давайте разберемся с его настройками. Тапаем по кнопке, расположенной в верхнем правом углу.

В главном меню видны 6 плиток-кнопок, которые переадресуют пользователя в нужный раздел. Вот они:

Итак, для того чтобы воспользоваться сканером, нужно активировать его в главном меню и, наведя на QR-код, нажать кнопку «Считать».

Тут выбирается стартовый экран, задается адрес для резервного копирования и настраивается язык программного интерфейса.

Далее мы можем установить механизм сканирования. Используется один из фирменных алгоритмов: Zapper или ZXing. Ниже получится включить или отключить перекрестие, настроить автоматическое действие после сканирования и включить отображение подсказок или копирование ссылки в буфер обмена.

В данном разделе настраивается звуковое сопровождение, включается и выключается вибро. Также конфигурируется процесс записи действий в журнал и взаимодействие с умными часами Android Wear.

Затем у нас получится экспортировать или импортировать резервную копию или установить дату.

Разрешить отправку анонимных данных (лучше отключить), активировать проверку получаемой при сканировании ссылки на безопасность или настроить пакетное сканирование. Ниже доступны такие функции, как масштабирование или подсветка.

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

  • настройка ориентации экрана;
  • работа с фронтальной камерой;
  • парсинг ссылок;
  • показ магазинов.
  • функция расширенного описка;
  • запрет некоторых спецсимволов;
  • активация WEB-предпросмотра;
  • поиск сохраненных изображений.

Последний экран настроек содержит такие интересные функции, как: настройка максимального количества позиций, конфигурация пользовательских CSV, встряхивание «умных» часов и сохранение повторяющихся позиций.

Кроме настроек в меню QR Droid Code Scanner присутствует пункт под названием «Еще». Рассмотрим его функционал.

Тут имеются такие возможности:

Рассмотрим последнее, но от этого не менее функциональное, приложение в нашем списке.

NeoReader QR & Barcode Scanner

Данную программу, как и другие, вы можете скачать и установить через Google play либо по прямой ссылке . Когда это будет сделано, можно переходить непосредственно к работе с нею.

При первом запуске нам потребуется удовлетворить запрос доступа. Жмем «РАЗРЕШИТЬ».

Затем появится окно с настройками. Тут получится выбрать язык, указать свои страну, пол и возраст. Две галочки, размещенные ниже, позволяют включить или отключить доступ программы к геоданным.

Можно, собственно, приступать к сканированию. Наведите камеру на QR-код и NeoReader QR & Barcode Scanner автоматически распознает его содержимое.

Мы думаем, что этих трех программ полностью хватит для любого человека. Выберите наиболее удобную для вас и используйте на свое усмотрение. Мы же поговорим о некоторых особенностях китайских девайсов.

Стандартный функционал

В некоторых смартфонах и планшетах (в зависимости от марки) есть функционал сканирования QR-кодов в штатном исполнении и сделать все можно без приложения. Не будем перечислять их все, затронем лишь модель от Xiaomi.

Подводим итоги

В результате мы с вами узнали, как сканировать QR-код на Андроид разными способами. Надеемся статья оказалась для вас полезной. Если вопросы все же остались, задавайте их в комментариях. Мы постараемся помочь каждому.

Если даже этого не произойдет, кто-нибудь из пользователей, находящихся на сайте, обязательно подскажет как выйти из ситуации и даст дельный совет. Вам останется только воплотить его в жизнь.

Видеоинструкция

Номер клавиши, посылаемый клавиатурным процессором, однозначно зависит от схемы клавиатурной матрицы, но не от обозначений, нанесенных на поверхность клавиш. Этот номер называется скан-кодом (Scan Code). Слово scan ("сканирование"), подчеркивает тот факт, что клавиатурный компьютер сканирует клавиатуру для поиска нажатой клавиши.

КодAscii нажатой клавиши

Обычно программе нужен не порядковый номер нажатой клавиши, а код, соответствующий обозначению на этой клавише (код ASCII).

Код ASCII не связан напрямую со скан-кодом, так как одной и той же клавише могут соответствовать несколько значений кода ASCII в зависимости от состояния других клавиш. Например, клавиша с обозначением «1» используется еще и для ввода символа «!» (если она была нажата вместе с клавишей).

Поэтому все преобразования скан-кода в код ASCII выполняются программно. Как правило, в операционной системе MS-DOS эти преобразования выполняют модули BIOS. Для использования символов кириллицы эти модули расширяются клавиатурными драйверами, как входящими в состав локализованных версийMS-DOS, так и созданными в виде отдельных программ.

Режим автоповтора

Если нажать на клавишу и не отпускать ее, клавиатура перейдет в режим автоповтора. При этом в компьютер автоматически через некоторый период времени, называемый периодом автоповтора, посылается код нажатой клавиши. Режим автоповтора облегчает ввод с клавиатуры большого количества одинаковых символов.

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

Типы клавиатур

До недавнего времени существовали три различных типа клавиатуры. Это клавиатура для компьютеров IBM PC/XT, 84-клавишная клавиатура для IBM PC/AT и 101-клавишная (расширенная) клавиатура для IBMPC/AT. Некоторые клавиатуры имеют переключатель режима работы (XT/AT), расположенный на нижней крышке. Он должен быть установлен в правильное положение.

После того как операционная система Microsoft Windows получила широкое распространение, специально для нее был создан новый тип клавиатуры. К обычной клавиатуре типа IBMPC/AT были добавлены две кнопки, первая из которых дублирует вызов менюStart, выполняемый при помощи левой клавиши мыши, а вторая – вызов того же меню при помощи правой клавиши мыши.

Порты для работы с клавиатурой

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

КомпьютерIbm pc/xt

Для работы с клавиатурой типа IBM PC/XT используются порты с адресами 60h и 61h.

Порт 60h доступен только для чтения. После выполнения этой операции он содержит скан-код последней нажатой клавиши.

Порт 61h доступен как для чтения, так и для записи. Он управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 - разблокирована.

Так как порт 61h управляет не только клавиатурой, при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта. Для этого можно сначала выполнить чтение содержимого порта в регистр, изменить состояние старшего бита, затем выполнить запись нового значения в порт.

Большинство современных клавиатур снабжено мультимедийными клавишами, да и мышки уже имеют от трех до семи кнопок. На диске, идущем в комплекте, и на сайте производителя доступны драйверы и всяческие полезные программы только для Windows. Всем известно, что Linux славится своей возможностью настроить систему под себя, если, конечно, знать, где и что настраивать. Наша задача - научить пингвина работать с дополнительными батонами.

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

Что бы ты там не нажимал на своей клавиатуре, X-серверу и ядру, в общем-то, все равно, что на ней написано или нарисовано. Их интересуют исключительно скан-код кнопки, причем сначала иксы считывают таблицу кодов клавиш ядра, а затем уже код клавиши привязывается к собственной таблице кодов. Если в Windows проблемы настройки мультимедийных клавиш в консоли как таковой не существует, то в Linux приходится отдельно настраивать реакцию на нажатие кнопок в консоли и в X-Window.

Чтобы узнать код клавиши, следует использовать утилиту xev, входящую в состав Х-сервера. После ее запуска появляется окно Event Tester, теперь последовательно нажимаем клавиши, запоминая выдаваемый код:

$ xev
...
KeyRelease event, serial 31, synthetic NO, window 0x3e00001,
root 0x67, subw 0x0, time 279734676, (311,611), root:(1104,687),
state 0x2000, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES,

XFilterEvent returns: False
KeyRelease event, serial 31, synthetic NO, window 0x2600001,
root 0x67, subw 0x0, time 265877259, (883,334), root:(886,358),
state 0x0, keycode 161 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

Вывод может быть огромен, так как отслеживается каждое движение мышки при проходе над окном Event Tester. Клавишу описывает блок KeyRelease, в частности, значение keycode как раз и является скан-кодом, который мы хотим узнать. В приведенном примере нажаты две клавиши. Клавише с кодом 236 соответствует код клавиши для X-сервера, указанный в keysym, а также действие XF86Mail, которое в KDE запускает используемый по умолчанию почтовый клиент. Для клавиши с номером 161 код и действие не определены.

Возможна ситуация, когда клавиша нажимается, но ее скан-код не выдается. Это означает, что ядро не может найти соответствующее значение. В выводе dmesg должна быть такая строка:

Use "setkeycodes 0xec " to make it known.

То есть тебе предлагают установить скан-код клавиши самостоятельно при помощи setkeycodes, при этом значение keycode выбрать очень просто. Переведи полученную цифру в десятичное число (большинство калькуляторов это умеют) и прибавь 128. В данном примере 0xec=236, то есть получаем скан-код 364. Если есть сомнения, список задействованных и незадействованных скан-кодов можно просмотреть, запустив в консоли утилиту getkeycodes или dumpkeys. Например, если вывод «getkeycodes | grep <код клавиши>» ничего не дал, значит этот код можно смело использовать.

Помочь определить скан-код способна и утилита ХKeycaps (www.jwz.org/xkeycaps), которая является графическим фронт-эндом к Xmodmap.

В консоли программа xev, разумеется, не работает. Чтобы узнать скан-код, выдаваемый ядром, следует использовать утилиту showkey или getkeycodes:

$ showkey
клавиатура была в режиме UNICODE
нажмите любую клавишу (программа завершится через 10 сек после последнего нажатия)...
0xe0 0x6c 0xe0 0xec

Первые две цифры соответствуют нажатой клавише, вторые – отсутствию нажатия.

Настройка привязки скан-кодов в X-Window

Итак, скан-коды теперь у нас есть, нужно указать Х-серверу, что он, собственно, должен делать при нажатии этой клавиши, то есть присвоить ей символьное имя. Список символьных имен приведен в файле заголовков XF86keysym.h. По умолчанию заголовочные файлы Х-сервера в современных дистрибутивах не устанавливаются. Чтобы увидеть его в Ubuntu, нужно установить пакет x11proto-core-dev, после чего этот файл будет лежать в каталоге /usr/include/X11. Как вариант - можно обратиться к CVS-серверу X.Org . Смотрим:

$ cat /usr/include/X11/XF86keysym.h
/*
* Keys found on some "Internet" keyboards.
*/
#define XF86XK_Standby 0x1008FF10
#define XF86XK_AudioLowerVolume 0x1008FF11
#define XF86XK_AudioRaiseVolume 0x1008FF13
#define XF86XK_AudioPlay 0x1008FF14
#define XF86XK_AudioStop 0x1008FF15
#define XF86XK_Mail 0x1008FF19

Если мы сравним последнюю строку с выводом xev, то увидим, что значения совпадают с клавишей с keycode 236 - keysym 0x1008ff19, XF86Mail (без суффикса XK_). Список всех доступных значений в том виде, в каком они должны использоваться, ты найдешь в /usr/share/X11/XKeysymDB.

Составить свой вариант раскладки можно двумя способами: создать описание своей клавиатуры или использовать Xmodmap. Последний способ самый простой, поэтому о нем и будем говорить далее. В домашнем каталоге пользователя создаем файл.Xmodmap, в который заносим желаемые значения:

$ mcedit ~/. Xmodmap

keycode 161 XF86Calculator
keycode 174 XF86AudioLowerVolume
keycode 176 XF86AudioRaiseVolume
keycode 162 XF86AudioPause

И так далее, принцип, думаю, ясен. Причем код клавиш можно заносить как в десятичном, так и шестнадцатеричном виде. По моим наблюдениям, коды большинства клавиш стандартизированы. Поэтому, если ты один раз настроишь реакцию на нажатие клавиши и перенесешь файл на другой комп, есть вероятность, что на другой клаве реакция на нажатие также подписанной клавиши будет аналогичная. Пользователи рабочего стола Gnome с GDM могут прописать все эти строки в общесистемный файл /etc/X11/Xmodmap.

В других случаях нам еще нужно указать X-серверу, чтобы он использовал созданный файл. В разных дистрибутивах это реализовано по-разному, основная идея состоит в запуске команды /usr/bin/xmodmap $HOME/.Xmodmap при входе пользователя в систему или при старте Х. Тут уже каждый танцует, как хочет. На форумах предлагают использовать файл $HOME/.xsession (в некоторых дистрибутивах он может называться.Xsession), .xprofile или системный /etc/X11/Xsession. И боюсь, что это далеко не все возможные варианты. Давай посмотрим, как сделано в KUbuntu:

$ sudo grep -iR xmodmap /etc

В результате находим прелюбопытнейший файл /etc/X11/Xsession.d/80ubuntu-xmodmap такого содержания:

$ cat /etc/X11/Xsession.d/80ubuntu-xmodmap

/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || true

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; then
if [ -f "$USRMODMAP" ]; then
/usr/bin/xmodmap "$USRMODMAP" || true
fi
fi

То есть загружается содержимое файла ubuntu.xmodmap и пользовательский.Xmodmap, если он существует. Открыв в редакторе ubuntu.xmodmap, ты обнаружишь список keycode и сопоставленные символьные имена. Отсюда можно сделать вывод: если разработчик сообщает о том, что его дистрибутив поддерживает мультимедийные клавиатуры, то с большой долей вероятности можно найти подобный файл. В других дистрибутивах присутствует аналогичная система запуска пользовательских xmodmap-файлов.

Теперь, когда символьные имена клавишам присвоены, можно назначать им желаемые действия. Некоторые оконные среды вроде KDE умеют отрабатывать действия по символьным именам. Так, при нажатии кнопки с XF86AudioPlay (ВОПРОС) начинает воспроизведение плеер, используемый по умолчанию. Чтобы установить нужную комбинацию, достаточно зайти в «Центр управления KDE -> Региональные и специальные возможности -> Комбинации клавиш» (в KUbuntu ищи в «System Setting -> Keyboard & Mouse»). Аналогичный пункт меню есть и в Gnome (можно просто вызвать gnome-keyboard-bindings), и в XFce. Плюс некоторые программы вроде Amarok, Konqueror, MPD также умеют обрабатывать нажатия клавиш. В других средах, не имеющих
графических средств настройки, скорее всего, потребуется ручное вмешательство в конфигурационные файлы. Например, чтобы в IceWM по нажатии клавиши с символьным именем XF86AudioPlay запускался проигрыватель XMMS, а при повторном нажатии он становился на паузу, в файл ~/.icewm, появляющийся после первого запуска, следует добавить строку:

$ mcedit ~/.icewm

key XF86AudioPlay xmms --play-pause

В Fluxbox строка для запуска проигрывателя будет выглядеть так:

$ mcedit ~/.fluxbox/keys

None XF86AudioPlay:ExecCommand xmms --play-pause

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

Настройка реакции в консоли

В консоли порядок действий несколько иной. Как ты помнишь, вывод dmesg рекомендовал назначить клавишные коды с помощью команды setkeycodes. Но здесь есть отличия - клавишных команд в консоли не может быть больше 128, следует выбирать значения от 0 до 127:

$ setkeycodes 0xec 118

Посмотреть свободные значения можно в файле текущей клавиатурной раскладки. В Ubuntu и всех дистрибутивах, базирующихся на Debian, это обычно /etc/console-setup/boottime.kmap.gz. Если после запуска проблем с клавишами нет, заносим эту строку в один из стартовых скриптов, например в /etc/init.d/rc.local.

Теперь осталось задать соответствие клавиши и выполняемого действия. Здесь простор для творчества даже больше, чем в иксах. В keymaps(5) процедура установки соответствия keycode выглядит следующим образом:

{ plain | } keycode keynumber = keysym

# Переключение консоли на одну назад при нажатии на клавишу с кодом 105
keycode 105 = Decr_Console
# Переключение консоли на одну вперед при нажатии на и клавишу с кодом 106
alt keycode 106 = Incr_Console

Но можно создавать и свои варианты, указывая команду в переменных:

keycode 120 = F100
string F100 = "/sbin/shutdown -h now\n"

Другими словами, по нажатии клавиши с кодом 120 будет выполнено действие, указанное в переменной F100; в нашем случае задано выключение компьютера. Вместо F100, естественно, можно использовать любое другое имя.

Теперь не менее важная часть - куда все это записывать. В документации и в многочисленных советах предлагается использовать текущий файл консольной раскладки (в моем случае - boottime.kmap.gz). Кстати, это единственный файл описания раскладок, доступный после установки KUbuntu; чтобы увидеть остальные варианты, следует установить пакет console-data. После этого в /usr/share/keymaps/i386/ можно обнаружить несколько подкаталогов с файлами внутри. Но если тебе понадобится перейти на другую раскладку (в Ubuntu и некоторых других дистрибутивах для этих целей используется файл /etc/default/console-setup или ~/.console-setup), все настройки нужно будет перенести в другой файл, что несколько
неудобно. Если ты все-таки решишься на этот шаг, используй имеющиеся записи как шаблон, ничего не записывая на первую позицию, а в конце не забудь оставить пустую строку.

Немного о ноутбуке

Пока мне не попадался ноутбук, скан-коды клавиш которого определить не удалось бы. Поэтому настройки здесь ничем не отличаются от описанных выше. Хотя есть один прием, о котором хотелось бы рассказать. Я считаю очень удобным в использовании режим гибернации, когда, включив компьютер, обнаруживаешь все на своих местах. Современные дистрибутивы, как правило, его поддерживают, хотя настройка, в общем-то, несложна - достаточно установить пакет hibernate и переопределить необходимые параметры в конфигурационном файле. Единственное, каждый раз для перехода в этот режим нужно запускать скрипт /usr/sbin/hibernate, что не всегда удобно. Хочется просто закрыть крышку ноутбука, а вновь включив
питание, обнаружить все на своих местах.

Это очень просто сделать, используя демон acpid, который представляет собой нечто вроде пользовательского интерфейса, позволяющего управлять любыми событиями ACPI, доступными через /proc/acpi/event. При этом acpid читает набор конфигурационных файлов из каталога /etc/acpi/events/. Если пакет с демоном в дистрибутиве отсутствует, устанавливаем его из репозитария; последнюю версию можно взять с сайта phobos.fs.tum.de/acpi . После установки необходимо в каталоге /etc/acpi/events создать два файла: lid и power. Первый описывает реакцию на закрытие крышки, второй - на нажатие кнопки включения питания.

$ sudo mcedit /etc/acpi/events/lid

event=button/lid.*
action=/usr/sbin/hibernate

$ sudo mcedit /etc/acpi/events/power

event=button/power.*
action=/sbin/shutdown -h now

Это несколько упрощенные варианты, в KUbuntu ты найдешь более сложные скрипты. После этого требуется перезапуск демона acpid:

$ sudo /etc/init.d/acpid restart

Теперь при закрытии крышки ноутбука система будет впадать в спячку с выключенным питанием, а при нажатии на кнопку питания - выключаться. Просто и удобно.

Программы настройки

Если тебе не по душе возня с конфигурационными файлами, предлагаю несколько программ, которые помогут настроить работу мультимедийных клавиш. Например, первоначальное назначение программы Sven (sven.linux.kiev.ua) - настройка дополнительных клавиш на мультимедийной клавиатуре, но, начиная с версии 0.4, она умеет исправлять ошибки при наборе текста и изменять клавиатурную раскладку. Более того, даже если у тебя обычная клава, с ее помощью ты сможешь эмулировать мультимедиа-клавиши, использовав вместо них клавиатурные сочетания. Также можно назначить действия на определенные кнопки мыши. Она понимает приблизительно 10 000 русских слов и 9 500 английских. Если программа не переключилась
сама, то раскладку можно изменить и вручную, при помощи специально заданной клавиши (по умолчанию Break). Отдельной клавишей (Scroll Lock) можно изменять регистр слов (верхний, нижний, первая буква - верхний, остальные - нижний). Индикатор-переключатель раскладки клавиатуры запоминает свое состояние для каждого окна, поэтому, часто переключаясь между приложениями, тебе уже не нужно будет дополнительно изменять и раскладку. Программа имеет большие возможности, и я бы советовал на нее взглянуть. Все настройки производятся при помощи графической программы, построенной на библиотеках GTK+. Sven тестировался в Linux, но в принципе должен работать и на *BSD-системах. Используемый оконный менеджер
не имеет значения.

Возможности KeyTouch (keytouch.sf.net) несколько скромнее, эта утилита применяется исключительно для настройки мультимедийных клавиш. Хотя с ее помощью любой клавише можно назначить свое действие, отличающееся от установок по умолчанию. На сайте программы, кроме исходных текстов и пакетов для некоторых дистрибутивов, можно найти готовые настройки для мультимедийных клавиатур большинства известных производителей.

Еще одно интересное решение - xbindkeys (hocwp.free.fr/xbindkeys/xbindkeys.html) - позволяет присваивать любой кнопке клавиатуры и мышки любые команды, в том числе и команды оболочки. Все настройки производятся в конфигурационном файле, который имеет простой и понятный формат.