Portál AbcLinuxu, 1. května 2025 05:29
Chcete rozchodit všechny speciální klávesy na vašem notebooku HP nx9020, na kernelu 2.4 či 2.6? Chcete to udělat přes XFree86 a vyhnout se bastlům typu lineakd? Pak čtěte dále ...
Máme notebook, na jádru 2.6 se nám detekují pomocí xev jen některé klávesy (ty zvukové na boku počítače), řádka tlačítek na vrchu nejeví zájem o spolupráci.
Nejdřív se tedy přepneme do konzole, a tlačítka řádně promačkáme. Na konzoli dostaneme (či pomocí dmesg vyvoláme) hlášky tohoto typu:
atkbd.c: Unknown key pressed (translated set 2, code 0x9e on isa0060/serial) atkbd.c: Use 'setkeycodes e01e <keycode>' to make it known.
Poslechneme tedy a učiníme tak pro všechny speciální klávesy, které chybu hlásí. Patřičné keycody naleznete v /usr/include/linux/input.h. Protože se při každém bootu musí keykody nastavovat znovu, udělal jsem si malý init skript, který to provede za mne. Je sestaven v duchu Debianu, a není vůbec složitý:
#! /bin/sh # sets up multimedia keys for HP nx9020 notebook under 2.6.x kernels N=/etc/init.d/keyboard set -e case "$1" in start|force-reload) echo -n "Configuring keyboard: setkeycodes" setkeycodes e01e 155 # mail button setkeycodes e01a 217 # search button setkeycodes e023 150 # browser button setkeycodes e00a 148 # lock button setkeycodes e031 138 # help button setkeycodes e039 142 # Fn+F12 Sleep # volume side-buttons seem to work out-of-box ;; stop|reload|restart) ;; *) echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
Skript stačí spustit jednou při startu systému, například nalinkováním do /etc/rc.S. Skript spustíme, a od té chvíle by nám všechny klávesy měly posílat keycody, s kterými lze v Xkách dále pracovat. Celý první krok lze u kernelu 2.4 vynechat, protože klávesy jsou rozpoznány bez problémů.
XF86Config-4
Nastavení klávesnice v Xkách je záležitostí mnoha nepřehledných konfiguračních souborů. Především jde o sekci InputDevice v /etc/XF86Config-4:
Section "InputDevice" Identifier "HP nx9020 Keyboard" Driver "keyboard" Option "CoreKeyboard" Option "XkbLayout" "us,cz_qwerty" Option "XkbModel" "hpnx26" Option "XkbRules" "xfree86" Option "XkbOptions" "grp:shift_toggle,altwin:super_win,altwin:menu" EndSection
V tomto případě máme nastaveny dvě skupiny, anglickou a českou. Model klávesnice (zde hpnx26) si musíme ovšem vytvořit sami, protože Xfree86 standardně o naší klávesnici neví, a žádná z nabízených na ní nepasuje. Options nastavují přepínání klávesnice pomocí shiftů, mapují Win klávesu na Super_L (nevím proč, ale mapování na Meta_L funguje pouze u kernelu 2.4), a z menu klávesy je Menu. Indikaci aktuální skupiny Scrollock LEDkou jsem nenastavil, protože notebook žádnou nemá.
Zvolil jsem cestu přidání vlastní definice klávesnice do souboru /etc/X11/xkb/symbols/inet, kde se už mnoho podobných klávesnic nachází. Definice vypadá následovně:
partial alphanumeric_keys xkb_symbols "hpnx26" { // Describes the multimedia buttons on HP nx9020 notebook under 2.6 kernel name[Group1]= "Hewlett-Packard nx9020 kernel26"; key <I1F> { [ XF86ScreenSaver ] }; key <I20> { [ XF86AudioMute ] }; key <I2E> { [ XF86AudioLowerVolume ] }; key <I30> { [ XF86AudioRaiseVolume ] }; key <I32> { [ XF86WWW ] }; key <I5F> { [ XF86Standby ] }; key <I65> { [ XF86Search ] }; key <I6C> { [ XF86Mail ] }; key <I75> { [ Help ] }; };
Předtím, než tento záznam vytvoříte, musíte zjistit ty hexadecimální kody, které XFree používá. Pusťte tedy xev, promačkejte klávesy a zjistěte keycody. To že kernel nastavil klávesám jiné keycody, než které jste pracně definovali, tomu se nedivte, kernel 2.6 se rád chová jako prase. Keycody si poznamenejte, a následně vyhledejte jejich hexadecimální protějšky v /etc/X11/xkb/keycodes/xfree86. pro kernel 2.4 budou hexadecimální hodnoty většiny kláves jiné. Finální řešení tedy nebude fungovat pod oběma řadami zároveň.
Symbolická jména kláves naleznete v /usr/lib/X11/XKeysymDB. Zpravidla se používají jména začínající na XF86- inspirujte se u definic ostatních klávesnic.
Klávesnici máme definouvanou, zbývá ji už jen připsat do /etc/X11/xkb/rules/xfree86, do seznamu internetových klávesnic $inetkbds. Restartujte Xka, a v xevu se ujistěte, že vám všchny klávesy dávají symbolická jména, která jste chtěli. Pokud ano, máte vyhráno a můžete už v libovolné aplikaci, window manageru či desktopovém prostředí klávesy vesele přiřazovat různým funkcím.
Toto si píšu pro sebe, abych to po celonočním laborování nezapomněl. Patrně to bude fungovat i vám, ale ruku do ohně za to nedám. Řešení typu lineak odmítám pouze z ideologických důvodů. To, že lze cíle dosáhnout i jednodušší cestou je možné, a nikomu to upírat nehodlám. Termíny klávesová mapa, skupina, keycody, scankody, symboly atd. mávám dle libosti, páč tomu prd rozumím.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.