В прошлом году был популярный розыгрыш с клавиатурой (http://www.yaplakal.com/forum2/topic181081.html), когда клавиши менялись в раскладку АБВГДЕ, в соответствии с рисунком ниже.
Самый смак такого прикола - заставить изнасилованную отвёрткой клавиатуру работать как надо. Чтобы каждый её режим (русская, английская раскладки, с шифтом и без шифта, с капслоком) работал как надо, чтобы все символы с такой клавиатуры можно было печатать в соответствии со значками на клавишах.
Наш дружный айтишный коллектив решил шутить над шефом.
Для реализации задуманного в виндуз народ использовал программу AKey (http://www.comfort-software.com/downloads.php?host=cs&name=ak_setup.exe), но наш клиент работал под линухом, что заставило немного напрячь мозг.
Сначала я хотел просто сделать новую русскую раскладку, назвать её как-нибудь типа ru-winkeys-izvrat, но это не принесло бы нужного результата, потому что латинский алфавит и спецсимволы оказались бы не на своих местах.
Решение возникло на основе того, что линух хранит коды клавиш клавиатуры в отдельном файле /usr/share/X11/xkb/keycodes/xfree86. Оставалось только переназначить клавиши (рутиная работа), заменить оригинальный файл (сделав его копию, естественно) и подгрузить в систему, для надёжности - перезагрузкой всего компьютера.
При редактировании /usr/share/X11/xkb/keycodes/xfree86 важно понимать одну вещь. Постоянная величина клавиши (в смысле места на клавиатуре, вне зависимости от того, что изображено на самой клавише) - это её код. Если у клавиши с изображением «`~ё» код 49, то какую клавишу вместо неё ни поставь - у неё тоже будет код 49. А вот <TLDE> - это как раз описание клавиши, которое указывает на то, что при нажатии на неё выдаётся один из символов из «`~ё», в зависимости от раскладки и сигнальных клавиш.
То есть, при написании <TLDE>=30 мы не переопределяем код клавиши. Мы указываем, что у клавиши с кодом 30 (конкретное место на клавиатуре) будет набор символов <TLDE>.
Ниже - исправленное содержимое файла xfree86.
... // Пропущенное содержимое буду обозначать троеточием, чтобы не загромождать код // Здесь начинается описание клавиатуры. Нас интересует алфавитная часть, // а именно - строка цифр и три строки букв. xkb_keycodes "basic" { minimum= 8; maximum= 255; // Здесь начинается строка цифр, от тильды до "Backspace". <TLDE> = 30; //49; //ё-, <AE01> = 11; //10; //1-0 <AE02> = 12; //11; //2-1 <AE03> = 13; //12; //3-2 <AE04> = 14; //13; //4-3 <AE05> = 15; //14; //5-4 <AE06> = 16; //15; //6-5 <AE07> = 17; //16; //7-6 <AE08> = 18; //17; //8-7 <AE09> = 19; //18; //9-8 <AE10> = 10; //19; //0-9 <AE11> = 20; <AE12> = 21; <BKSP> = 22; // Здесь пошли буквы. // Строки (в соответствии с клавиатурой) сохранялись только в оригинальном написании. // После нашей редакции получился просто список соответствий клавиш и кодов. <TAB> = 23; <AD01> = 34; //24; //й-а <AD02> = 52; //25; //ц-б <AD03> = 46; //26; //у-в <AD04> = 35; //27; //к-г <AD05> = 29; //28; //е-д <AD06> = 40; //29; //н-е <AD07> = 27; //30; //г-ё <AD08> = 54; //31; //ш-ж <AD09> = 55; //32; //щ-з <AD10> = 32; //33; //з-и <AD11> = 48; //34; //х-й <AD12> = 56; //35; //ъ-к <RTRN> = 36; <CAPS> = 66; <AC01> = 47; //38; //ф-л <AC02> = 57; //39; //ы-м <AC03> = 26; //40; //в-н <AC04> = 24; //41; //а-о <AC05> = 42; //"п" и "р" остаются на своих местах <AC06> = 43; <AC07> = 41; //44; //о-с <AC08> = 38; //45; //л-т <AC09> = 28; //46; //д-у <AC10> = 31; //47; //ж-ф <AC11> = 59; //48; //э-х <LFSH> = 50; <AB01> = 61; //52; //я-ц <AB02> = 53; //"ч" - на своём месте <AB03> = 44; //54; //с-ш <AB04> = 39; //55; //м-щ <AB05> = 33; //56; //и-ъ <AB06> = 45; //57; //т-ы <AB07> = 58; //"ь" - на своём месте <AB08> = 25; //59; //б-э <AB09> = 60; //"ю" - на своём месте <AB10> = 49; //61; //.-я <RTSH> = 62; ...
Кстати, если вы обратили внимание, верхний ряд нашей клавиатуры тоже изменён. Цифры считаются не от 1 до 0, а от 0 до 9.
Я надеюсь, у вас есть ssh-доступ к подопытной системе. Вам ещё обратно всё возвращать, а с абвгде-клавиатурой это не так и просто, особенно с нетривиальным паролем рута :)
PS. Год назад, когда мы это сделали, шеф первым делом пошёл на склад менять клавиатуру. Ха!