web-dev-qa-db-fra.com

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

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?

11
ændrük

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?"

3
froage

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.

7
Lekensteyn

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.

1
user4124

Remarque: Si vous utilisez 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.

  1. ouvrez /etc/default/grub avec votre éditeur de texte préféré.
  2. ajoutez 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.


Problèmes avec tlp:

Mise à jour: Ces problèmes étaient présents dans 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'activer DEVICES_TO_DISABLE_ON_STARTUP pour éviter les conflits.

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

Solution pour les utilisateurs tlp:

Mise à jour: Mettez à jour à tlp 0.9-1 à l'aide de linrunner ppa.

Réponse originale:

  1. 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 )

  2. 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


1
Manoj Sawai

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.

0
waltinator

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.

0
Allan