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.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?"
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.
/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 intentorfkill block wifiorfkill unblock wifime sale "No se puede abrir el dispositivo de control RFKILL: permiso denegado".$ rfkill block wifihace que el applet NetworkManager muestre "Wireless está deshabilitado" y se$ iwconfigmuestreTx-Power=off.$ rfkill unblock wifideshace este efecto./etc/rc.local. Use esto en su lugar:/bin/sleep 10 && rfkill block wifi/var/lib/NetworkManager/NetworkManager.statearchivo que persiste la configuración,WirelessEnabled=falsees 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.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.
/etc/default/grubcon su editor de texto preferido.systemd.restore_state=1como 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-1están disponibles en repositorios 16.04. Después de actualizar atlp 0.9-1usar linrunner ppa, se resolvieron TODAS las cuestiones.Respuesta original:
tlpenmascara / deshabilitasystemd-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).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 (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 lastlparregla 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 perorfkill listno muestra ningún bloqueo suave en WiFi.tlp-rdwno funcionan como se esperaba.Solución para
tlpusuarios:Actualización: Actualización para
tlp 0.9-1usar linrunner ppa.Respuesta original
Habilitar
DEVICES_TO_DISABLE_ON_STARTUPy 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_LINUXyGRUB_CMDLINE_LINUX_DEFAULTmás elsudo update-grubcomando (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 downa
/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.