Wie kann ich das Radio einer WLAN-Karte standardmäßig ausgeschaltet lassen?

11

Die PCI-WLAN-Karte meines Desktops sucht immer nach verfügbaren WLANs, aber ich verwende sie nur selten. Kann ich das Radio ausgeschaltet lassen, bis ich es brauche?

ændrük
quelle

Antworten:

4

Es gibt mindestens zwei Upstart-Jobs, die sich auf den Standard-WLAN-Status auswirken:

  • /etc/init/rfkill-restore.confstellt den Softblock-Status für alle Funkgeräte auf den Stand zurück, an dem sie zuletzt heruntergefahren wurden, wie in aufgezeichnet /var/lib/rfkill/saved-state.
  • /etc/init/network-manager.confStartet Network Manager, der wiederum seine Idee des drahtlosen Status von wiederherstellt /var/lib/NetworkManager/NetworkManager.state.

Wenn Sie sich diese beiden Jobkonfigurationen ansehen, werden Sie feststellen, dass sie keine zeitliche Beziehung haben , was mir wie ein Konstruktionsfehler erscheint. Ich vermute, dass diese Rennbedingung selten ein Problem darstellt, da sie /etc/init/rfkill-restore.confviel einfacher ist und weniger Startbedingungen hat.

Alle Lösungen zur Durchsetzung eines Wireless-Off-Standards, die ich gesehen habe, versuchen zu verwenden /etc/rc.local, einschließlich der "modernen" Lösung , die @Lekensteyn und @ rubo77 entwickelt haben. Leider funktioniert diese Lösung auf keinem der beiden von mir getesteten Laptops. Dies ist überraschend nicht besonders , weil /etc/rc.local auch hat keine zeitliche Beziehung , dass ich entweder zu finden /etc/init/rfkill-restore.confund /etc/init/network-manager.conf. Ein längerer Schlaf /etc/rc.localvor dem Ausstellen eines rfkill block wifiist eine hässliche Problemumgehung für dieses Durcheinander der Rennbedingungen, aber es funktioniert, wenn die Verzögerung lang genug ist.

Eine bessere Lösung wäre, wenn wir unsere gewünschten Zustände in /var/lib/rfkill/saved-stateund /var/lib/NetworkManager/NetworkManager.state bevor diese beiden Upstart-Jobs überhaupt ausgeführt werden dürfen, auferlegen . Wir können dies erreichen, indem wir unseren eigenen Upstart-Job erstellen. Tatsächlich benötigen wir zwei Jobkonfigurationsdateien, um das benötigte Timing zu erreichen.

Unsere erste Jobkonfiguration führt die eigentlichen Dateimodifikationen durch, die wir benötigen. Es wird so früh wie möglich und nur einmal ausgeführt. Erstellen Sie /etc/init/radio-silence.confmit diesem Inhalt:

# radio-silence - Ensure radio silence on startup
#
# Override default startup behaviour of radios to ensure they are all
# disabled until the user deliberately enables them. This job requires
# radio-silence-wait to delay start of any services that may depend on
# resources manipulated by this job.

description "Disable all radios by default"

start on local-filesystems

pre-start script
  sed -i -re "s/^(.+[[:space:]]+)[01][[:space:]]*\$/\11/" /var/lib/rfkill/saved-state
  sed -i -re "s/^(WirelessEnabled=).*\$/\1false/" /var/lib/NetworkManager/NetworkManager.state
end script

Da ich beim Starten meines Laptops eine völlige Funkstille bevorzuge, blockiere ich alle Funkgeräte, nicht nur die drahtlosen, sondern Sie können die ersten sedoben genannten ändern , um die Auswirkungen dieses Jobs auf die drahtlosen Geräte zu beschränken, die Sie sanft blockieren möchten.

Unsere zweite Jobkonfiguration ist dafür verantwortlich, dass keiner der rfkill-restoreund network-managerJobs gestartet wird, bevor radio-silencedie Dateiänderungen abgeschlossen sind. Erstellen Sie /etc/init/radio-silence-wait.confwie folgt:

# radio-silence-wait - Helper task for radio-silence
#
# Delays the start of all jobs that may depend on resources manipulated
# by radio-silence job. Avoids the need to modify job configuration of
# those other jobs.

description "Assist radio-silence by delaying jobs it affects"

start on (starting rfkill-restore or starting network-manager)
stop on (started radio-silence or stopped radio-silence)

instance $JOB
normal exit 0 2
task

script
  status radio-silence | grep -q "start/running" && exit 0
  start radio-silence || true
  sleep infinity
end script

Mit dieser Lösung sehe ich keine Probleme mit den Rennbedingungen mehr, obwohl ich mich nicht mit dem theoretischen Rennen zwischen rfkill-restoreund befasst habe network-manager.

Weitere Informationen darüber, wie diese Jobs zusammenarbeiten, um unser zeitliches Ziel zu erreichen, finden Sie in meiner Frage und Antwort: "Wie erstelle ich einen Single-Execution-Upstart-Job, der garantiert abgeschlossen wird, bevor zwei andere Jobs beginnen?"

froage
quelle
7

"Moderne" Lösung mit Network Manager: Deaktivieren Sie einfach die Option Wireless Enabled im Network Manager-Applet (KDE: Network Management). Der Befehl nmcli nm wifi offist äquivalent. Lesen Sie weiter, wenn Sie Wi-Fi sporadisch aktivieren, es aber beim Neustart auf deaktiviert zurücksetzen möchten.

Der drahtlose Status wird in der Datei gespeichert /var/lib/NetworkManager/NetworkManager.state. Stellen Sie zum Deaktivieren von Wi-Fi beim Booten sicher, dass der Schlüssel bei WirelessEnabledbleibt false. Sie können dies tun, indem Sie das Init-Skript von Network Manager bearbeiten oder den folgenden /etc/rc.localTrick anwenden. Der Befehl, den Sie benötigen, lautet:

sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi

Stellen Sie dies vorher exit 0(wie unten beschrieben). Der rfkill block wifiBefehl wird aufgrund eines Rennens mit dem Start von Network Manager (NM) weiterhin benötigt. Nach dem Start von NM haben Änderungen an der Statusdatei keine Auswirkung mehr.


(alte Antwort, bei der die Datei /etc/rc.localmit einer Erläuterung des rfkillBefehls bearbeitet wird )

Ein bisschen hacky, aber es sollte funktionieren. Eine WLAN-Karte kann mit dem rfkillBefehl deaktiviert werden . Alle von rfkill verwendeten Geräte können mit angezeigt werden rfkill list. Beispielausgabe:

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

Hard blockedDies hängt von einer Hardwareeinstellung ab, z. B. einem drahtlosen Schalter an einem Notebook. Soft blockedkann vom Betriebssystem (Ubuntu) gesteuert werden.

Wie funktioniert es? Es gibt keine Manpage. rfkillIn diesem Fall wird beim Ausführen ein Hilfetext bereitgestellt :

Usage:  rfkill [options] command
Options:
        --version       show version (0.4)
Commands:
        help
        event
        list [IDENTIFIER]
        block IDENTIFIER
        unblock IDENTIFIER
where IDENTIFIER is the index no. of an rfkill switch or one of:
        <idx> all wifi wlan bluetooth uwb ultrawideband wimax wwan gps fm

Ah, jetzt kommen wir irgendwohin. Sie müssen rfkill block wifials Root ausgeführt werden, um das drahtlose Gerät zu deaktivieren. (wlan ist ein Alias ​​von wifi, siehe den Quellcode von rfkill ).

Wenn Sie jetzt die drahtlosen Funktionen zur Startzeit deaktivieren möchten, fügen Sie den Befehl durch Ausführen zu /etc/rc.local hinzu sudo nano /etc/rc.local. Verwenden Sie die Pfeiltasten / Seiten-Auf / Ab-Tasten, um zur vorherigen Zeile zu navigieren exit 0und diese hinzuzufügen rfkill block wifi, sodass die Datei wie folgt endet:

# By default, this script does nothing

rfkill block wifi
exit 0

Wenn Sie fertig sind, drücken Sie Ctrl+ X, dann Y, um es zu speichern, und drücken Sie Enter, um den Dateinamen zu akzeptieren.

Wenn Sie das Gerät später aktivieren möchten, führen Sie Folgendes aus : sudo rfkill unblock wifi. Vergessen Sie nicht, die Leitung von /etc/rc.local zu entfernen, wenn Sie sich für die Verwendung der WLAN-Karte entscheiden.

Lekensteyn
quelle
Vielen Dank. Ich verstehe nicht warum, aber es sieht so aus, als müsste ich sudo nicht verwenden, damit rfkill funktioniert.
ændrük
1
Sie benötigen kein Sudo, /etc/rc.localda das Skript mit Root-Berechtigungen ausgeführt wird. Es ist sehr unwahrscheinlich, dass Sie WLAN ohne Root-Berechtigungen deaktivieren können. Wenn ich es versuche rfkill block wifioder rfkill unblock wifierhalte, wird "RFKILL-Steuergerät kann nicht geöffnet werden: Berechtigung verweigert" angezeigt.
Lekensteyn
Wenn Sie sowohl auf meinem ThinkPad X60 als auch auf meinem Desktop mit einer PCI-WLAN-Karte ausgeführt werden, zeigt $ rfkill block wifidas NetworkManager-Applet "WLAN ist deaktiviert" an und wird $ iwconfigangezeigt Tx-Power=off. $ rfkill unblock wifimacht diesen Effekt rückgängig.
ændrük
1
Ich habe es mit einer Verzögerung gelöst: Es scheint, als müssten Sie in Ubuntu 14.04 einige Sekunden warten, bevor Sie WLAN deaktivieren /etc/rc.local. Verwenden Sie stattdessen:/bin/sleep 10 && rfkill block wifi
rubo77
1
@ rubo77 Hier (Arch Linux, Network Manager 0.9.8.10-3) existiert eine /var/lib/NetworkManager/NetworkManager.stateDatei, die die Einstellungen beibehält, eine davon WirelessEnabled=false. Ich werde in Ihrer Frage
posten
1

Der einfachste Weg, Ihre WLAN-Karte zu deaktivieren, besteht darin, mit der rechten Maustaste auf die NetworkManager-Anzeige zu klicken (kleines Symbol oben rechts im Bedienfeld) und das Kontrollkästchen zu deaktivieren Enable Wireless. Dadurch wird ifconfig wlan0 downdie Schnittstelle heruntergefahren ( ) und es wird kein Scan mehr durchgeführt.

user4124
quelle
2
Das Aktivieren dieses Menüelements wirkt sich nicht auf das Standardverhalten aus. Wenn ich den Computer das nächste Mal einschalte, ist das Funkgerät wieder aktiv.
ændrük
1
Bei meinem Ubuntu 14.04 bleibt es nach einem Neustart wie gewünscht ausgeschaltet, wenn ich es im Netzwerkmanager-Applet
rubo77
1

Hinweis: Wenn Sie verwenden tlp, lesen Sie bitte die gesamte Antwort.

Alle Antworten auf diese Frage sind jetzt ziemlich alt und funktionieren nicht mit neueren Ubuntu-Versionen, die systemd verwenden. Die Antwort von froage hat am 14.04 für mich funktioniert, aber am 16.04 nicht.

Systemd systemd-rfkill.servicespeichert den Status des rfkill-Schalters während des Herunterfahrens und stellt ihn bei jedem Start wieder her.

Sie müssen einen Kernel-Befehlszeilenparameter übergeben, um den Status des rfkill-Schalters bei jedem Start wiederherzustellen.

  1. Öffnen Sie /etc/default/grubmit Ihrem bevorzugten Texteditor.
  2. systemd.restore_state=1als Parameter hinzufügen zu GRUB_CMDLINE_LINUX. Diese Zeile sollte jetzt lauten GRUB_CMDLINE_LINUX="systemd.restore_state=1". Sie können es auch hinzufügen GRUB_CMDLINE_LINUX_DEFAULT. Beides funktioniert. Weitere Informationen finden Sie in dieser Frage .

Dadurch wird sichergestellt, dass der rfkill-Status bei jedem Start wiederhergestellt wird. Stellen Sie sicher, dass Bluetooth und WLAN ausgeschaltet sind, bevor Sie neu starten.


Probleme mit tlp:

Update: Diese Probleme waren vorhanden, tlp 0.8-1die in 16.04-Repositorys verfügbar sind. Nach der Aktualisierung auf tlp 0.9-1linrunner ppa wurden ALLE Probleme gelöst.

Ursprüngliche Antwort:

tlpMasken / Deaktivierungen, systemd-rfkill.serviceum "Konflikte zu vermeiden und den ordnungsgemäßen Betrieb der Vermittlungsoptionen für TLP-Funkgeräte sicherzustellen" . ( Quelle-1 , Quelle-2 )

Dies bedeutet, dass die Übergabe des Kernel-Parameters für Sie nicht funktioniert.

Hier ist ein kleiner Ausschnitt (um Zeile Nr. 195) aus der Standardkonfigurationsdatei ( /etc/default/tlp) von tlp .

# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
#   are ignored when this is enabled!
RESTORE_DEVICE_STATE_ON_STARTUP=0

# Radio devices to disable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"

# Radio devices to enable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
  • Wie Sie sehen, ist die Option to RESTORE_DEVICE_STATE_ON_STARTUPstandardmäßig deaktiviert. Das Aktivieren dieser Option hilft jedoch nicht.

    Selbst nachdem Sie die Option zum RESTORE_DEVICE_STATE_ON_STARTUP Deaktivieren von WLAN und Bluetooth (Verwenden rfkill block all) und zum weiteren Neustart aktiviert haben, wird WLAN bei jedem zweiten oder dritten Start aktiviert. Es gibt keine Garantie dafür, dass beim nächsten Start WLAN deaktiviert wird. Überraschenderweise tlpgelingt es, Bluetooth bei jedem Start deaktiviert zu halten.

  • Gleiches gilt für die 2. Option im Snippet DEVICES_TO_DISABLE_ON_STARTUP, die standardmäßig ebenfalls deaktiviert ist. Das Aktivieren funktioniert auch nicht. Network Mangerzeigt an, dass WiFi deaktiviert ist, aber rfkill listkeinen Softblock für WiFi anzeigt.

    Hinweis: Ich habe die Zeile gelesen "Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!".

    Ich habe RESTORE_DEVICE_STATE_ON_STARTUPvor dem Aktivieren deaktiviert DEVICES_TO_DISABLE_ON_STARTUP, um Konflikte zu vermeiden.

  • Ebenso tlp-rdwfunktionieren die anderen angebotenen Optionen nicht wie erwartet.


Lösung für tlpBenutzer:

Update: Update auf tlp 0.9-1Linrunner ppa.

Ursprüngliche Antwort:

  1. Das Aktivieren DEVICES_TO_DISABLE_ON_STARTUPund Einstellen zum Deaktivieren von Bluetooth und WiFi funktioniert möglicherweise für Sie. ( Es hat für diese Person funktioniert. )

  2. Diese Frage hier auf askubuntu. Es ähnelt einer älteren Antwort auf diese Frage. Aber bitte beachten Sie, dass ich es nicht selbst ausprobiert habe. Es kann funktionieren oder nicht.


Andere Quellen: systemd-rfkill , tlp-configuration


Manoj Sawai
quelle
Ich habe Ihre Antwort mit den Änderungen von beiden GRUB_CMDLINE_LINUXund GRUB_CMDLINE_LINUX_DEFAULTdem (nicht erwähnten) sudo update-grubBefehl ausprobiert und konnte sie in Pop_OS nicht zum Laufen bringen! 19.10 (basierend auf Ubuntu 19.10). Demnach systemctl status systemd-rfkillwird dieser Dienst bereits bei jedem Start ausgeführt, und da der Standardwert lautet 1, sollte dieser Aufwand nicht erforderlich sein. Basierend auf den Informationen unter man systemd-rfkillsollte das Erinnern an den Funkstatus "beim frühen Start" das Standardverhalten sein, was mich zu der Annahme führt, dass diese Komponente irgendwie defekt ist.
Patrick Dark
0

Persönlich verwende ich Jupiter, das Power-Management-Applet, um das WLAN auf meinem Laptop zu deaktivieren, da es über eine spezielle Taste gesteuert wird. Ich glaube nicht, dass ich im Haupt-Repo einen ppa von Andrew bei Webupd8 hinzufügen musste , um ihn zu bekommen.

Hoffe das hilft.

Allan
quelle
0

Sie könnten hinzufügen

ifconfig wlan0 down

zu /etc/rc.local, aber zuerst

Wenn Sie NetworkManager verwenden (ich habe Version 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), gehen Sie zum Menü "Verbindungen bearbeiten " -> " Drahtlos ", klicken Sie auf die Verbindung und klicken Sie auf " Bearbeiten ". und stellen Sie sicher, dass auf der Registerkarte " Drahtlos " das Kontrollkästchen " Automatisch verbinden " NICHT aktiviert ist.

Walzer
quelle
1
Dadurch wird zwar die Schnittstelle heruntergefahren, es wird jedoch nicht so viel Strom gespart wie durch Deaktivieren des Radios rfkill.
Gertvdijk