Latest:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
By month:
- November 2021
- January 2019
- December 2017
- December 2016
- May 2014
- April 2014
- November 2013
- April 2013
- April 2011
- February 2011
- January 2011
- August 2010
- May 2010
- March 2010
- January 2010
- October 2009
- April 2009
- February 2009
- October 2008
- September 2008
- August 2008
- April 2008
- March 2008
- February 2008
Topic:
Ošklivý hack
Taky občas máte pocit že váš systém je živý organizmus, který si žije svým vlastním životem? Já tento pocit posledních pár dní měl. Začalo to tím že mi přestal fungovat NetworkManager. Jak jsem později zjistil, bylo to nejspíše způsobeno aktualizací HAL. Při snaze problém napravit postupně přestávaly fungovat další součásti systému. Vrcholem bylo když mi modul grafiky (který jsem aktualizoval před 14 dny) začal z ničeho nic při odhlašování způsobovat kernel panic na mém TuxOnIce 2.6.27 jadérku! To už byl vážně vrchol. Problémy které jsem řešil se jádra vůbec netýkaly…
Panikařící ovladač grafiky jsem vyřešil jednoduše. Zkompiloval jsem nové jádro 2.6.29.1 . Zatím mi dělá radost, uspávání a hibernace mi konečně chodí bez TuxOnIce patchů. Subjektivně bych i řekl že boot, uspávání a probouzení je o něco rychlejší než u všech předchozích jader.
NetworkManager
(K)NetworkManager je krásný nástroj, který umožňuje přecházet
s notebookem mezi různými wifi sítěmi bez nutnosti uživatelského zásahu.
Na jeho opravení, pokud se něco pokazí, je ale potřeba pořádný kus
černé magije. Už jenom najít jeho logy (/var/log/daemon.log
),
všechny souvisecící scripty a konfigurační soubory, které jsou rozházené
po celém systému je záležitost na celé odpoledne. Sám o sobě
NetworkManager není nijak extra velký. To co jej dělá poměrně
komplikovaným je způsob jakým pracuje a množtví nástrojů které k tomu
používá. Především často nechce spolupracovat s konrétními verzemi
jiných programů. Tyto závislosti nezjistíte jinak než že jej vyzkoušíte
a pročtete bugzilly.
Informace o stavu síťových zařízeních si získává z hardware abstraction layer (HAL) přez systém zasílání zpráv D-Bus. Pro jejich konfiguraci používá ifupdown scripty, pro získání konfigurace z dhcp serveru nástroj dhclient. Pro připojování k šifrovaným wifi sítím používá wpasupplicant. Navíc ještě umožňuje spravovat modemová připojení (ppp), VPN sítě (OpenVPN, VPNc) a kdo ví co ještě. Stačí aby jedna z těchto komponent přestala spolupracovat a jste bez připojení.
HAL
U mě byl prvotní problém v tom, že nový HAL (Intrepid) neposkytoval
informace o síťových zařízeních a tak to vypadalo jako bych žádná
neměl. Instalace HALu a NetworkManageru (svn864988) z repozitářů Jaunty
problém vyřešila. Naskytl se ale nový problém. Při stisku libovolné
klávesy pod Xorg serverem se příslužný znak vypsal 3×! Po chvilce
googlení jsem našel zakopaného psa. V nových verzích se totiž přesouvá
starost o detekci vstupních zařízení (klávesnice, myš) z beder Xorg na
HAL (+udev pravidla). Já ale měl detekci kávesnice povolenou jak v Xorg tak
v HAL. Xorg měl tedy klávesnici zaregistrovanou několikrát a jeden stisk
obsluhoval víckrát. Nedetekování vstupních zařízení Xorgem je v nové
verzi defaultní, já jí měl ale explicitně povolednou, protože jsem Xorg
aktualizoval zhruba před 14 dny ještě se starým HAL. Jedná se o volbu
AllowEmptyInput
v ServerFlags
.
Po přenastavení Xorg se vše zdálo být vpořádku. Později se ale ukázalo že klávesnice registrovaná pomocí HAL má naprosto zpřeházené mapování některých kláves a jiné vůbec nefungují! Řešení bylo vrátit starost o detekci zařízení zpět na Xorg. Nejdříve jsem přenastavil Xorg:
Section "ServerFlags" Option "AIGLX" "on" Option "Xinerama" "false" # direct rendrering is not supported, when xinerama is enabled Option "DontZap" "false" # enable ctrl+alt+backspace shortcut for restart X Option "AllowEmptyInput" "false" ## true - kdyz je novy HAL, jinak se klavesy pisou trikrat ## false - stary HAL, jinak klavesnice a mys neodpovida EndSection
Poté pravidly v souboru
/etc/hal/fdi/policy/keyboard_mouse.fdi
řekl ať HAL pro
klávesnice a myši používá neexitující driver:
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="2.0"> <device> <match key="info.capabilities" contains="input.mouse"> <merge key="input.x11_driver" type="string">nonexist</merge> </match> </device> <device> <match key="info.capabilities" contains="input.keyboard"> <merge key="input.x11_driver" type="string">nonexist</merge> <!-- disable keyboards for HAL, it is provide by Xorg --> </match> </device> </deviceinfo>
Není to nijak krásné řešení, v logu Xorgu se poté objevují chyby o neexistujícím ovladači, funguje to ale dobře. Já v pátek odpoledne neměl sílu vymýšlet něco elegantnějšího…
Závěr
O problémech s wifi sítěmi a jak jsem nakonec nainstaloval NetworkManager z Debianu Sid se už raději rozepisovat nebudu. Beztak tyhle žvásty asi nikdo číst nebude. Tak snad jen jednu radu na závěr: NEVRTEJTE SE V TOM CO FUNGUJE!