Réponses:
Il existe au moins deux tâches Upstart qui affectent l'état sans fil par défaut:
/etc/init/rfkill-restore.conf
restaure 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.conf
dé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.conf
est 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.conf
et /etc/init/network-manager.conf
. Jeter un sommeil prolongé /etc/rc.local
avant d'émettre un rfkill block wifi
est 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-state
et /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.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 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 sed
dans 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-restore
et network-manager
ne démarrera avant que radio-silence
les modifications de fichiers ne soient terminées. 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 course, même si je n'ai pas abordé la course théorique entre rfkill-restore
et 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?"
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 off
est é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é WirelessEnabled
reste sur false
. Vous pouvez le faire en modifiant le script d'initialisation de Network Manager ou en utilisant l' /etc/rc.local
astuce 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 wifi
commande 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.local
avec une explication de la rfkill
commande)
Un peu hacky, mais ça devrait marcher. Une carte sans fil peut être désactivée à l'aide de la rfkill
commande. 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 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, l'exécution 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 en rfkill block wifi
tant 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 0
et 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.
/etc/rc.local
car 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 wifi
ou rfkill unblock wifi
, j'obtiens "Impossible d'ouvrir le dispositif de contrôle RFKILL: autorisation refusée".
$ rfkill block wifi
fait que l'applet NetworkManager affiche «Le sans fil est désactivé» et $ iwconfig
s'affiche Tx-Power=off
. $ rfkill unblock wifi
annule cet effet.
/etc/rc.local
. Utilisez ceci à la place:/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
fichier qui conserve les paramètres, en WirelessEnabled=false
est un. Je
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.
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.service
pour 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.
/etc/default/grub
avec votre éditeur de texte préféré.systemd.restore_state=1
comme 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.
tlp
:tlp 0.8-1
et sont disponibles dans les référentiels 16.04. Après la mise à jour de l' tlp 0.9-1
utilisation 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 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_STARTUP
est 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
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ée par défaut. L'activer ne fonctionne pas non plus. Network Manger
montre que le WiFi est désactivé mais rfkill list
n'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_STARTUP
avant d'activerDEVICES_TO_DISABLE_ON_STARTUP
pour éviter les conflits.
tlp-rdw
ne fonctionnent pas comme prévu.tlp
utilisateurs:tlp 0.9-1
utilisation de linrunner ppa.Réponse originale:
L' DEVICES_TO_DISABLE_ON_STARTUP
activer et le configurer pour désactiver Bluetooth et WiFi peut fonctionner pour vous ( cela a fonctionné pour cette personne ).
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
GRUB_CMDLINE_LINUX
et GRUB_CMDLINE_LINUX_DEFAULT
la sudo update-grub
commande (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é.
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.
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.
rfkill
.