Multimédia billentyűzetek beállítása Linux alatt

A legtöbb manapság kapható billentyűzeten van néhány különleges gomb például böngésző indítására, vagy email írására, stb. Ezek kódja már-már szabványos, de lehet, hogy nem minden gombot tudunk használni. Ekkor kell egy új billentyűzetmodellt készíteni. Ennek leírása következik.
Az én billentyűzetemet a német ,,hama'' cég gyártotta. Az xev programmal lehet megnézni, hogy az egyes gombokhoz milyen kód tartozik. Ha lenyomom a Web Favorites gombot az xev kimenetén a következő jelenik meg:

KeyRelease event, serial 30, synthetic NO, window 0x1800001,
    root 0x8e, subw 0x0, time 18393136, (173,-8), root:(175,837),
    state 0x10, keycode 230 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:

A 230-as kódot a /etc/X11/xkb/keycodes/xfree86 fájlban kell megkeresni (<I66>) majd ezt beírni a /etc/X11/xkb/symbols/inet fájlba:
partial alphanumeric_keys
xkb_symbols "hama" {
    name[Group1]= "Hama";

    key <I6A>   {       [ XF86Back              ]       };
    key <I69>   {       [ XF86Forward           ]       };
    key <I66>   {       [ XF86Favorites         ]       };
    key <I32>   {       [ XF86HomePage          ]       };
    key <I6C>   {       [ XF86Mail              ]       };
    key <I6D>   {       [ XF86Launch0           ]       };
    key <I30>   {       [ XF86AudioRaiseVolume  ]       };
    key <I2E>   {       [ XF86AudioLowerVolume  ]       };
    key <I20>   {       [ XF86AudioMute         ]       };
    key <I10>   {       [ XF86AudioPrev         ]       };
    key <I24>   {       [ XF86AudioStop ]       };
    key <I22>   {       [ XF86AudioPlay, XF86AudioPause ] };
    key <I19>   {       [ XF86AudioNext         ]       };

    key <I63>   {       [ XF86WakeUp            ]       };
    // key <I5F>   {       [ XF86Sleep             ]       };
    key <I5E>   {       [ XF86PowerOff          ]       };
};

A Sleep gombhoz tartozó kódot nem találtam meg :(
Majd a billentyűzetünk nevét -- jelen esetben: ,,hama'' -- hozzáadni a /etc/X11/xkb/rules/xorg fájlhoz:
! $inetkbds = hama a4techKB21 airkey acpi scorpius azonaRF2300 \

és a /etc/X11/xkb/rules/xorg.xml fájlhoz:
    <model>
      <configItem>
        <name>hama</name>
        <_description>Hama</_description>
      </configItem>
    </model>

Valamint a /etc/X11/xkb/rules/xorg.lst listához kell még hozzáadnunk:
  hama    Hama

Ha ezekkel megvagyunk, a setxkbmap programmal ki is próbálhatjuk (setxkbmap hu,us -variant winkeys -model hama), majd az xev programmal megnézhetjük, hogy az adott billentyű lenyomásával a megfelelő szimbólumot generálja az X11.
Ha ez is jól működik, érdemes véglegesíteni a beállításokat az /etc/X11/xorg.conf vagy /etc/X11/XF86Config-4 fájlban:
Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"
    Option "XkbRules"   "xfree86"
    Option "XkbModel"   "hama"
    Option "XkbVariant" "winkeys"
    Option "XkbLayout"  "us,hu,de"
    Option "XkbOptions" "grp:alt_shift_toggle"
EndSection

Azt, hogy az egyes gombok megnyomásakor mi történjen -- hangerőt növeljen, csökkentsen, stb. -- az általában az ablakkezelő feladata. Én icewm-et használok és a ~/.icewm/keys fájlban lehet megadni a gyorsbillentyűk kódját és hogy milyen parancsot hajtson végre.
Az én keys fájlom így néz ki:

key "Superl_L+t"                x-terminal-emulator
key "Superl_L+s"                serterm

key "Alt+Ctrl+t"                x-terminal-emulator
key "Alt+Ctrl+g"                gimp
key "Alt+Ctrl+n"                mozilla-firefox
key "Alt+Ctrl+m"                mozilla-thunderbird

key "XF86AudioLowerVolume"      amixer set Master 5%-
key "XF86AudioRaiseVolume"      amixer set Master 5%+
key "XF86AudioMute"             amixer set Master toggle
key "XF86HomePage"              mozilla-firefox
key "XF86Mail"                  mozilla-thunderbird mailto:

Gericom Blockbuster notebook:

// Gericom Blockbuster notebook
partial alphanumeric_keys
xkb_symbols "gericom" {
    // Top
    key <I6C>   {       [ XF86Mail              ]       };
    key <I32>   {       [ XF86WWW               ]       };

    key <I6D>   {       [ XF86AudioMedia        ]       };
    key <I20>   {       [ XF86AudioMute         ]       };
    key <I22>   {       [ XF86AudioPlay, XF86AudioPause ] };
    key <I24>   {       [ XF86AudioStop, XF86Eject ]    };

    // With "fn" button
    key <I2E>   {       [ XF86AudioLowerVolume  ]       };
    key <I30>   {       [ XF86AudioRaiseVolume  ]       };
};