[[Vorlage(Getestet, focal, bionic)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Editor: Einen Editor mit Root-Rechten öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/Oxygen/network-wireless.png, 100, align=left)]] Das Subsystem [https://www.kernel.org/doc/Documentation/rfkill.txt rfkill] {en} 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 * [:Bluetooth:] * [:WLAN:] – Wireless LAN, von Herstellern auch als [wikipedia:Wi-Fi:] bezeichnet * [:UMTS:] – von Herstellern oft als WWAN für ''"Wireless WAN"'' bezeichnet * [wikipedia:WiMAX:WiMAX] * [wikipedia:Wireless_USB:Wireless USB] – auch als [wikipedia:UWB:] für ''"Ultra Wide Band"'' bezeichnet 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 [https://wireless.wiki.kernel.org/en/users/documentation/rfkill rfkill] {en}, 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl rfkill list BEZEICHNER }}} Den `BEZEICHNER` für die gewünschte Geräteklasse ermittelt man anhand [#tabelle1 Tabelle 1]. So selektiert man z.B. nur die WLAN-Geräte mit: {{{#!vorlage Befehl 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. [[Vorlage(Tasten, 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: {{{#!vorlage Befehl rfkill block BEZEICHNER # ausschalten rfkill unblock BEZEICHNER # einschalten }}} Den Zustand von "Hard blocked" kann man __nicht__ per Software schalten. Siehe auch [#Problembehandlung Problembehandlung]. {{{#!vorlage 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: [[Anker(tabelle1)]] {{{#!vorlage Tabelle <-2 rowclass="titel"> 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: {{{#!vorlage Befehl rfkill block NUMMER # ausschalten rfkill unblock NUMMER # einschalten }}} Um das WLAN aus dem obigen Beispiel auszuschalten, verwendet man also: {{{#!vorlage Befehl 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 [:Archiv/rc.local:/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 [post:3277002: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: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl sudo modprobe MODULNAME }}} und prüft mit {{{#!vorlage Befehl rfkill list }}} ob das fehlende Funkgerät nun angezeigt wird. Dabei ist es wichtig, die nicht passenden Module sogleich wieder zu entfernen mit {{{#!vorlage Befehl 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 [:Kernelmodule#Module-automatisch-laden:/etc/modules] anfügt. Beispiel: {{{#!vorlage Befehl 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) 1. [:TP-SMAPI#Hardware-Reset: Hardware-Reset] 1. [:TP-SMAPI#BIOS-Default-Settings: BIOS Default Settings] 1. Einschalten des betroffenen Adapters über ein parallel installiertes Windows {{{#!vorlage Warnung 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 {{{#!vorlage Befehl lsmod | egrep 'acer|dell' }}} herausfinden. == Modul acer_wmi == === Lädt auf unpassender Hardware === Das Modul [:Archiv/acer-wmi: 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` {{{#!vorlage Befehl sudo modprobe -r acer_wmi }}} um danach ggf. das herstellerspezifische Modul (s.o.) zu entladen und erneut zu laden {{{#!vorlage Befehl 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 [:Kernelmodule#Automatisches-Laden-verhindern-Blacklisting:Blacklisting] unterbinden: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl sudo modprobe -rv acer_wmi # entladen sudo modprobe -v acer_wmi wireless=1 # neu laden }}} erfolgreich verläuft, kann man den Parameter mittels {{{#!vorlage Befehl echo "options acer_wmi wireless=1" | sudo tee /etc/modprobe.d/acer_wmi.conf }}} permanent machen. ##Bei älteren Acer- bzw. FSC-Notebooks lohnt ggf. ein Blick in [:Acer_Hotkeys:]. == 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 ([post:2750887:Beispiel]). __Symptom__: die Abfrage mit rfkill zeigt: {{{ 0: dell-wifi: Wireless LAN Soft blocked: yes Hard blocked: yes }}} __Behebung:__ {{{#!vorlage Befehl echo "blacklist dell_laptop" | sudo tee -a /etc/modprobe.d/blacklist.conf }}} = Nicht von rfkill unterstützte Hardware = {{{#!vorlage 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 [:Archiv/rc.local:/etc/rc.local] hinzu. == ASUS Notebooks == Prüfung, ob die Steuermodule geladen werden: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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): {{{#!vorlage Befehl 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 [[Vorlage(Tasten, Fn + F2)]] zu aktivieren ([post:1506096:Forenartikel]). Dazu editiert man mit Root-Rechten [3] die Datei '''/etc/acpi/asus-wireless.sh''' und ersetzt den Inhalt durch: {{{#!code sh #!/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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl sudo modprobe -rfv ipw2200 sudo modprobe -v ipw2200 led=1 }}} erfolgreich, macht man die Einstellung permanent: {{{#!vorlage Befehl 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 [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=drivers/input/misc/wistron_btns.c 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 {{{#!vorlage Befehl 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 [:Kernelmodule#Module-automatisch-laden:/etc/modules] anfügt: {{{#!vorlage Befehl echo "wistron_btns" | sudo tee -a /etc/modules }}} == Ältere FSC Amilo Notebooks == (nur Ubuntu 12.04) Hier sind drei Varianten zu unterscheiden: 1. fsam7400 1. fsam7440 1. fsaa1655g === Modul fsam7400 (im Kernel) === {{{#!vorlage Hinweis Benutzerberichten zufolge (Quellen: [https://ubuntuforums.org/showthread.php?p=11573566#post11573566 Ubuntu-Forum Artikel 1] {en}, [https://secure.kitserve.org.uk/content/xorg-and-wireless-ubuntu-and-debian-fujitsu-siemens-amilo-pro-v2000d Ubuntu-Forum Artikel 2] {en}) funktioniert `fsam7400` ab Kernel 3.0 bzw. Ubuntu 11.10 nicht mehr. Als alternative Lösung bietet sich das [#FSC-Amilo-Acer-Aspire-Travelmate vorstehend beschriebene] Modul `wistron_btns` an. }}} Nun lädt man das Modul mit {{{#!vorlage Befehl sudo modprobe -v fsam7400 radio=1 }}} und prüft, ob sich der Adapter im Terminal schalten läßt mit: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl echo "fsam7400" | sudo tee -a /etc/modules }}} und den gewünschten Schaltzustand festlegen {{{#!vorlage Befehl 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: * [[Anhang(fsam7440-0.4_fixed_10.10_and_up.tar.gz, "Ubuntu 10.10 und höher")]] {dl} Entpacken: {{{#!vorlage Befehl 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): {{{#!vorlage Befehl sudo apt-get install linux-headers-$(uname -r) build-essential make sudo make install }}} Nun lädt man das Modul mit {{{#!vorlage Befehl sudo modprobe -rfv fsam7400 # ggf. Modul aus vorigem Fall entladen sudo modprobe -v fsam7440 radio=1 }}} und verfährt danach wie im Abschnitt zu [#Modul-fsam7400-im-Kernel fsam7400] gezeigt – dabei sind alle Vorkommen von `fsam7400` durch `fsam7440` zu ersetzen. === Modul fsaa1655g (nicht im Kernel) === Modul herunterladen und entpacken (Quellen: [https://marvec.org/amilo/ 1] {en}, [uf_thread:1530962:2] {en}): {{{#!vorlage Befehl 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): {{{#!vorlage Befehl sudo apt-get install linux-headers-$(uname -r) build-essential cd fsaa1655g make sudo make install }}} Nun lädt man das Modul mit {{{#!vorlage Befehl sudo modprobe -rfv fsam7440 # ggf. Modul aus vorigem Fall entladen sudo modprobe -v fsaa1655g }}} und verfährt danach wie im Abschnitt zu [#Modul-fsam7400-im-Kernel fsam7400] gezeigt – dabei sind alle Vorkommen von `fsam7400` durch `fsaa1655g` zu ersetzen. = Links = * [https://www.kernel.org/doc/Documentation/rfkill.txt rfkill] {en} – Dokumentation der Kernel-Schnittstelle * [https://wireless.wiki.kernel.org/en/users/documentation/rfkill wireless.wiki.kernel.org rfkill] {en} – Dokumentation des Kommandozeilen-Werkzeugs * [:Archiv/acer-wmi:] – Artikel zum Kernelmodul `acer_wmi` * [:Archiv/Acer_Hotkeys:] – Werkzeug für ältere Notebooks, nur 32-Bit Systeme * [:Kernelmodule:] {Übersicht} Grundlagenartikel zur Handhabung von Kernelmodulen # tag: Hardware, System, Netzwerk, Notebook, WLAN