Respuestas:
Hay al menos dos trabajos de inicio que afectan el estado inalámbrico predeterminado:
/etc/init/rfkill-restore.conf
restaura el estado del bloque suave para todas las radios a lo que estaban en el último apagado, como se registró en /var/lib/rfkill/saved-state
./etc/init/network-manager.conf
inicia Network Manager, que a su vez restaura su idea del estado inalámbrico de /var/lib/NetworkManager/NetworkManager.state
.Si observa esas dos configuraciones de trabajo, encontrará que no tienen una relación temporal , lo que me parece un defecto de diseño. Supongo que esta condición de carrera rara vez es un problema porque /etc/init/rfkill-restore.conf
es mucho más simple y tiene menos condiciones de arranque.
Todas las soluciones para aplicar un valor predeterminado de desactivación inalámbrica que he visto tratar de usar /etc/rc.local
, incluida la solución "moderna" que idearon @Lekensteyn y @ rubo77. Desafortunadamente, esa solución no me funciona en ninguna de las dos computadoras portátiles que he probado. Esto no es particularmente sorprendente porque /etc/rc.local
también tiene ninguna relación temporal que puedo encontrar a cualquiera de /etc/init/rfkill-restore.conf
y /etc/init/network-manager.conf
. Tener un sueño prolongado /etc/rc.local
antes de emitir un rfkill block wifi
es una solución fea para este desorden de condición de carrera, pero funciona si el retraso es lo suficientemente largo.
Una mejor solución sería para nosotros imponer nuestros estados deseados en /var/lib/rfkill/saved-state
y /var/lib/NetworkManager/NetworkManager.state
antes de que esos dos trabajos de Upstart puedan ejecutarse. Podemos lograr esto creando nuestro propio trabajo Upstart. De hecho, necesitaremos dos archivos de configuración de trabajo para lograr el tiempo que necesitamos.
Nuestra primera configuración de trabajo realiza las modificaciones de archivo reales que necesitamos. Se ejecutará lo antes posible y solo se ejecutará una vez. Crea /etc/init/radio-silence.conf
con este contenido:
# 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
Como prefiero el silencio total de la radio cuando se inicia mi computadora portátil, bloqueo todas las radios, no solo las inalámbricas, pero puede modificar la primera sed
de las anteriores para limitar el impacto de este trabajo a los dispositivos inalámbricos que desee bloquear.
Nuestra segunda configuración de trabajo es responsable de garantizar que ninguno de los trabajos rfkill-restore
y network-manager
se inicien antes de que se radio-silence
hayan completado las modificaciones del archivo. Crea de la /etc/init/radio-silence-wait.conf
siguiente manera:
# 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
Con esta solución ya no veo problemas de condición de carrera, aunque no he abordado la carrera teórica entre rfkill-restore
y network-manager
.
Para obtener más detalles sobre cómo estos trabajos funcionan juntos para lograr nuestro objetivo temporal, consulte mi pregunta y respuesta, "¿Cómo creo un trabajo de Ejecución Inicial de ejecución única garantizado para completar antes de que comiencen otros dos trabajos?"
Solución "moderna" con Network Manager: simplemente desactive la opción Wireless Enabled en el applet Network Manager (KDE: Network Management). El comando nmcli nm wifi off
es equivalente. Continúe leyendo si habilita esporádicamente el Wi-Fi, pero le gustaría volverlo a deshabilitado al reiniciar.
El estado inalámbrico se recuerda en el archivo /var/lib/NetworkManager/NetworkManager.state
. Para deshabilitar Wi-Fi en el arranque, asegúrese de que la clave WirelessEnabled
permanezca en false
. Puede hacerlo editando el guión de inicio de Network Manager o utilizando el /etc/rc.local
truco a continuación. El comando que necesitas es:
sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi
Ponga esto antes exit 0
(como se describe a continuación). El rfkill block wifi
comando aún es necesario debido a una carrera con el inicio de Network Manager (NM). Una vez que NM ha comenzado, los cambios en el archivo de estado no tienen efecto.
(respuesta anterior que implica editar el archivo /etc/rc.local
con una explicación del rfkill
comando)
Un poco hacky, pero debería funcionar. Una tarjeta inalámbrica se puede desactivar con el rfkill
comando. Todos los dispositivos utilizados por rfkill se pueden mostrar usando rfkill list
. Salida de muestra:
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Hard blocked
depende de una configuración de hardware, por ejemplo, un interruptor inalámbrico en una computadora portátil. Soft blocked
puede ser controlado por el sistema operativo (Ubuntu).
¿Como funciona? No tiene una página de manual, la ejecución rfkill
proporciona un texto de ayuda en este caso:
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, ahora llegamos a algún lado. Debe ejecutar rfkill block wifi
como root para deshabilitar el dispositivo inalámbrico. (wlan es un alias de wifi, vea el código fuente de rfkill ).
Ahora, si desea deshabilitar las funciones inalámbricas en el momento de arranque, agregue el comando a /etc/rc.local ejecutándose sudo nano /etc/rc.local
. Use las teclas de flecha / página arriba / abajo para navegar a la línea anterior exit 0
y agregar rfkill block wifi
, de modo que el archivo termine así:
# By default, this script does nothing
rfkill block wifi
exit 0
Cuando termine, presione Ctrl+ X, luego presione Ypara guardarlo y presione Enterpara aceptar el nombre del archivo.
Si decide activar el dispositivo más adelante, ejecute: sudo rfkill unblock wifi
. No olvide eliminar la línea de /etc/rc.local si decide usar la tarjeta inalámbrica.
/etc/rc.local
ya que el script se ejecuta con permisos de root. Es muy poco probable que pueda deshabilitar wifi sin permisos de root. Si lo intento rfkill block wifi
o rfkill unblock wifi
me sale "No se puede abrir el dispositivo de control RFKILL: permiso denegado".
$ rfkill block wifi
hace que el applet NetworkManager muestre "Wireless está deshabilitado" y se $ iwconfig
muestre Tx-Power=off
. $ rfkill unblock wifi
deshace este efecto.
/etc/rc.local
. Use esto en su lugar:/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
archivo que persiste la configuración, WirelessEnabled=false
es uno de esos. Publicaré tu pregunta ..
La forma más fácil de deshabilitar su tarjeta inalámbrica es hacer clic derecho en el indicador NetworkManager (icono pequeño en la parte superior derecha del panel) y desmarcar el Enable Wireless
. Esto desactiva ( ifconfig wlan0 down
) la interfaz y ya no realiza el escaneo.
tlp
, lea la respuesta completa.Todas las respuestas a esta pregunta son bastante antiguas ahora y no funcionan en las nuevas versiones de Ubuntu que usan systemd. La respuesta de froage funcionó para mí el 14.04 pero no funciona el 16.04.
Systemd utiliza systemd-rfkill.service
para guardar el estado del interruptor rfkill durante el apagado y restaurarlo en cada arranque.
Debe pasar un parámetro de línea de comando del kernel para restaurar el estado del interruptor rfkill en cada arranque.
/etc/default/grub
con su editor de texto preferido.systemd.restore_state=1
como parámetro a GRUB_CMDLINE_LINUX
. Esa línea ahora debería leer GRUB_CMDLINE_LINUX="systemd.restore_state=1"
. También puedes agregarlo GRUB_CMDLINE_LINUX_DEFAULT
. Cualquiera de ellos funciona. Vea esta pregunta para más detalles.Esto asegurará que el estado de rfkill se restaure en cada arranque. Asegúrese de apagar bluetooth y wifi antes de reiniciar.
tlp
:tlp 0.8-1
están disponibles en repositorios 16.04. Después de actualizar a tlp 0.9-1
usar linrunner ppa, se resolvieron TODAS las cuestiones.Respuesta original:
tlp
enmascara / deshabilita systemd-rfkill.service
para "evitar conflictos y garantizar el funcionamiento correcto de las opciones de conmutación de dispositivos de radio de TLP" . ( Fuente-1 , Fuente-2 )
Esto significa que pasar el parámetro del kernel no funcionará para usted.
Aquí hay un pequeño fragmento (alrededor de la línea no. 195) del archivo de configuración predeterminado 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"
Como puede ver, la opción RESTORE_DEVICE_STATE_ON_STARTUP
está deshabilitada de forma predeterminada. Pero habilitar esa opción no ayuda.
Incluso después de habilitar la opción RESTORE_DEVICE_STATE_ON_STARTUP
, deshabilitar wifi y bluetooth (usando rfkill block all
) y seguir reiniciando, de alguna manera WiFi se habilita en cada segundo o tercer arranque. No hay garantía de que en el próximo arranque WiFi esté desactivado. Sorprendentemente se las
tlp
arregla para mantener bluetooth desactivado en cada arranque.
Lo mismo ocurre con la segunda opción en el fragmento DEVICES_TO_DISABLE_ON_STARTUP
, que también está deshabilitado de forma predeterminada. Habilitarlo tampoco funciona. Network Manger
muestra que WiFi está deshabilitado pero rfkill list
no muestra ningún bloqueo suave en WiFi.
Nota: he leído la línea
"Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!"
.Deshabilité
RESTORE_DEVICE_STATE_ON_STARTUP
antes de habilitarDEVICES_TO_DISABLE_ON_STARTUP
para evitar conflictos.
tlp-rdw
no funcionan como se esperaba.tlp
usuarios:tlp 0.9-1
usar linrunner ppa.Respuesta original
Habilitar DEVICES_TO_DISABLE_ON_STARTUP
y configurarlo para deshabilitar Bluetooth y WiFi puede funcionar para usted ( funcionó para esta persona )
Esta pregunta aquí en askubuntu. Es similar a una respuesta anterior a esta pregunta. Pero tenga en cuenta que no lo he probado yo mismo. Puede o no funcionar.
Otras fuentes: systemd-rfkill , tlp-configuration
GRUB_CMDLINE_LINUX
y GRUB_CMDLINE_LINUX_DEFAULT
más el sudo update-grub
comando (no mencionado) y no pude hacer que funcione en Pop_OS! 19.10 (que se basa en Ubuntu 19.10). Según systemctl status systemd-rfkill
, este servicio ya se está ejecutando en cada arranque y, dado que el valor predeterminado es 1
, no debería ser necesario este esfuerzo. Según la información en man systemd-rfkill
, recordar el estado de la radio "al inicio temprano" debería ser el comportamiento predeterminado, lo que me lleva a creer que este componente está roto de alguna manera.
Personalmente, uso el applet de administración de energía Jupiter para deshabilitar la conexión inalámbrica en mi computadora portátil, ya que está controlada por un botón especial. No creo que esté en el repositorio principal. Tuve que agregar un ppa de Andrew en Webupd8 para obtenerlo.
Espero que esto ayude.
Podrías agregar
ifconfig wlan0 down
a /etc/rc.local
, pero primero,
asegúrese de que, si está utilizando NetworkManager (tengo la versión 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), vaya al menú " Editar conexiones " -> pestaña " Inalámbrico ", haga clic en la conexión, haga clic en " Editar " y asegúrese de que, en la pestaña " Inalámbrico ", la casilla de verificación " Conectar automáticamente " NO esté marcada.
rfkill
.