ubuntuusers.de

rfkill

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/Oxygen/network-wireless.png Das Subsystem rfkill 🇬🇧 des Linux-Kernels bietet eine Schnittstelle, um an das System angeschlossene drahtlose Kommunikationsgeräte – nachfolgend einfach "Funkgeräte" genannt – ein- und ausschalten zu können. Ziel ist, wenn diese Art der Kommunikation nicht benötigt wird, durch Ausschalten des entsprechenden Adapters sowohl das Senden von Radiowellen zu unterbinden als auch den Stromverbrauch des Systems zu senken.

In der Praxis kommt rfkill vor allem bei in Notebooks intern verbauten Adaptern für

zum Einsatz. Es gibt aber auch unterstützte PCMCIA- bzw. Cardbus-Adapter.

Das Subsystem macht seine Steuerungsmöglichkeiten über die sysfs-Schnittstelle als Dateien unterhalb von /sys/class/rfkill/ und über die Gerätedatei /dev/rfkill zugänglich.

Zum einfachen Ein- und Ausschalten der Funkgeräte durch den Benutzer gibt es das Kommandozeilenprogramm rfkill 🇬🇧, dessen Bedienung das Thema dieses Artikel sein soll.

Installation

Das Programm rfkill ist in Ubuntu über das Paket

  • rfkill

bereits standardmäßig installiert.

Bedienung

Geräte u. Schaltzustand auflisten

Die Liste der im System verfügbaren Funkgeräte erhält man im Terminal [1] mit diesem Kommando:

rfkill list 

Die beispielhafte Ausgabe:

0: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no
1: tpacpi_bluetooth_sw: Bluetooth
	Soft blocked: no
	Hard blocked: no
2: tpacpi_wwan_sw: Wireless WAN
	Soft blocked: no
	Hard blocked: no
4: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no

zeigt ein Notebook mit WLAN-, Bluetooth- und UMTS-Adapter. Alle Adapter sind eingeschaltet.

Um nur die Geräte einer Klasse anzuzeigen verwendet man:

rfkill list BEZEICHNER 

Den BEZEICHNER für die gewünschte Geräteklasse ermittelt man anhand Tabelle 1. So selektiert man z.B. nur die WLAN-Geräte mit:

rfkill list wifi 

Ausgabe:

0: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no

Soft blocked

Die Ausgabezeile

	Soft blocked: no / yes

zeigt den per Software gewählten Schaltzustand des Funkgeräts: no = ein, yes = aus.

Bei vielen Notebooks kann der Zustand "Soft blocked" auch über eine Taste geändert werden, z.B. Fn + F5 für Bluetooth und WLAN bei ThinkPads.

Hard blocked

Manche Notebooks – insbesondere Business-Baureihen – verfügen zusätzlich über einen Hardwareschalter zum kompletten Deaktivieren der Funkgeräte (z.B. im Flugzeug). Betätigt man diesen, so ist bei allen Funkgeräten die Zeile

	Hard blocked: yes

zu sehen.

Funkgeräte schalten

Zum Schalten von "Soft blocked" benutzt man folgende Kommandos:

rfkill block   BEZEICHNER   # ausschalten
rfkill unblock BEZEICHNER   # einschalten 

Den Zustand von "Hard blocked" kann man nicht per Software schalten. Siehe auch Problembehandlung.

Hinweis:

Wer als Desktop nicht GNOME oder Unity einsetzt, benötigt zum Schalten Root-Rechte [2] bzw. ein vorangestelltes sudo.

Die BEZEICHNER für die Geräteklassen zeigt folgende Tabelle:

Tabelle 1: Geräteklassen für Funkgeräte
Bezeichner Geräteklasse
all alle Funkgeräte
wifi, wlan WLAN
bluetooth Bluetooth
wwan UMTS (WWAN)
uwb, ultrawideband Wireless USB
wimax WiMAX
gps GPS
fm FM Tuner
nfc NFC

Auswahl über die Gerätenummer

Alternativ kann man über die in der Ausgabe von rfkill list gezeigte Nummer das zu schaltende Funkgerät auswählen:

rfkill block   NUMMER    # ausschalten
rfkill unblock NUMMER    # einschalten 

Um das WLAN aus dem obigen Beispiel auszuschalten, verwendet man also:

rfkill block 0 

Für Bluetooth zeigt rfkill list meist zwei Geräte an – aus der obigen Beispielausgabe:

1: tpacpi_bluetooth_sw: Bluetooth
4: hci0: Bluetooth

Möchte man Strom sparen, sollte man das Gerät 1: tpacpi_bluetooth_sw ausschalten. Das Gerät 4: hci0 steuert nicht die Stromversorgung des Bluetooth-Adapters. Um sicher zu sein, verwendet man besser die Geräteklasse bluetooth.

Automatisches Schalten beim Systemstart

Um Funkgeräte bereits beim Systemstart auszuschalten, fügt man die betreffenden Kommandos in /etc/rc.local hinzu. Das Beispiel schaltet Bluetooth und WLAN aus:

rfkill block bluetooth
rfkill block wifi

Unter Umständen ist auch die umgekehrte Vorgehensweise – nämlich das Einschalten eines Adapters beim Systemstart – nötig:

rfkill unblock wifi

(beobachtet beim ThinkPad Edge E320)

Problembehandlung allgemein

Schalter steht auf "aus"

Symptom: rfkill list zeigt für alle Funkgeräte "Hard blocked: yes". Beispiel:

0: tpacpi_bluetooth_sw: Bluetooth
	Soft blocked: yes
	Hard blocked: yes
1: tpacpi_wwan_sw: Wireless WAN
	Soft blocked: yes
	Hard blocked: yes
2: phy0: Wireless LAN
	Soft blocked: yes
	Hard blocked: yes

Behebung: den Schalter betätigen. Er ist oft recht versteckt an einer der Schmalseiten des Notebooks angebracht, daher sollte man bei der Suche danach nicht zu schnell aufgeben.

Oft finden sich Hinweise auf einen Hardwareschalter auch mit der Abfrage

dmesg | egrep 'radio|kill|switch'

Hardwareschalter oder Taste(nkombination) wirkt nicht

  • Einige Hardwareschalter funktionieren nur während des Systemstarts bevor Ubuntu (Linux) gestartet ist (z.B. beim Acer Aspire 1825PTZ).

  • Beim Acer Aspire One entfernt man "Hard blocked" durch einmaliges Betätigen der Hardwaretaste während sich das Netbook im BIOS-Setup befindet.

Kernelmodul ist nicht geladen

Symptom: eines (oder mehrere) der integrierten Funkgeräte des Notebooks taucht in der Ausgabe von rfkill list nicht auf.

Behebung: zuständig für das Schalten sind die folgenden Kernelmodule (die Liste kann je nach Kernelversion abweichen):

  • acer_wmi

  • amilo_rfkill

  • asus_laptop

  • asus_wmi

  • classmate_laptop

  • compal_laptop

  • dell_laptop

  • eeepc_laptop

  • fujitsu_laptop

  • hp_wmi

  • ideapad_laptop

  • intel_oaktrail

  • msi_laptop

  • panasonic_laptop

  • samsung_laptop

  • sony_laptop

  • thinkpad_acpi

  • toshiba_acpi

  • toshiba_bluetooth

  • xo1_rfkill

Normalerweise wird das passende Kernelmodul automatisch geladen. Eine schnelle Überprüfung, ob eines der oben aufgelisteten Module geladen ist, macht man mit folgendem Kommando:

lsmod | egrep '_acpi|_bluetooth|intel_oaktrail|_laptop|_rfkill|_wmi' 

Zeigt die Ausgabe keines der Module, lädt man probeweise einzelne Module aus der Liste – vorzugsweise beginnend mit dem zum Herstellernamen passenden – mittels

sudo modprobe MODULNAME 

und prüft mit

rfkill list 

ob das fehlende Funkgerät nun angezeigt wird.

Dabei ist es wichtig, die nicht passenden Module sogleich wieder zu entfernen mit

sudo modprobe -r MODULNAME 

Hat man auf diese Weise das benötigte Modul gefunden, so kann man es künftig beim Systemstart automatisch laden, indem man eine zusätzliche Zeile mit dem Modulnamen an die Datei /etc/modules anfügt. Beispiel:

echo "hp_wmi" | sudo tee -a /etc/modules 

Gerät ohne Hardwareschalter zeigt "Hard blocked" an

Symptom: bei manchen Geräten, z.B. ThinkPad Edge wurde

0: tpacpi_bluetooth_sw: Bluetooth
    Soft blocked: yes
    Hard blocked: yes
1: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: yes

bzw. beim Thinkpad X121e

1: tpacpi_wwan_sw: Wireless WAN
Soft blocked: no
Hard blocked: yes

beobachtet.

Behebung: folgende Maßnahmen sollte man in der angegebenen Reihenfolge probieren:

  1. im BIOS unter "Config → Network → Wireless LAN ..." prüfen, ob der WLAN Adapter auch wirklich aktiviert ist (beobachtet beim ThinkPad Edge E520)

  2. Hardware-Reset

  3. BIOS Default Settings

  4. Einschalten des betroffenen Adapters über ein parallel installiertes Windows

Achtung!

Beim ThinkPad X121e kann der Hardware-Reset dazu führen, dass das Notebook überhaupt nicht mehr startet (2 Fälle im Forum aufgetreten) und das Gerät in die Werkstatt muss. Alle anderen Modelle sind von diesem Problem jedoch nicht betroffen.

Modulspezifische Probleme

Dieser Abschnitt beschreibt Probleme einzelner Kernelmodule. Ob eines der hier erwähnten Kernelmodule auf der eigenen Hardware geladen wurde, kann man mit dem Kommando

lsmod | egrep 'acer|dell' 

herausfinden.

Modul acer_wmi

Lädt auf unpassender Hardware

Das Modul acer_wmi wird bei einigen Notebook-Modellen geladen obwohl es dafür nicht vorgesehen ist und blockiert dadurch den rfkill-Mechanismus.

Symptom: in der Ausgabe von rfkill list ist eine zweite WLAN-Instanz namens "acer-wireless" zu sehen. Beispiel:

1: acer-wireless: Wireless LAN
        Soft blocked: yes
        Hard blocked: no
3: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no

Behebung: zuerst entlädt man acer_wmi

sudo modprobe -r acer_wmi 

um danach ggf. das herstellerspezifische Modul (s.o.) zu entladen und erneut zu laden

sudo modprobe -r MODULNAME
sudo modprobe MODULNAME 

Bringt das Entladen von acer_wmi den gewünschten Erfolg, so kann man künftig dessen automatisches Laden durch Blacklisting unterbinden:

echo "blacklist acer_wmi" | sudo tee /etc/modprobe.d/blacklist-acer_wmi.conf 

Modulparameter notwendig

In einigen Fällen hilft es acer_wmi mit dem Parameter wireless=1 zu laden. Wenn der manuelle Test mit

sudo modprobe -rv acer_wmi              # entladen
sudo modprobe -v  acer_wmi wireless=1   # neu laden 

erfolgreich verläuft, kann man den Parameter mittels

echo "options acer_wmi wireless=1" | sudo tee /etc/modprobe.d/acer_wmi.conf 

permanent machen.

Module dell_laptop, dell_wmi

Das fürs Schalten zuständige Modul dell_laptop ist fehlerhaft und muss bei einigen Modellen seit Ubuntu 10.10 ebenfalls gesperrt werden, insbesondere wenn zusätzlich das Modul dell_wmi (zuständig für Funktionstasten) verwendet wird (Beispiel).

Symptom: die Abfrage mit rfkill zeigt:

0: dell-wifi: Wireless LAN
	Soft blocked: yes
	Hard blocked: yes

Behebung:

echo "blacklist dell_laptop" | sudo tee -a /etc/modprobe.d/blacklist.conf 

Nicht von rfkill unterstützte Hardware

Hinweis:

Dieser Abschnitt befasst sich mit Hardware, die nicht vom rfkill-Framework unterstützt wird. Die nachfolgend besprochenen Lösungen wurden nicht systematisch mit allen zu Beginn aufgeführten Ubuntu-Versionen geprüft.

Um den Adapter bereits beim Systemstart in den gewünschten Zustand zu bringen, fügt man den gezeigten Schalt-Befehl in /etc/rc.local hinzu.

ASUS Notebooks

Prüfung, ob die Steuermodule geladen werden:

lsmod | grep -i asus 

Ausgabe ist dann in der Regel:

asus_nb_wmi             
asus_wmi               

Das Modul asus_nb_wmi bietet die entsprechende Option wapf. Es können entsprechende Parameter vorgegeben werden, 0 - 1 oder 4 sind möglich:

echo "options asus_nb_wmi wapf=1" | sudo tee /etc/modprobe.d/asus.conf 

Parameter 0 und 1 schaltet den Hardwareswitch für WLAN und Bluetooth, 4 entsprechend den Softswitch bei Systemstart.

Bei einigen älteren Modellen von ASUS schaltet man den WLAN-Adapter so (zuvor muss das Modul asus_laptop geladen sein):

echo 1 | sudo tee /sys/devices/platform/asus_laptop/wlan   # einschalten 
echo 0 | sudo tee /sys/devices/platform/asus_laptop/wlan   # ausschalten 

bzw. in rc.local:

echo 1 > /sys/devices/platform/asus_laptop/wlan   # einschalten 
echo 0 > /sys/devices/platform/asus_laptop/wlan   # ausschalten

Um Bluetooth und UMTS/WWAN zu schalten, verwendet man in den Kommandos /sys/devices/platform/asus_laptop/bluetooth bzw. wwan.

Zusätzlich kann ein Systemskript umgeschrieben werden um die Tastenkombination Fn + F2 zu aktivieren (Forenartikel). Dazu editiert man mit Root-Rechten [3] die Datei /etc/acpi/asus-wireless.sh und ersetzt den Inhalt durch:

#!/bin/sh
WLAN_CTL=/sys/devices/platform/asus_laptop/wlan

[ -w $WLAN_CTL ] || exit 1

if [ "$(cat $WLAN_CTL)" = "0" ] ; then
    echo 1 > $WLAN_CTL
else
    echo 0 > $WLAN_CTL
fi

asus-nb-wmi

In manchen Fällen wird das asus-nb-wmi Modul geladen, obwohl es nicht nötig ist (ähnlich wie das Modul acer_wmi, siehe oben). rfkill zeigt dann ebenfalls zwei WLAN Instanzen, so wie bei dem Modul acer_wmi, und führt zu einem softblock des Moduls.

Man kann das automatische Laden des Moduls so unterbinden:

echo "blacklist asus-nb-wmi" | sudo tee /etc/modprobe.d/blacklist-asus_wmi.conf  

Intel Pro Wireless 2x00b/g Adapter

Dieser Adapter funktioniert nicht mit rfkill, da der Treiber mit lib80211 arbeitet. Er läßt sich jedoch wie folgt schalten:

for i in /sys/bus/pci/drivers/ipw2200/*/rf_kill ; do echo 0 | sudo tee $i ; done   # einschalten
for i in /sys/bus/pci/drivers/ipw2200/*/rf_kill ; do echo 1 | sudo tee $i ; done   # ausschalten 

bzw. in rc.local:

for i in /sys/bus/pci/drivers/ipw2200/*/rf_kill ; do echo 0 > $i ; done   # einschalten
for i in /sys/bus/pci/drivers/ipw2200/*/rf_kill ; do echo 1 > $i ; done   # ausschalten

Bei einigen Modellen ist zudem ein Modulparameter nötig, um die WLAN-LED zu aktivieren. Ist der Test

sudo modprobe -rfv ipw2200
sudo modprobe -v ipw2200 led=1 

erfolgreich, macht man die Einstellung permanent:

echo "options ipw2200 led=1" | sudo tee /etc/modprobe.d/ipw2200.conf 

Im Fall der Intel 2100b ist ipw2200 durch ipw2100 zu ersetzen.

FSC Amilo, Acer Aspire/Travelmate

(nur 32bit-Systeme)

Bei einigen älteren Modellen der genannten Baureihen (vollständige Liste im Modulquelltext wistron_btns.c ab Zeile 260) läßt sich mit Hilfe des Kernelmoduls wistron_btns die Hardwaretaste zum Schalten des WLAN in Betrieb nehmen. Zeigt das manuelle Laden des Moduls mit

sudo modprobe -v wistron_btns 

den gewünschten Erfolg, so kann man es künftig beim Systemstart automatisch laden, indem man eine zusätzliche Zeile an die Datei /etc/modules anfügt:

echo "wistron_btns" | sudo tee -a /etc/modules 

Ältere FSC Amilo Notebooks

(nur Ubuntu 12.04)

Hier sind drei Varianten zu unterscheiden:

  1. fsam7400

  2. fsam7440

  3. fsaa1655g

Modul fsam7400 (im Kernel)

Hinweis:

Benutzerberichten zufolge (Quellen: Ubuntu-Forum Artikel 1 🇬🇧, Ubuntu-Forum Artikel 2 🇬🇧) funktioniert fsam7400 ab Kernel 3.0 bzw. Ubuntu 11.10 nicht mehr. Als alternative Lösung bietet sich das vorstehend beschriebene Modul wistron_btns an.

Nun lädt man das Modul mit

sudo modprobe -v fsam7400 radio=1 

und prüft, ob sich der Adapter im Terminal schalten läßt mit:

echo 1 | sudo tee /proc/fsam7400/radio  # einschalten
echo 0 | sudo tee /proc/fsam7400/radio  # ausschalten 

War der vorstehende Test erfolgreich, kann man das Modul automatisch beim Systemstart laden

echo "fsam7400" | sudo tee -a /etc/modules 

und den gewünschten Schaltzustand festlegen

echo "options fsam7400 radio=1" | sudo tee /etc/modprobe.d/fsam7400.conf  # an
echo "options fsam7400 radio=0" | sudo tee /etc/modprobe.d/fsam7400.conf  # aus 

Modul fsam7440 (nicht im Kernel)

Quellcode des Moduls herunterladen:

Entpacken:

tar xvfz fsam7440-0.4_fixed_10.10_and_up.tar.gz
cd fsam7440-0.4_fixed_10.10_and_up 

Kompilieren und installieren (diesen Schritt bei einem Kernelupdate wiederholen oder DKMS verwenden):

sudo apt-get install linux-headers-$(uname -r) build-essential
make 
sudo make install 

Nun lädt man das Modul mit

sudo modprobe -rfv fsam7400 # ggf. Modul aus vorigem Fall entladen
sudo modprobe -v fsam7440 radio=1 

und verfährt danach wie im Abschnitt zu fsam7400 gezeigt – dabei sind alle Vorkommen von fsam7400 durch fsam7440 zu ersetzen.

Modul fsaa1655g (nicht im Kernel)

Modul herunterladen und entpacken (Quellen: 1 🇬🇧, 2 🇬🇧):

wget http://www.marvec.org/amilo/fsaa1655g-kernel-2.6.26.tar.bz2
mkdir fsaa1655g
tar xvCfj fsaa1655g fsaa1655g-kernel-2.6.26.tar.bz2  

Kompilieren und installieren (diesen Schritt bei einem Kernelupdate wiederholen oder DKMS verwenden):

sudo apt-get install linux-headers-$(uname -r) build-essential
cd fsaa1655g
make 
sudo make install 

Nun lädt man das Modul mit

sudo modprobe -rfv fsam7440 # ggf. Modul aus vorigem Fall entladen
sudo modprobe -v fsaa1655g  

und verfährt danach wie im Abschnitt zu fsam7400 gezeigt – dabei sind alle Vorkommen von fsam7400 durch fsaa1655g zu ersetzen.

Diese Revision wurde am 1. August 2020 14:13 von linrunner erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: WLAN, System, Netzwerk, Hardware, Notebook