Configuring Multimedia Keyboard in Linux

Це невеличке ЯКЦЕ базується на статті в "Linux Gazette" автора rakesh_arky

Трохи теорії

При натисканні клавіш клавіатура посилає їх коди (скан-коди). Точніше, посилає їх двічі, один раз при натисканні клавіші, другий раз - коли клавішу відпускають. Коди більшості клавіш стандартні, фіксовані. Але залишається ще залишок кодів. І їх використовують для додаткових клавіш. На них стандартів немає.

ЦЕЙ АБЗАЦ НЕТОЧНИЙ. ПОТІМ ПЕРЕРОБЛЮ.

При натисненні клавіші Ікси отримують її скан-код. Звіряють його із списком відомих. Якщо він їм відомий, то далі генерується відповідне повідомлення, яке починає блукати системою у пошуках того, хто б його обробив. В іншому випадку нічого не відбувається, код нехтується.

Тепер практика

Всі операції проводимо під звичайним користувачем. Спочатку треба навчити ікси розуміти скан-коди.

Визначаємо скан-коди клавіатури:

$ xev 2>&1 >mykeys

Ця команда записує в файл всі події, що відбуваються з xev. Понатискайте потрібні клавіши у певному порядку.

$ grep 'keycode' mykeys | cut -d ' ' -f7,8 >mykeycodes 

А ця команда витягує з файла keycodes коди і складає у mykeycodes.

tikus@mainframe:~$ cat mykeycodes 
keycode 178
keycode 178
keycode 236
keycode 236
keycode 164
keycode 164
keycode 162
keycode 162
keycode 144
keycode 144
keycode 153
keycode 153
keycode 160
keycode 160
keycode 174
keycode 174
keycode 176
keycode 176

Так виглядають мої. Тут кожен код зустрічається двічі.

Далі кожному коду має бути приписана назва. Список стандартних назв є в /usr/lib/X11/XKeysymDB. Для цього використовується команда xmodmap. Тут варто порекомендувати man xmodmap.

У мене все визначено таким чином:

/usr/X11R6/bin/xmodmap -e 'keycode 162 = XF86AudioPause'
/usr/X11R6/bin/xmodmap -e 'keycode 174 = XF86AudioLowerVolume'
/usr/X11R6/bin/xmodmap -e 'keycode 176 = XF86AudioRaiseVolume'
/usr/X11R6/bin/xmodmap -e 'keycode 160 = XF86AudioMute'
/usr/X11R6/bin/xmodmap -e 'keycode 178 = XF86WWW'
/usr/X11R6/bin/xmodmap -e 'keycode 236 = XF86Mail'
/usr/X11R6/bin/xmodmap -e 'keycode 164 = XF86AudioStop'
/usr/X11R6/bin/xmodmap -e 'keycode 144 = XF86AudioPrev'
/usr/X11R6/bin/xmodmap -e 'keycode 153 = XF86AudioNext'

Тепер перевіряємо правильність

$ xmodmap -pk | less

Напроти відповідних кодів мають стояти відповідні написи.

Для того, щоб все збереглося при завантаженні. Додати команди у файл, який виконується кожен раз при завантаженні користувача. У мене для цього підходить файл ~/.xsession.

tikus@mainframe:~$ tail -15 .xsession
export CHARSET=koi8-u

/usr/X11R6/bin/xmodmap -e 'keycode 162 = XF86AudioPause'
/usr/X11R6/bin/xmodmap -e 'keycode 174 = XF86AudioLowerVolume'
/usr/X11R6/bin/xmodmap -e 'keycode 176 = XF86AudioRaiseVolume'
/usr/X11R6/bin/xmodmap -e 'keycode 160 = XF86AudioMute'
/usr/X11R6/bin/xmodmap -e 'keycode 178 = XF86WWW'
/usr/X11R6/bin/xmodmap -e 'keycode 236 = XF86Mail'
/usr/X11R6/bin/xmodmap -e 'keycode 164 = XF86AudioStop'
/usr/X11R6/bin/xmodmap -e 'keycode 144 = XF86AudioPrev'
/usr/X11R6/bin/xmodmap -e 'keycode 153 = XF86AudioNext'

# Start the window manager:
exec /usr/bin/wmaker $NOCPP

Це частина мого файлу.

Перша частина налаштування закінчена.

Друга частина - це визначення операцій, які мають виконуватись при натисканні клавіши. Це можна зробити засобами менеджера вікон. Мій WindowMaker дозволяє налаштовувати запуск програм для комбінацій клавіш.

Наприклад xmms --play. Див. man xmms

FluxBox

Тут файл налаштувань має такий вигляд:

tikus@mainframe:~$ cat ~/.fluxbox/keys
Mod1 Tab :NextWindow
Mod1 Shift Tab :PrevWindow
Mod1 F1 :Workspace 1
Mod1 F2 :Workspace 2
Mod1 F3 :Workspace 3
Mod1 F4 :Workspace 4
Mod1 F5 :Workspace 5
Mod1 F6 :Workspace 6
Mod1 F7 :Workspace 7
Mod1 F8 :Workspace 8
Mod1 F9 :Workspace 9
Mod1 F10 :Workspace 10
Mod1 F11 :Workspace 11
Mod1 F12 :Workspace 12

Mod4 r :ExecCommand aterm -shading 50
Mod4 d :ExecCommand stardict
Mod4 x :ExecCommand xmms
Mod4 v :ExecCommand gqview
Mod4 g :ExecCommand gimp-2.2
Mod4 w :ExecCommand .firefox/firefox

None XF86AudioNext :ExecCommand xmms --fwd
None XF86AudioPrev :ExecCommand xmms --rew
None XF86AudioPause :ExecCommand xmms --play-pause
None XF86AudioStop :ExecCommand xmms --stop
None XF86AudioRaiseVolume :ExecCommand aumix -w+5
None XF86AudioLowerVolume :ExecCommand aumix -w-5

GNOME

Ви можете використовувати вбудований редактор прив'язок дій до комбінацій або дуже подібний до нього ACME .

Для всіх стільниць

Ви можете використовувати xbindkeys http://hocwp.free.fr/xbindkeys/xbindkeys.html та xbindkeys_config http://download.uhulinux.hu/sources/xbindkeys_config/.

Все.

Андрій Головинський, <tikus@(remove this)ukr.net>