Portál AbcLinuxu, 30. dubna 2025 23:59
Jedna z věcí, která mě již delší dobu na mém notebooku trápila byly nefunkční tlačítka pro ovládání hlasitosti zvuku (zesílení, zeslabení a mute). Teda né že by byly zcela nefunkční, ale pokud jsem je použil tak se jako by zasekly. Když jsem si toho všiml poprvé, doufal jsem že se jedná jen o nějaký malý BUG nejspíše v GNOME případně někde v X ovladači pro klávesnici. Čas plynul a tlačítka stále nefungovala. Zkusil jsem je pro jistotu i v jiné distribuci a tam nešla také. Ale ve Windows jely OK, takže jsem věděl že je něco shnilého v mém oblíbeném systému.
Upřímně řečeno jsem se tímto problémem nezabýval nějak příliš detailně, a ačkoliv to byl docela život znepříjemňující BUG, nesnažil jsem se vehementně jej odstranit. Teda aspoň ne hned. Dneska jsem tak večer ležel se svým noťáskem a poslouchal hudbu. No a došlo mi že možnost používat ta tlačítka mi opravdu chybí, tak jsem si řekl že to už konečně vyřeším.
Po chvilce zkoumání problému jsem zjistil, že hlavním problémem bude asi to, že při stisknutí některého z těch tří tlačítek, se začne generovat jen událost stisku ale už ne uvolnění. To jsem zjistil přes xev, očekával jsem že problém bude někde v X ovladači klávesnice. Naštěstí toho sem se nedržel dlouho a napadlo mě zjistit zda není problém ještě v nižší vrstvě. A to někde v jádře Linuxu. K detekci zda se generují signály uvolnění jsem použil utilitu showkey. A ta mi prozradila, že je problém už v samotném jádře, přesněji v ovladači pro klávesnici.
Když už jsem byl konečně schopen říct, co je na vině, nebylo obtížné najít další lidi s podobným problémem. Pak už jen byla otázka času než sem našel pro mě funkční řešení. Není podle mě sice ideální, ale funguje dostatečně. Řešení se skýtá v tom, že se pro dané tlačítka generuje automaticky signál uvolnění. Toto je potřeba udělat ve zdrojových kódech Linuxu. Přesněji v souboru atkbd.c. Jak už jsem psal podobný problém mělo více lidí. A tak není divu že daný soubor atkbd.c obsahoval spousty háčků pro různé notebooky atd. Což se samozřejmě vývojářům příliš nezamlouvalo a tak nalezli o něco lepší řešení, které krom čistšího kódu přináší hlavně i možnost udělat potřebné úpravy bez potřeby znovu kompilování jádra.
Řešení spočívá v tom, že skrz sysfs můžeme nastavit keycode kláves pro které chceme automaticky generovat uvolnění klávesy. Jedinou nevýhodou je zatím hlavně to, že tento způsob je (bude) dostupný až od verze jádra 2.6.32. Takže abych toho mohl využít rozhodl jsem se pro kompilaci jádra z git stromu. Pak jen stačilo najít správné hodnoty kláves a zadat je do onoho souboru v sysfs. U mě to vypadá tak že se při startu provádí následující příkaz:
echo 160,174,176 > /sys/devices/platform/i8042/serio0/force_releaseTen zajistí že mohu konečně pohodlně ovládat hlasitost svého notebooku
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.