Portál AbcLinuxu, 2. května 2025 05:50

rfkill - zabíjení rádiových vln

26.1.2010 20:28 | Přečteno: 4739× | Výběrový blog | poslední úprava: 26.1.2010 20:29

V novějších kernelech lze naraziti na hejblátko jménem rfkill. Slouží vypínání různých neionizující záření vysílajících antének ve vašem tučňákofilním počítači. A to takhle:

Historie

Na začátku historie rfkill stojí hardware - uživatelé toužili po jednodušším způsobu zapínání vysílaček ve svých noteboocích a laptopech, než jsou zmatené a nepohodlé programy. Chtěli pěkné, velké tlačítko, které by zareagovalo pěkným, uklidňujícím cvaknutím(*). A naši milí výrobci jim ho dodali, v podobě jednoduchého a spolehlivého mechanického přepínače který odpojil anténu od zdroje signálu. Uživatelé ovšem velice rychle zjistili, že čip vysílající na plné kule do nějakého vybíjecího odporu nemá zrovna kladný vliv na spotřebu, potažmo životnost baterek. Pročež se zrodila generace bastardních tlačítek, které navenek vypadaly uspokojivě mechanicky, jak to mají luseři rádi, ale pod kapotou řídily uspokojivě nemechanický software. Software místo ošklivého uřezávání signálu hezky uspal dané zařízení. Přibývající nálož ikonkových klikátek zapříčinila postupný přesun softwarového ovládání z vlastního firmware zpátky do userspace. V poslední iteraci mi na stole přistál notes od Dellu, který už nejenom nemá pseudomechanický vypínač, ale dokonce dokonce ani přiblblou klávesovou zkratku hlídanou BIOSem a ovládá se kompletně softwarově. Kruh se uzavřel.

Teorie

Linuxový ovladač celé té šaškárny se jmenuje rfkill. Ovladače vysílacího hardware mohou mít (a často mají) vlastní háčky, rfkill by měl do chaosu vnést jednotné API společné pro různé druhy vysílačů a dostupné z userspace. Podporovaný hardware může být celkem cokoliv, co jde „vypnout“ - wifi, bluetooth, wimax, ale třeba i gps. Aplikace v userspace mohou zjišťovat stav nebo vypínat zařízení pomocí jednoduchého API přes znakové zařízení /dev/rfkill. Pro každé zařízení existují dvě úrovně vypnutí - „hard“ je neovlivnitelný, mechanický stav zařízení, čili pouze pro čtení. „soft“ je softwarový vypínač, který ale naopak nemusí být čitelný. Konkrétní provedení záleží na ovladači a hardwaru - třeba na mém erárním Latitude E5500 jsou všechny „hard“ vypínače leda na ozdobu.

Praxe

V první řadě je potřeba zpřístupnit /dev/rfkill, ve výchozím stavu je totiž root:root 660, což pohodlí ovládání z userspace poněkud omezuje. Zprasit to chmodem odněkud z initskriptu se mi příčí, ovšem na drbání s consolekitem nervy nemám (po nahlédnutí do toho, o čem freedesktop.org tvrdí, že je to dokumentace). Pročež jsem kompromisně oprášil trosky znalostí udev a zplodil následující pravidlo:
KERNEL=="rfkill", GROUP="plugdev"
Pokud udevu nehovíte a vaše distro to (zatím) neřeší, vložte tento řádek tam, kam vaše distro cpe udev pravidla - nejspíš nějak takhle:

echo 'KERNEL=="rfkill", GROUP="plugdev"' >> /etc/udev/rules.d/80-rfkill.rules
plugdev jsou v gentoo uživatelé kteří mohou připojovat zařízení - flashky, foťáky etc. čili víceméně totéž, co by měl povolit consolekit. Chcete-li změnit práva, místo GROUP použijte MODE. Nebo obojí, oddělené čárkou.
(poznamka na okraj - nenáviděný udev se mi začíná líbit)

Další co bude potřeba je program rfkill. Detaily instalace ponechávám na svědomí distribuce. Použití je následující:

rfkill list
vypíše existující vypínače a jejich stav.
0: phy0: Wireless LAN
        Soft blocked: yes
        Hard blocked: yes
1: dell-wifi: Wireless LAN
        Soft blocked: yes
        Hard blocked: yes
2: dell-bluetooth: Bluetooth
        Soft blocked: no
        Hard blocked: yes
Jak vidno, mám vypnutou wifi a zapnutý bluetooth. Pro pomalu chápající, logika je obrácená - yes znamená zapnuté blokování čili vypnuté zařízení. Na mě nekoukejte, já to nevymyslel. Vypnutý hard vypínač je nevhodně zvolený default - můj hardware žádný nemá, čili to nic neovliňuje. Zařízení se vypíná a zapíná pomocí parametru block nebo unblock:
rfkill block bluetooth
rfkill unblock 2
Argumentem je jak vidno číslo zařízení ze seznamu výše, nebo jedno ze symbolických jmen all, wifi, bluetooth, uwb, wimax, wwan a gps. Popisek z výpisu - v mém případě dell-bluetooth - nejde použít.

A nakonec něco pro šťastné majitele opravdových poctivých cvakajících vypínačů:

rfkill event
zobrazuje události vypnutí a zapnutí podobně jako xev (hard i soft stavy). Napsat si démona, který po přepnutí vypínače shodí rozhraní nebo naopak nakopne wicd či bluez přenechám za úkol šťastlivcům, kteří nebyli o poctivé cvakající vypínače ošizeni.

No a protože příkazová řádka dnes není v módě, chce to nějaké klikátko. Samozřejmě by se dalo blbnout s karambou, komanderem a podobnými vyfikundacemi, resp. jejich ne-kde obdobami, já jsem ale shodou okolností narazil na geniálně jednoduché řešení - plasmid „on-off přepínač“. Stačí zadat shellové příkazy pro vypnutí a zapnutí a je to.
(druhá poznámka na okraj - plasma se mi taky začíná líbit).

K čemu je to dobré?

Třeba k tomu, abych se zbavil ošklivých modrých světýlek. Na mém železe wifi i bluetooth čipy nahodí BIOS a vypnout to rfkillem je jednodušší než zapnout a vypnout služby (které to shodí pomocí ovladačů BT a wifi). Předpokládám ale, že sťastní majitelé hardwarových tlačítek (nebo pseudohardwarových klávesových kombinací) najdou zajímavější využití.



(*) Zde cituji klasika, ale bohužel už si přesně nevzpomínám kterého. Nejspíš nějakého A. C. Clarka

       

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

Limoto avatar 26.1.2010 20:56 Limoto | skóre: 32 | blog: Limotův blog
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln
Odpovědět | Sbalit | Link | Blokovat | Admin
Ještě bych dodal, že se to dá celkem pohodlně odlvádat i přes /sys/class/rfkill
26.1.2010 21:25 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln
Odpovědět | Sbalit | Link | Blokovat | Admin
Mě docela funguje iwconfig eth1 txpower off. Nějakým spektrometrem jsem to smz neměřil, ale od sítě se to odpojí.

Dělá snad rfkill něco dalšího? Možná iwconfig nedokáže vypnout bluetooth. To nevím. Nejsem vlastníkem BT.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
26.1.2010 21:40 medulin | skóre: 31 | blog: medulin | ČR
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln
Odpovědět | Sbalit | Link | Blokovat | Admin
Na notebooku Asus Eee PC 900A rfkill nefunguje :-(. Nedávno jsem to řešil a psalo mi to tuto chybu:
ath5k phy0: failed to wakeup the MAC Chip
ath5k phy0: can't reset hardware (-5)
Wifi sice vypnu, ale už nezapnu. Po příkazu
rfkill unblock wifi
se modrá ledka rozsvítí, ale nevytvoří se wlan0, jedině až po restartu. Takže pokud chci zapnout wifi musím restartovat. :-(
rADOn avatar 27.1.2010 09:36 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln
rfkill pouze zabije vysilaci cip, reasociaci po znovuzapnuti uz si musi zaridit ovladac wifi. Od toho je prave to udalostni rozhrani. IMO wpa_supplicant to umi - kdyz nahodim rozhrani ktery je rfkillem blokovany, tak zahlasi ze zarizeni je "neaktivni" ale bezi a po odblokovani se pripoji.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
26.1.2010 22:41 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Klasik
Odpovědět | Sbalit | Link | Blokovat | Admin
Ano, myslím, že tak byl popsán bezpečnostní vypínač Hala tajně nainstalovaný před jeho oživením, jehož mechanické vlastnosti dávali jistý pocit moci nad přesložitým počítačem.
kotyz avatar 26.1.2010 23:58 kotyz | skóre: 25 | blog: kotyzblog | Plzeň
Rozbalit Rozbalit vše Re: Klasik
jo, to bylo v 2010 druhy vesmirny odysee. takova gilotinka na dalkovy ovladani pripevnena na privodnim kabelu ...
Hrdý člen KERNEL ULTRAS. | Furry/Brony/Otaku | Nemám čas ztrácet čas. | In 'pacman -Syu' we trust!
27.1.2010 06:32 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Klasik
Ovládalo se to kalkulačkou, myslím že něco jako napište samé devítky a odmocněte. Problém ale byl, že to ten HALův stvořitel stejně vyčenichal a odpojil :)
In Ada the typical infinite loop would normally be terminated by detonation.
kotyz avatar 27.1.2010 09:39 kotyz | skóre: 25 | blog: kotyzblog | Plzeň
Rozbalit Rozbalit vše Re: Klasik
presne! este tam o tom myslim rikali "vypada to jako gilotina pro mys" ;-)
Hrdý člen KERNEL ULTRAS. | Furry/Brony/Otaku | Nemám čas ztrácet čas. | In 'pacman -Syu' we trust!
thingie avatar 28.1.2010 03:48 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Klasik
Podle mě to byl spíš popis nějakého ovládacího prvku na Leonovovi. Hledal bych to někde v kapitole kolem odletu od Jupitera ve 2010. I ve filmu tam byla výrazná scénka se značně mechanickým ovládacím prvkem.
Růžové lži.
27.1.2010 07:00 JoVi
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln
Odpovědět | Sbalit | Link | Blokovat | Admin
U mě na Asusu Eee 1101HA rfkill funguje tak napůl – zařízení můžu soft-bloknout, ale to nezhasne LEDky, a navíc Widlácké ovladače při vypínání Wi-Fi a BT používají nějaký jiný mechanismus a zařízení vypnuté s jejich pomocí rfkill hlásí jako hard-blocked a neumí ho zapnout.
27.1.2010 14:23 alkoholik | skóre: 40 | blog: Alkoholik
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln
No zrovna u eee je rfkill pruser.
Ve starsich verzich jadra jakz takz slapal, ale ted bud mam wifi a nebo BT. Zalezi na tom, jestli zkompiluju podporu PCI hotplugu.
Vysvetleni je nekde v "There's nothing to indicate that the Eee's ports are hotpluggable, and there's no topological data in the ACPI tables that ties the wifi function to the PCIe root bridges. However, the Eee firmware was sending an ACPI notification on wifi hotplug. But it was only sending this to the PCIe root bridges, and there's no way to then tell which device had potentially appeared or vanished."
13.6.2013 14:23 Leoš
Rozbalit Rozbalit vše Re: rfkill - zabíjení rádiových vln - Problém na HP ProBook 6560b
Odpovědět | Sbalit | Link | Blokovat | Admin
na mém ntb se projevuje zajímavá zvláštnost: když zapojím kabel lan, tak se Hard Blockne wifi... když vyhodím kabel, tak wifi vesele jede... už jsem zkusil ledasco... ale nenechá se přemluvit... řekl bych že to dělá novější jádro... dříve na ubuntu 9.4 to fungovalo ještě bez problémů... nějaký nápad?

Založit nové vláknoNahoru

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