La tarjeta inalámbrica PCI de mi computadora de escritorio siempre está buscando redes inalámbricas disponibles, pero rara vez la uso. ¿Puedo mantener la radio apagada hasta que la necesite?
fuente
La tarjeta inalámbrica PCI de mi computadora de escritorio siempre está buscando redes inalámbricas disponibles, pero rara vez la uso. ¿Puedo mantener la radio apagada hasta que la necesite?
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 intentorfkill block wifi
orfkill 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
muestreTx-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.fuente
Nota: Si usa
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 aGRUB_CMDLINE_LINUX
. Esa línea ahora debería leerGRUB_CMDLINE_LINUX="systemd.restore_state=1"
. También puedes agregarloGRUB_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.
Problemas con
tlp
:Actualización: estos problemas estaban presentes y
tlp 0.8-1
están disponibles en repositorios 16.04. Después de actualizar atlp 0.9-1
usar linrunner ppa, se resolvieron TODAS las cuestiones.Respuesta original:
tlp
enmascara / deshabilitasystemd-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
).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 (usandorfkill 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 lastlp
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 perorfkill list
no muestra ningún bloqueo suave en WiFi.tlp-rdw
no funcionan como se esperaba.Solución para
tlp
usuarios:Actualización: Actualización para
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
fuente
GRUB_CMDLINE_LINUX
yGRUB_CMDLINE_LINUX_DEFAULT
más elsudo update-grub
comando (no mencionado) y no pude hacer que funcione en Pop_OS! 19.10 (que se basa en Ubuntu 19.10). Segúnsystemctl status systemd-rfkill
, este servicio ya se está ejecutando en cada arranque y, dado que el valor predeterminado es1
, no debería ser necesario este esfuerzo. Según la información enman 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.
fuente
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.
fuente
rfkill
.