от alabal(15-08-2006)

рейтинг (25)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Как да настроим неподдържаните мултимедийни клавиши.

Тази статия описва личния опит на автора при настройването на мултимедийни клавиши с помощта на програмите lineak или hotkeys под Debian. Тези две програми са лесни за използване и поддържат голям набор от готови за използване конфигурационни файлове за множество клавиатури, но разбира се не всички. Авторът попадна на най-тежкия случай на неподдържана мултимедийна клавиатура и по долу е представен неговия опит за решаване на този проблем. Статията не претендира за пълнота и изчерпателност. Вероятно в статията са допуснати грешки при използването на понятията, командите и изборът на скриптове. Всеки коментар, забележка или предложение ще бъде от полза.
Описаните действия за настройка на клавишите в голямата си част не зависят от използваната дистрибуция. Разлики може да има в т.1 – инсталиране и т.5 – при избора на стартиращи скриптове и специфичните за всяка дистрибуция директории в които трябва да бъдат разположени тези скриптове. За инсталация от сорс – вж. статията на Мирослав Йорданов.
За написването на статията са използвани основно man pages за lineakd и hotkeys, както и документацията на сайта на Lineak Project и конкретно Documentation: Keyboard support HOWTO.Други полезен източници който бяха неоценимо полезни бяха Gentoo Forums и споменатата статията на Мирослав Йорданов.

Преди да започнем, няколко думи за двете тествани програми от автора програми – lineak и hotkeys. Сходството между тях е много голямо и като конфигурационни файлове, като възможности и действие. И двете нямат действащи графични конфигуратори. Единственото предимство за мен на lineak пред hotkeys беше по-доброто управление на командата -remote на mozilla и firefox. Това предимство е значимо, само ако използвате някой от тези браузъри и искате да отваряте определени страници с един клавиш.
Освен всички плюсове, които открих от използването на мултимедийните клавиши се оказа, че освен осемте клавиша на моята клавиатура мога да събудя и добавя към тях всички останали „мъртви бутони“ - winmenu, winproperties и пр.

И тъй:

1. Някои характеристики:
OS: Debian unstable, kernel-2.6.11, i686
WM: Xfce4, GNOME
Login Manager: GDM
Клавиатура: Compaq kb-9963 (такъв бе заявения на гърба й модел, който последствие се оказа, че или не съответства или това е някаква странна модификация). Фирмените драйвери са всъщност софтуер предназначен за Windows, който работи като демон и не се отнася към специфичен модел клавиатура. (The Easy Access Keyboard – Software for Commercial Desktops.)

2. Инсталация на lineak и/или hotkeys:
apt-get update
apt-get install lineakd lineak-xosdtplugin
(apt-get install hotkeys)

3. Първоначална настройка на клавиатурата:

3.1.Списък с поддържани клавиатури
lineakd -l (hotkeys -l)

3.2. Задаване на клавиатура:
lineakd -c CIK18g (hotkeys -t hp5181)
Ако в списъка не откриете вашата клавиатура използвайте тази която е от същия производител и има най-много мултимедийни клавиши – шансът за съвпадения е много висок. Посочените са примерни и бяха тези които авторът използва.

3.3. Конфигурация на клавиатурата:
nano ~/.lineak/lineakd.conf (nano /etc/hotkeys.conf)
И двата конфигурационни файла са достатъчно ясни. След редакцията lineakd.conf може да бъде копиран в /etc и да се използва като конфигурационен файл за всички потребители, но ако съществува .lineak/lineakd.conf в потребителската директория той ще бъде основния файл, а не този в /etc.
Ако дотук всичко е наред и всички клавиши реагират – вие сте късметлии.
Пуснете lineak -v (hotkeys – без опции) за да видите какво точно се случва.
Ако нещата не са в ред и някои от мултимедийните клавиши не реагират, има два варианта:

4. Разлика между клавишните кодове и дефинициите на lineak и hotkeys.

4.1.Установяване на клавишните кодовете:

В конзола напишете:
xev
и последователно натискайте мултимедийните клавиши. При натискане, ако късметът не ви е напуснал съвсем, ще видите нещо подобно:

KeyRelease event, serial 29, synthetic NO, window 0x2800001,
root 0x8d, subw 0x0, time 4280397, (166,-17), root:(1259,36),
state 0x10, keycode 72 (keysym 0xffc3, F6), same_screen YES,
XLookupString gives 0 bytes: ""

това което е необходимо е „ keycode 72“. Направете същото с всички клавиши които ви интересуват и записвате клавишните кодове (keycode).

4.2. Промяна на дефинициите.
nano /etc/lineakkb.def (nano /usr/share/hotkeys/hp5181.def)
a) При lineakkb.def – просто копирате някоя секция за клавиатура и я пастирате на края на файла преди реда:
#### END X-Tensions Keyboards ####
Променяте [CIK18g] както желаете, например на [MINE] и също така [END CIK18g] на [END MINE]
Срещу редовете записвате новите стойности на клавишните кодове, които получихте от xev.
ВНИМАНИЕ! Клавишната комбинация съответства на очаквано действие от lineak – те са стандартни, така че използвайте точно такива каквито са записани във файла – не импровизирайте. После тези клавиши ще се появят в lineakd.conf с определеното им име и там вече може да им зададете каквито желаете команди.

Например в lineakkb.def е възможно да имате следния ред:

Shop = 178
след lineakd -c MINE в ~/.lineak/lineakd.conf
Ще се появи реда:
Shop =
и тук може да зададете каквато желаете команда, оградена в двойни кавички.

б) При hotkeys – първо запишете файла hp5181.def под ново име, например mine.def в /usr/share/hotkeys/ след което го редактирайте по подобен начин, като запишете новите клавишни кодове.

След което изпълнете:
lineakd -c MINE (hotkeys -t mine)
и настройте действията на клавиатурата.

И така стигаме до най-тежкия вариант:

5.Липса на клавишни кодове.
5.1. Присвояване на кодове на неизвестните клавиши.
Ако xev не реагира колкото и да натискате мултимедийните клавиши, преминете в конзола и като роот напишете:
dmesg
ако клавишите ви нямат кодове ще видите нещо като това:

atkbd.c: Unknown key pressed (translated set 2, code 0x93 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e013 ' to make it known.
atkbd.c: Unknown key released (translated set 2, code 0x93 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e013 ' to make it known.

В такъв случай трябва да отворите файла /usr/include/linux/input.h и сами да установите какви кодове са ви необходими. Например за клавиша, който би трябвало да управлява браузъра, редът за него ще изглежда така:
#define KEY_WWW 150
за мейл-клиента:
#define KEY_MAIL 155 и т.н.

Сега трябва кодовете да бъдат зададени за съответния клавиш:
setkeycodes e013 150
setkeycodes e014 155

След като зададете клавишните кодове трябва да се върнете към xev (да го напишете отново в конзола) и да видите какъв е keycode за съответния клавиш. Ако отново не получавате keykode означва, че грешно сте въвели първите кодове (е013) в setkeykodes. Запишете всички числа, по начин по който по-късно ще можете да се ориентирате кое какво е. Те са три за всеки клавиш – две за setkeykodes и едно за keycode от xev (този код е се използва от X-са).

Повторете упражнението със setkeykodes за всички клавиши. Ако сте си свършили добре работата при dmesg няма да получавате повече съобщения за грешки.

Ето как се получи при мен:

(клавишите които нямаха кодове)
setkeycodes e023 150
setkeycodes e01f 157
setkeycodes e01a 217
setkeycodes e01e 215
setkeycodes e013 216
setkeycodes e014 164
setkeycodes e015 163
setkeycodes e01b 165

(моята клавиатура в lineakkb.def)

[MINE]
brandname = "Compaq"
modelname = "IK"
[KEYS]
Play = 162
Previous = 144
Next = 153
Mail = 120
Communities = 121
Internet = 178
Search = 229
Go = 235
VolumeDown = 78
Mute = 111
VolumeUp = 110
LWindows = 115
RWindows = 116
Properties = 117
[END KEYS]
[END MINE]

(част от lineakd.conf)

Communities = "gaim"
Go = "nautilus --browser --no-desktop"
Internet = "firefox"
Mail = "mozilla-thunderbird"
Mute = EAK_MUTE
Next = "beep-media-player --fwd"
Play = "beep-media-player --play-pause"
Previous = "beep-media-player --rew"
Search = "firefox -remote 'OpenUrl(http://linux-bg,new-tab)'"
VolumeDown = EAK_VOLDOWN
VolumeUp = EAK_VOLUP
LWindows = "firefox -remote 'OpenUrl(about:blank,new-tab)'"
Properties = "xchat"
RWindows = "gnome-terminal"

*Забележка – левия, десния уиндоуски бутони, както и т.нар. бутон properties са стандартни и и имат кодове 115, 116 и 110. За намаляване, увеличаване и mute използвам Print Scrn, Scroll Lock и Pause/ Break – съответно 111, 78, 110. Останалите осем бутона са откровено мултимедийни и нямаха присвоен код.

5.2. Запис на кодовете.
Сега е необходимо да запишете кодовете (keycode) в lineakkb.def (или /usr/share/hotkeys/mine.def), както бе описано в т.4.2.
Стартирайте lineak (hotkeys) и вижте дали клавишите вече работят. Би трябвало да го правят, ако не – вероятно сте объркали някое число – можете да разберете като пуснете:
lineakd -v (hotkeys)

5.3. Въвеждане на setkeycodes при стартиране.
За да не се налага всеки път да пишете между 10 и 20 пъти setkeycodes е необходимо те да бъдат записани в скрипт изпълним при стартиране. Според man lineakd е достатъчно те да бъдат записани в някой стартиращ скрипт. Аз предпочетох да направя отделен, който изглежда така:

cat /etc/init.d/compaq
#! /bin/bash

setkeycodes e023 150
setkeycodes e01f 157
setkeycodes e01a 217
setkeycodes e01e 215
setkeycodes e013 216
setkeycodes e014 164
setkeycodes e015 163
setkeycodes e01b 165

След което трябва да се изпълни:
chmod +x /etc/init.d/compaq
update-rc.d compaq default (ако искате да видите къде ще го добави - update-rc.d -n compaq default).

След това последно усилие би трябвало да имате напълно работеща мултимедийна клавиатура.

Остава само да добавите (ако желаете) демона в стартиращия процес – задължително след стартирането на X.
Решението което проработи при мен беше добавянето на следния скрипт в /etc/X11/Xsession.d (в Gentoo директорията е /etc/X11/xinit/):

cat /etc/X11/Xsession.d/56lineakd
#!/bin/bash
lineakd &

И трябва да изпълните:
chmod +x /etc/X11/Xsession.d/56lineakd

Ако всичко е минало нормално вие разполагате с мултимедийна клавиатура.

Lineak и hotkeys предлагат допълнителни възможности, чието описание остана извън обхвата на статията – т.нар. Toggable key и Modifiers, които дава възможност за допълнителни настройки и добавяне на псевдо мултимедийни клавиши чрез модифициране (или иначе казано клавишни комбинации) на вече съществуващите чрез shift, alt и control. Извън обхвата останаха и макросите EAK които предлагат още допълнителна функционалност за контрол на софтуера, звуковата и видео картата и др.

По време на настройкта на клавиатурата се питах дали има смисъл от всичко, това - търсене на кодове, скриптове и пр. След като всичко заработи - за мен отговора е "да, определено" - освен приятно изненадващите всички около вас зелени съобщения (и техния цвят може да бъде променен) по монитора, новите клавиши спестяват време и нерви.
И един последен съвет - направете си backup на новосъздадените и променените файлове - за всеки случай.



....


<< DC++ За Линукс | Инсталация на Postfix Admin с поддръжка на PostgreSQL >>