La carte sans fil PCI de mon bureau recherche toujours les réseaux sans fil disponibles, mais je ne l'utilise que rarement. Puis-je garder la radio éteinte jusqu'à ce que j'en ai besoin?
Il y a au moins deux tâches Upstart qui affectent l'état sans fil par défaut:
/etc/init/rfkill-restore.conf
restaure l'état de bloc souple de toutes les radios à leur état d'arrêt final, comme indiqué dans /var/lib/rfkill/saved-state
./etc/init/network-manager.conf
démarre Network Manager, qui restaure ensuite son idée d'état sans fil à partir de /var/lib/NetworkManager/NetworkManager.state
.Si vous regardez ces deux configurations de travail, vous constaterez qu’elles n’ont aucune relation temporelle , ce qui me semble être un défaut de conception. Je suppose que cette situation de concurrence critique est rarement un problème, car /etc/init/rfkill-restore.conf
est beaucoup plus simple et comporte moins de conditions de départ.
Toutes les solutions que j'ai observées pour imposer un paramètre de désactivation sans fil que j'ai vu essaient d'utiliser /etc/rc.local
, y compris la solution "moderne" que @Lekensteyn et @ rubo77 ont proposée. Malheureusement, cette solution ne fonctionne pas pour moi sur l'un des deux ordinateurs portables que j'ai essayés. Ceci n’est pas particulièrement surprenant car /etc/rc.local
a également également aucune relation temporelle que je peux trouver dans /etc/init/rfkill-restore.conf
et /etc/init/network-manager.conf
. Jeter un long sommeil dans /etc/rc.local
avant d'émettre un rfkill block wifi
est une solution de contournement moche pour ce gâchis de conditions de concurrence critique, mais elle fonctionne si le délai est suffisamment long.
Une meilleure solution consisterait pour nous à imposer les états souhaités dans /var/lib/rfkill/saved-state
et /var/lib/NetworkManager/NetworkManager.state
avant avant que ces deux travaux Upstart ne soient autorisés. courir. Nous pouvons y parvenir en créant notre propre travail Upstart. En réalité, nous aurons besoin de deux fichiers de configuration de travail pour obtenir le temps dont nous avons besoin.
Notre première configuration de travail effectue les modifications de fichier dont nous avons besoin. Il fonctionnera le plus tôt possible et ne fonctionnera qu'une fois. Créez /etc/init/radio-silence.conf
avec ce contenu:
# 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
Comme je préfère le silence radio total au démarrage de mon ordinateur portable, je bloque toutes les radios , pas seulement sans fil, mais vous pouvez modifier le premier sed
ci-dessus pour limiter l’impact de ce travail sur les périphériques sans fil que vous souhaitez bloquer en douceur.
Notre deuxième configuration de travail est chargée de veiller à ce qu'aucun des travaux rfkill-restore
et network-manager
ne démarre avant que radio-silence
n'ait terminé les modifications du fichier. Créez /etc/init/radio-silence-wait.conf
comme suit:
# 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
Avec cette solution, je ne vois plus de problèmes de condition de concurrence, bien que je n’aie pas abordé la course théorique entre rfkill-restore
et network-manager
.
Pour plus de détails sur la manière dont ces tâches fonctionnent ensemble pour atteindre notre objectif temporel, reportez-vous à ma question et à ma réponse, "Comment créer un travail Upstart à exécution unique dont l'exécution est garantie avant que deux autres travaux ne commencent?"
Solution "moderne" utilisant Network Manager: décochez simplement l'option Wireless Enabled de l'applet Network Manager (KDE: Network Management). La commande nmcli nm wifi off
est équivalente. Continuez à lire si vous activez sporadiquement le Wi-Fi, mais souhaitez le désactiver en mode redémarrage.
L'état du réseau sans fil est mémorisé dans le fichier /var/lib/NetworkManager/NetworkManager.state
. Pour désactiver le Wi-Fi au démarrage, assurez-vous que la clé WirelessEnabled
reste sur false
. Vous pouvez le faire en modifiant le script d’initialisation de Network Manager ou en utilisant l’astuce /etc/rc.local
ci-dessous. La commande dont vous avez besoin est:
sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi
Placez ceci avant exit 0
(comme décrit ci-dessous). La commande rfkill block wifi
est toujours nécessaire en raison d'une course au démarrage de Network Manager (NM). Une fois que NM a commencé, les modifications apportées au fichier d'état n'ont aucun effet.
(ancienne réponse impliquant l'édition du fichier /etc/rc.local
avec une explication de la commande rfkill
)
Un peu hacky, mais ça devrait marcher. Une carte sans fil peut être désactivée à l'aide de la commande rfkill
. Tous les périphériques utilisés par rfkill peuvent être affichés avec rfkill list
. Exemple de sortie:
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Hard blocked
dépend d'un paramètre matériel, par exemple. un commutateur sans fil sur un ordinateur portable. Soft blocked
peut être contrôlé par le système d'exploitation (Ubuntu).
Comment ça marche? Il n'a pas de page de manuel, exécuter rfkill
fournit un texte d'aide dans ce cas:
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, maintenant nous arrivons quelque part. Vous devez exécuter rfkill block wifi
en tant que root pour désactiver le périphérique sans fil. (wlan est un alias de wifi, voir le code source de rfkill ).
Maintenant, si vous souhaitez désactiver les fonctions sans fil à l’heure boottime, ajoutez la commande à /etc/rc.local en exécutant Sudo nano /etc/rc.local
. Utilisez les touches fléchées/page haut/bas pour naviguer jusqu'à la ligne précédant exit 0
et ajoutez rfkill block wifi
, afin que le fichier se termine comme ceci:
# By default, this script does nothing
rfkill block wifi
exit 0
Lorsque vous avez terminé, appuyez sur Ctrl + X, puis appuyez Y pour le sauvegarder et appuyez sur Enter accepter le nom de fichier.
Si vous décidez d'activer le périphérique ultérieurement, exécutez: Sudo rfkill unblock wifi
. N'oubliez pas de supprimer la ligne de /etc/rc.local si vous décidez d'utiliser la carte sans fil.
Le moyen le plus simple de désactiver votre carte sans fil consiste à cliquer avec le bouton droit de la souris sur le voyant NetworkManager (petite icône en haut à droite du panneau), puis à désélectionner la touche Enable Wireless
. Cela désactive (ifconfig wlan0 down
) l'interface et n'effectue plus la numérisation.
tlp
, veuillez lire la réponse au complet.Toutes les réponses à cette question sont plutôt anciennes et ne fonctionnent pas avec les nouvelles versions d'Ubuntu utilisant systemd. réponse de froage a travaillé pour moi le 14.04 mais ne fonctionne pas le 16.04.
Systemd utilise systemd-rfkill.service
pour sauvegarder l'état du commutateur rfkill lors de l'arrêt et le restaurer à chaque démarrage.
Vous devez passer un paramètre de ligne de commande du noyau pour restaurer l’état du commutateur rfkill à chaque démarrage.
/etc/default/grub
avec votre éditeur de texte préféré.systemd.restore_state=1
en tant que paramètre à GRUB_CMDLINE_LINUX
. Cette ligne devrait maintenant indiquer GRUB_CMDLINE_LINUX="systemd.restore_state=1"
. Vous pouvez également l'ajouter à GRUB_CMDLINE_LINUX_DEFAULT
. L'un ou l'autre fonctionne. Voir cette question pour plus de détails.Cela garantira que l'état rfkill sera restauré à chaque démarrage. Assurez-vous de désactiver Bluetooth et WiFi avant de redémarrer.
tlp
:tlp 0.8-1
, disponible dans les référentiels 16.04. Après la mise à jour vers tlp 0.9-1
à l'aide de linrunner ppa, TOUS LES problèmes ont été résolus.Réponse originale:
tlp
masque/désactive systemd-rfkill.service
pour "éviter les conflits et assurer le fonctionnement correct des options de commutation du périphérique radio de TLP" . ( Source-1 , Source-2 )
Cela signifie que passer le paramètre du noyau ne fonctionnera pas pour vous.
Voici un petit extrait (autour de la ligne n ° 195) du fichier de configuration par défaut de tlp (/etc/default/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"
Comme vous pouvez le voir, l'option RESTORE_DEVICE_STATE_ON_STARTUP
est désactivée par défaut. Mais activer cette option n'aide pas.
Même après avoir activé l’option RESTORE_DEVICE_STATE_ON_STARTUP
, désactivez le Wi-Fi et le Bluetooth (avec rfkill block all
) et continuez à redémarrer, d’une manière ou d’une autre, le WiFi est activé tous les 2 ou 3 démarrages. Il n'y a aucune garantie que lors du prochain démarrage, le WiFi sera désactivé. Étonnamment, tlp
parvient à garder le bluetooth désactivé à chaque démarrage.
Il en va de même pour la 2e option de l'extrait, DEVICES_TO_DISABLE_ON_STARTUP
, qui est également désactivé par défaut. L'activer ne fonctionne pas non plus. Network Manger
indique que le WiFi est désactivé mais rfkill list
ne montre aucun bloc logiciel sur le WiFi.
Remarque: j'ai lu la ligne"Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!"
.
J'ai désactivéRESTORE_DEVICE_STATE_ON_STARTUP
avant d'activerDEVICES_TO_DISABLE_ON_STARTUP
pour éviter les conflits.
tlp-rdw
ne fonctionnent pas comme prévu.tlp
:tlp 0.9-1
à l'aide de linrunner ppa.Réponse originale:
Activer DEVICES_TO_DISABLE_ON_STARTUP
et le configurer pour désactiver Bluetooth et le WiFi peut fonctionner pour vous. ( Cela a fonctionné pour cette personne )
Cette question ici sur askubuntu. Cela ressemble à une réponse plus ancienne à cette question. Mais notez bien que je n'ai pas essayé moi-même. Cela peut ou peut ne pas fonctionner.
Autres sources: systemd-rfkill , tlp-configuration
Tu pourrais ajouter
ifconfig wlan0 down
à /etc/rc.local
, mais d'abord,
assurez-vous que, si vous utilisez NetworkManager (la version 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3) existe, vous accédez au menu " Modifier les connexions " -> " Sans fil ", cliquez sur la connexion, cliquez sur" Modifier "et assurez-vous que, dans le" Sans fil ", la case" Se connecter automatiquement "n'est pas cochée.
Personnellement, j'utilise Jupiter l'applet de gestion de l'alimentation pour désactiver le sans fil sur mon ordinateur portable car il est contrôlé par un bouton spécial. Je ne pense pas que dans le référentiel principal, j'ai dû ajouter un ppa d'Andrew à Webupd8 pour l'obtenir.
J'espère que cela t'aides.