Antworten:
Es gibt mindestens zwei Upstart-Jobs, die sich auf den Standard-WLAN-Status auswirken:
/etc/init/rfkill-restore.conf
stellt 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.conf
Startet 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.conf
viel 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.conf
und /etc/init/network-manager.conf
. Ein längerer Schlaf /etc/rc.local
vor dem Ausstellen eines rfkill block wifi
ist 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-state
und /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.conf
mit 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 sed
oben 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-restore
und network-manager
Jobs gestartet wird, bevor radio-silence
die Dateiänderungen abgeschlossen sind. Erstellen Sie /etc/init/radio-silence-wait.conf
wie 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-restore
und 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?"
"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 off
ist ä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 WirelessEnabled
bleibt false
. Sie können dies tun, indem Sie das Init-Skript von Network Manager bearbeiten oder den folgenden /etc/rc.local
Trick 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 wifi
Befehl 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.local
mit einer Erläuterung des rfkill
Befehls bearbeitet wird )
Ein bisschen hacky, aber es sollte funktionieren. Eine WLAN-Karte kann mit dem rfkill
Befehl 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 blocked
Dies hängt von einer Hardwareeinstellung ab, z. B. einem drahtlosen Schalter an einem Notebook. Soft blocked
kann vom Betriebssystem (Ubuntu) gesteuert werden.
Wie funktioniert es? Es gibt keine Manpage. rfkill
In 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 wifi
als 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 0
und 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.
/etc/rc.local
da 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 wifi
oder rfkill unblock wifi
erhalte, wird "RFKILL-Steuergerät kann nicht geöffnet werden: Berechtigung verweigert" angezeigt.
$ rfkill block wifi
das NetworkManager-Applet "WLAN ist deaktiviert" an und wird $ iwconfig
angezeigt Tx-Power=off
. $ rfkill unblock wifi
macht diesen Effekt rückgängig.
/etc/rc.local
. Verwenden Sie stattdessen:/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
Datei, die die Einstellungen beibehält, eine davon WirelessEnabled=false
. Ich werde in Ihrer Frage
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 down
die Schnittstelle heruntergefahren ( ) und es wird kein Scan mehr durchgeführt.
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.service
speichert 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.
/etc/default/grub
mit Ihrem bevorzugten Texteditor.systemd.restore_state=1
als 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.
tlp
:tlp 0.8-1
die in 16.04-Repositorys verfügbar sind. Nach der Aktualisierung auf tlp 0.9-1
linrunner ppa wurden ALLE Probleme gelöst.Ursprüngliche Antwort:
tlp
Masken / Deaktivierungen, systemd-rfkill.service
um "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_STARTUP
standardmäß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
tlp
gelingt 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 Manger
zeigt an, dass WiFi deaktiviert ist, aber rfkill list
keinen 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_STARTUP
vor dem Aktivieren deaktiviertDEVICES_TO_DISABLE_ON_STARTUP
, um Konflikte zu vermeiden.
tlp-rdw
funktionieren die anderen angebotenen Optionen nicht wie erwartet.tlp
Benutzer:tlp 0.9-1
Linrunner ppa.Ursprüngliche Antwort:
Das Aktivieren DEVICES_TO_DISABLE_ON_STARTUP
und Einstellen zum Deaktivieren von Bluetooth und WiFi funktioniert möglicherweise für Sie. ( Es hat für diese Person funktioniert. )
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
GRUB_CMDLINE_LINUX
und GRUB_CMDLINE_LINUX_DEFAULT
dem (nicht erwähnten) sudo update-grub
Befehl ausprobiert und konnte sie in Pop_OS nicht zum Laufen bringen! 19.10 (basierend auf Ubuntu 19.10). Demnach systemctl status systemd-rfkill
wird 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-rfkill
sollte 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.
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.
rfkill
.