Comment puis-je désactiver la radio d'une carte sans fil par défaut?

11

La carte sans fil PCI de mon ordinateur de 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?

ændrük
la source

Réponses:

4

Il existe au moins deux tâches Upstart qui affectent l'état sans fil par défaut:

  • /etc/init/rfkill-restore.confrestaure l'état de blocage progressif de toutes les radios à ce qu'elles étaient lors du dernier arrêt, comme enregistré dans /var/lib/rfkill/saved-state.
  • /etc/init/network-manager.confdémarre Network Manager qui à son tour restaure son idée de l'é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 condition de course est rarement un problème car elle /etc/init/rfkill-restore.confest beaucoup plus simple et a moins de conditions de départ.

Toutes les solutions pour appliquer un défaut sans fil que j'ai vu essayer d'utiliser /etc/rc.local, y compris la solution «moderne» proposée par @Lekensteyn et @ rubo77. Malheureusement, cette solution ne fonctionne pour moi sur aucun des deux ordinateurs portables que j'ai essayés. Cela n'est pas particulièrement surprenant car /etc/rc.local il n'y a pas non plus de relation temporelle que je puisse trouver avec /etc/init/rfkill-restore.confet /etc/init/network-manager.conf. Jeter un sommeil prolongé /etc/rc.localavant d'émettre un rfkill block wifiest une solution de contournement laide pour ce gâchis de condition de course, mais cela fonctionne si le retard est suffisamment long.

Une meilleure solution serait pour nous d'imposer nos états souhaités dans /var/lib/rfkill/saved-stateet /var/lib/NetworkManager/NetworkManager.state avant que ces deux tâches Upstart ne soient même autorisées à s'exécuter. Nous pouvons y parvenir en créant notre propre emploi Upstart. En fait, nous aurons besoin de deux fichiers de configuration de travail pour atteindre le timing dont nous avons besoin.

Notre première configuration de travail effectue les modifications de fichiers réelles dont nous avons besoin. Il s'exécutera le plus tôt possible et ne fonctionnera qu'une seule fois. Créez /etc/init/radio-silence.confavec 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 un silence radio total lorsque mon ordinateur portable démarre, je bloque toutes les radios, non seulement sans fil, mais vous pouvez modifier la première seddans ce qui précède pour limiter l'impact de ce travail sur les appareils sans fil que vous souhaitez bloquer.

Notre deuxième configuration de tâche est chargée de garantir qu'aucune des tâches rfkill-restoreet network-managerne démarrera avant que radio-silenceles modifications de fichiers ne soient terminées. Créez /etc/init/radio-silence-wait.confcomme 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 course, même si je n'ai pas abordé la course théorique entre rfkill-restoreet network-manager.

Pour plus de détails sur la façon dont ces travaux fonctionnent ensemble pour atteindre notre objectif temporel, reportez-vous à ma question et réponse, "Comment créer un travail Upstart à exécution unique garanti de se terminer avant le début de deux autres travaux?"

froage
la source
7

Solution "moderne" utilisant Network Manager: décochez simplement l' option Wireless Enabled dans l'applet Network Manager (KDE: Network Management). La commande nmcli nm wifi offest équivalente. Continuez à lire si vous activez sporadiquement le Wi-Fi, mais que vous souhaitez le réactiver au redémarrage.

L'état 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é WirelessEnabledreste sur false. Vous pouvez le faire en modifiant le script d'initialisation de Network Manager ou en utilisant l' /etc/rc.localastuce ci-dessous. La commande dont vous avez besoin est:

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

Mettez cela avant exit 0(comme décrit ci-dessous). La rfkill block wificommande est toujours nécessaire en raison d'une course au démarrage de Network Manager (NM). Une fois NM démarré, les modifications apportées au fichier d'état n'ont aucun effet.


(ancienne réponse qui implique la modification du fichier /etc/rc.localavec une explication de la rfkillcommande)

Un peu hacky, mais ça devrait marcher. Une carte sans fil peut être désactivée à l'aide de la rfkillcommande. Tous les appareils utilisés par rfkill peuvent être affichés en utilisant rfkill list. Exemple de sortie:

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

Hard blockeddépend d'un paramètre matériel, par exemple un commutateur sans fil sur un ordinateur portable. Soft blockedpeut être contrôlé par le système d'exploitation (Ubuntu).

Comment ça marche? Il n'a pas de page de manuel, l'exécution rfkillfournit 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 en rfkill block wifitant que root pour désactiver le périphérique sans fil. (wlan est un alias du wifi, voir le code source de rfkill ).

Maintenant, si vous souhaitez désactiver les fonctions sans fil à 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édente exit 0et ajouter rfkill block wifi, de sorte que le fichier se termine comme ceci:

# By default, this script does nothing

rfkill block wifi
exit 0

Une fois terminé, appuyez sur Ctrl+ X, puis sur Ypour l'enregistrer et appuyez sur Enterpour accepter le nom de fichier.

Si vous décidez d'activer l'appareil plus tard, 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.

Lekensteyn
la source
Merci. Je ne comprends pas pourquoi, mais il semble que je n'ai pas besoin d'utiliser sudo pour que rfkill fonctionne.
ændrük
1
Vous n'avez pas besoin de sudo /etc/rc.localcar le script est exécuté avec les autorisations root. Il est très peu probable que vous puissiez désactiver le wifi sans les autorisations root. Si j'essaye rfkill block wifiou rfkill unblock wifi, j'obtiens "Impossible d'ouvrir le dispositif de contrôle RFKILL: autorisation refusée".
Lekensteyn
Sur mon ThinkPad X60 et mon ordinateur de bureau avec une carte sans fil PCI, l'exécution $ rfkill block wififait que l'applet NetworkManager affiche «Le sans fil est désactivé» et $ iwconfigs'affiche Tx-Power=off. $ rfkill unblock wifiannule cet effet.
ændrük
1
Je l'ai résolu avec un retard: il semble que dans Ubuntu 14.04, vous devez attendre quelques secondes avant de désactiver le wifi /etc/rc.local. Utilisez ceci à la place:/bin/sleep 10 && rfkill block wifi
rubo77
1
@ rubo77 Ici (Arch Linux, Network Manager 0.9.8.10-3), il existe un /var/lib/NetworkManager/NetworkManager.statefichier qui conserve les paramètres, en WirelessEnabled=falseest un. Je
posterai
1

Le moyen le plus simple de désactiver votre carte sans fil est de cliquer avec le bouton droit sur l'indicateur NetworkManager (petite icône en haut à droite sur le panneau) et de décocher le Enable Wireless. Cela fait baisser ( ifconfig wlan0 down) l'interface et n'effectue plus l'analyse.

user4124
la source
2
La vérification de cet élément de menu n'affecte pas le comportement par défaut. La prochaine fois que j'allumerai l'ordinateur, la radio sans fil sera de nouveau active.
ændrük
1
Sur mon Ubuntu 14.04, il reste éteint comme souhaité après un redémarrage si je le désactive dans l'applet du gestionnaire de réseau
rubo77
1

Remarque: Si vous utilisez tlp, veuillez lire l'intégralité de la réponse.

Toutes les réponses à cette question sont maintenant assez anciennes et ne fonctionnent pas sur les nouvelles versions d'Ubuntu qui utilisent systemd. La réponse de Froage a fonctionné pour moi le 14.04 mais ne fonctionne pas le 16.04.

Systemd utilise systemd-rfkill.servicepour enregistrer l'état du commutateur rfkill pendant 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.

  1. ouvrir /etc/default/grubavec votre éditeur de texte préféré.
  2. ajouter systemd.restore_state=1comme paramètre à GRUB_CMDLINE_LINUX. Cette ligne devrait maintenant se lire 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 le bluetooth et le wifi avant de redémarrer.


Problèmes avec tlp:

Mise à jour: ces problèmes étaient présents tlp 0.8-1et sont disponibles dans les référentiels 16.04. Après la mise à jour de l' tlp 0.9-1utilisation de linrunner ppa, TOUS les problèmes ont été résolus.

Réponse originale:

tlpmasque / désactive systemd-rfkill.servicepour "éviter les conflits et assurer le bon fonctionnement des options de commutation des appareils radio 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_STARTUPest désactivée par défaut. Mais l'activation de cette option n'aide pas.

    Même après avoir activé l'option pour RESTORE_DEVICE_STATE_ON_STARTUP , désactiver le wifi et le bluetooth (en utilisant rfkill block all) et continuer à redémarrer, le WiFi est en quelque sorte activé à chaque 2e ou 3e démarrage. Il n'y a aucune garantie qu'au WiFi suivant sera désactivé. Étonnamment tlpparvient à 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ée par défaut. L'activer ne fonctionne pas non plus. Network Mangermontre que le WiFi est désactivé mais rfkill listn'affiche 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_STARTUPavant d'activer DEVICES_TO_DISABLE_ON_STARTUPpour éviter les conflits.

  • De même, les autres options fournies tlp-rdwne fonctionnent pas comme prévu.


Solution pour les tlputilisateurs:

Mise à jour: mise à jour de l' tlp 0.9-1utilisation de linrunner ppa.

Réponse originale:

  1. L' DEVICES_TO_DISABLE_ON_STARTUPactiver et le configurer pour désactiver Bluetooth et WiFi peut fonctionner pour vous ( cela a fonctionné pour cette personne ).

  2. Cette question ici sur askubuntu. Elle est similaire à une réponse plus ancienne à cette question. Mais veuillez noter que je ne l'ai pas essayé moi-même. Cela peut ou peut ne pas fonctionner.


Autres sources: systemd-rfkill , tlp-configuration


Manoj
la source
J'ai essayé votre réponse impliquant les modifications des deux GRUB_CMDLINE_LINUXet GRUB_CMDLINE_LINUX_DEFAULTla sudo update-grubcommande (non mentionnée) et je n'ai pas pu la faire fonctionner dans Pop_OS! 19.10 (qui est basé sur Ubuntu 19.10). Selon systemctl status systemd-rfkill, ce service est déjà exécuté à chaque démarrage et, comme la valeur par défaut est 1, cet effort ne devrait pas être nécessaire. Sur la base des informations sur man systemd-rfkill, se souvenir de l'état de la radio "au démarrage précoce" devrait être le comportement par défaut, ce qui m'amène à croire que ce composant est en quelque sorte cassé.
Patrick Dark
0

Personnellement, j'utilise Jupiter l'applet de gestion de l'alimentation pour désactiver la connexion sans fil sur mon ordinateur portable car elle est contrôlée par un bouton spécial. Je ne pense pas que dans le dépôt principal, j'ai dû ajouter un ppa d'Andrew à Webupd8 pour l'obtenir.

J'espère que cela t'aides.

Allan
la source
0

Vous pourriez ajouter

ifconfig wlan0 down

à /etc/rc.local, mais d'abord,

assurez-vous que, si vous utilisez NetworkManager (j'ai la version 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), vous allez dans le menu " Modifier les connexions " -> onglet " Sans fil ", cliquez sur la connexion, cliquez sur " Modifier " et assurez-vous que, dans l' onglet " Sans fil ", la case " Se connecter automatiquement " n'est PAS cochée.

waltinator
la source
1
Bien que cela réduise l'interface, cela n'économisera pas autant d'énergie que la désactivation de la radio à l'aide rfkill.
gertvdijk