¿Cómo puedo mantener la radio de una tarjeta inalámbrica apagada por defecto?

11

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?

ændrük
fuente

Respuestas:

4

Hay al menos dos trabajos de inicio que afectan el estado inalámbrico predeterminado:

  • /etc/init/rfkill-restore.confrestaura 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.confinicia 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.confes 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.confy /etc/init/network-manager.conf. Tener un sueño prolongado /etc/rc.localantes de emitir un rfkill block wifies 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-statey /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.confcon 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 sedde 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-restorey network-managerse inicien antes de que se radio-silencehayan completado las modificaciones del archivo. Crea de la /etc/init/radio-silence-wait.confsiguiente 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-restorey 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?"

froage
fuente
7

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 offes 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 WirelessEnabledpermanezca en false. Puede hacerlo editando el guión de inicio de Network Manager o utilizando el /etc/rc.localtruco 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 wificomando 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.localcon una explicación del rfkillcomando)

Un poco hacky, pero debería funcionar. Una tarjeta inalámbrica se puede desactivar con el rfkillcomando. 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 blockeddepende de una configuración de hardware, por ejemplo, un interruptor inalámbrico en una computadora portátil. Soft blockedpuede ser controlado por el sistema operativo (Ubuntu).

¿Como funciona? No tiene una página de manual, la ejecución rfkillproporciona 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 wificomo 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 0y 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.

Lekensteyn
fuente
Gracias. No entiendo por qué, pero parece que no necesito usar sudo para que rfkill funcione.
ændrük
1
No necesita sudo /etc/rc.localya 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 wifio rfkill unblock wifime sale "No se puede abrir el dispositivo de control RFKILL: permiso denegado".
Lekensteyn
Tanto en mi ThinkPad X60 como en mi escritorio con una tarjeta inalámbrica PCI, la ejecución $ rfkill block wifihace que el applet NetworkManager muestre "Wireless está deshabilitado" y se $ iwconfigmuestre Tx-Power=off. $ rfkill unblock wifideshace este efecto.
ændrük
1
Lo resolví con un retraso: parece que en Ubuntu 14.04 necesita esperar unos segundos antes de deshabilitar wifi /etc/rc.local. Use esto en su lugar:/bin/sleep 10 && rfkill block wifi
rubo77
1
@ rubo77 Aquí (Arch Linux, Network Manager 0.9.8.10-3), existe un /var/lib/NetworkManager/NetworkManager.statearchivo que persiste la configuración, WirelessEnabled=falsees uno de esos. Publicaré tu pregunta ..
Lekensteyn 01 de
1

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.

usuario4124
fuente
2
La comprobación de este elemento del menú no afecta el comportamiento predeterminado. La próxima vez que enciendo la computadora, la radio inalámbrica vuelve a estar activa.
ændrük
1
En mi Ubuntu 14.04, permanece apagado según lo deseado después de un reinicio si lo
apago
1

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

  1. abra /etc/default/grubcon su editor de texto preferido.
  2. agregar systemd.restore_state=1como 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.


Problemas con tlp:

Actualización: estos problemas estaban presentes y tlp 0.8-1están disponibles en repositorios 16.04. Después de actualizar a tlp 0.9-1usar linrunner ppa, se resolvieron TODAS las cuestiones.

Respuesta original:

tlpenmascara / deshabilita systemd-rfkill.servicepara "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_STARTUPestá 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 tlparregla 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 Mangermuestra que WiFi está deshabilitado pero rfkill listno 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_STARTUPantes de habilitar DEVICES_TO_DISABLE_ON_STARTUPpara evitar conflictos.

  • Del mismo modo, las otras opciones proporcionadas tlp-rdwno funcionan como se esperaba.


Solución para tlpusuarios:

Actualización: Actualización para tlp 0.9-1usar linrunner ppa.

Respuesta original

  1. Habilitar DEVICES_TO_DISABLE_ON_STARTUPy configurarlo para deshabilitar Bluetooth y WiFi puede funcionar para usted ( funcionó para esta persona )

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


Manoj
fuente
¡Intenté su respuesta que involucra las modificaciones de ambos GRUB_CMDLINE_LINUXy GRUB_CMDLINE_LINUX_DEFAULTmás el sudo update-grubcomando (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.
Patrick Dark
0

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.

Alano
fuente
0

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.

Waltinator
fuente
1
Si bien esto reducirá la interfaz, no ahorrará tanta energía como deshabilitar el uso de la radio rfkill.
gertvdijk