Portál AbcLinuxu, 1. května 2025 05:29

HP nx9020 a multimediální klávesy

20.7.2005 05:51 | Přečteno: 3362× | HP Compaq nx9020 | poslední úprava: 9.9.2005 22:45

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 ...

PROBLÉM

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.

KERNEL

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á.

XFree86 model klávesnice

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.

DISCLAIMER

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.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

20.7.2005 11:23 Jiri Bajer | skóre: 34 | blog: Sarimuv koutek | Praha
Rozbalit Rozbalit vše Pribuzny zaznam
Odpovědět | Sbalit | Link | Blokovat | Admin
Mapovani klaves pro nc6000.
20.7.2005 11:32 deleted | skóre: 3 | blog: pnojmatika
Rozbalit Rozbalit vše pěkné
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravím, neznáte náhodou odpověď na tento dotaz? Domnívám se, že to nejde. Nicméně dokázat to neumím :-)
deleted
Valoun avatar 20.7.2005 17:25 Valoun | skóre: 30 | blog: Psavec | Středočeský kraj
Rozbalit Rozbalit vše Re: pěkné
Netuším, ale vzhledem k tomu jak neskutečně složité je rozjet i takovou pitomost jako je pouhý výstup na monitor... tak bych řekl že ne. Ale bylo by to užitečný.
10.9.2005 20:32 Zdeněk Hurák | skóre: 7
Rozbalit Rozbalit vše Re: pěkné
Jestli jsem neminul nejaky podstatny detail v dotazu, tak jsem si jisty, ze to jde a jedna se o pomerne beznou vec. Jen bych upozornil, ze "nechat si bezet na kazdem monitoru neco jineho" neni uplne ta spravna formulace pozadavku. Jo, ted slovickarim, ale je zkratka lepsi nahlas rict, ze jde jen a jen o to, ze pracovni plocha (logicky display ci monitor) jsou proste roztazeny pres dva fyzicke monitory. Velmi uzitecna vec, zejmena kdyz pri praci mate zaroven otevrenych nekolik oken, a hodi se vam videt jich vice najednou. Resenim je Xinerama (google). Ma vlastni pridana hodnota k teto diskuzi je, ze graficky chipset Intel 852/855 skutecne je dual-head, ale X-ka to zacaly podporovat az od urcite verze. Napriklad, verze v Mdk 10.1 to neumi. Co jsem se natrapil, delal vsechno podle Xinerama Howto, nez jsem se to dozvedel. Nejake zaznamy o tomto jsou i nekde v diskuzich zde. Hodne stesti.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.