Gestionar el WiFi desde la terminal

Desde que utilizo un gestor de ventanas tipo mosaico he experimentado un incremento sustancial en mi productividad. Escribir un artículo o un capítulo del tutorial, lo hago en mucho menos tiempo, y con mas calidad. Sin embargo, en ocasiones me encuentro perdido, en el sentido de que no se exactamente como gestionar diferentes configuraciones del escritorio. Por ejemplo, uno de los problemas con los que me encontraba era bluetooth. Esto me dio pie a investigar como hacerlo directamente desde la terminal, lo que llevó al artículo sobre gestionar el bluetooth desde la terminal en Linux. Pero, este no es el único problema con el que me enfrento. El siguiente, y es el que precisamente me ha traído aquí es el de gestionar el WiFi desde la terminal.

Gestionar conexiones de red desde la terminal

Gestionar el WiFi desde la terminal

Como te decía en la introducción, esto de controlar la configuración de tu equipo de escritorio desde la terminal, podría parecerte algo complejo. Sin embargo, nada mas lejos de la realidad. Es relativamente sencillo. Y digo que es sencillo, porque las herramientas que tienes a tu alcance para hacerlo te lo ponen bastante fácil. Así, en el caso del bluetooth, y como te comenté en el artículo que te he mencionado anteriormente, esta herramienta es bluettothctl. Mientras, que en el caso de gestionar el WiFi desde la terminal es nmcli.

nmcli

nmcli es una herramienta para la línea de comandos que te permite gestionar NetworkManager y conocer el estado de tu configuración de red. Lo puedes utilizar como un reemplazo para cualquier interfaz gráfico, y de hecho, ese es precisamente su objetivo, sustituir a la aplicación gráfica que utilices para gestionar el WiFi desde la terminal, al igual que el resto de conexiones de red.

Esta herramienta, nmcli, la puedes utilizar para crear, editar, borrar, activar, desactivar, mostrar, y en general gestionar conexiones de red, así, como para conocer el estado de esas conexiones de red.

Básicamente, el uso de principal de nmcli, es por un lado para implementar scripts, para el que puedes aprovechar el tutorial de scripts en Bash. Con estos scripts puedes gestionar las conexiones de red o incluso realizar diferentes automatismos y automatizaciones. De hecho, NetworkManager es capaz de ejecutar scripts en base a determinados eventos. Por ejemplo, si sales fuera de tu WiFi habitual, que directamente se conecte a tu VPN con WireGuard.

Otro de los evidentes usos, es para trabajor con conexiones de red en servidores, y otras máquinas que no tienen interfaz gráfico.

Algunos usos de nmcli

Por supuesto, lo mejor es conocer la potencia de una herramienta como nmcli, viéndola en acción. Por ejemplo, si quieres ver las redes WiFi a las que te puedes conectar, simplemente ejecuta nmcli device wifi list,

BSSID              SSID               MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
c0:df:83:3b:e0:fa  SUWIFI_2G_sVtP     Infra  1     130 Mbit/s  57      ▂▄▆_  WPA1 WPA2
e1:18:8a:05:20:92  WiFiSinPretensio   Infra  11    130 Mbit/s  45      ▂▄__  WPA2
ef:67:5c:9c:c4:7e  LaFibra-ABCD       Infra  1     130 Mbit/s  29      ▂___  WPA2

También puedes conocer la información de cualquier interfaz de red, por ejemplo, con nmcli device show wlp2s0, me muestra lo siguiente,

GENERAL.DEVICE:                         wlp2s0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         C4:8E:8F:F6:9C:F7
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (conectado)
GENERAL.CONNECTION:                     TP-Link_958E_5G
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         192.168.1.139/24
IP4.GATEWAY:                            192.168.1.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 600
IP4.ROUTE[2]:                           dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 600
IP4.ROUTE[3]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP4.DNS[3]:                             127.0.0.1
IP4.DOMAIN[1]:                          belcar.es
IP6.ADDRESS[1]:                         fe80::aba1:2cc9:c2c5:b075/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 600

Uso y funcionamiento de nmcli

Lo básico es ejecutar nmcli, para gestionar el WiFi desde el terminal, sin utilizar ninguna opción adicional, ni objetos, ni comandos. Por supuesto, que no solo te permite gestionar el WiFi, sino que también te permite gestionar el resto de conexiones de red. Esto te dará un resultado sencillo como el que puedes ver a continuación,

wlp2s0: conectado to TP-Link_958E_5G
        "Broadcom and subsidiaries BCM4352"
        wifi (wl), A5:2F:3E:D1:8B:E7, hw, mtu 1500
        ip4 predeterminado
        inet4 192.168.1.139/24
        route4 0.0.0.0/0
        route4 192.168.1.0/24
        route4 169.254.0.0/16
        inet6 fe80::aba1:2cc9:c2c5:b075/64
        route6 fe80::/64

docker0: conectado to docker0
        "docker0"
        bridge, 02:42:61:44:97:F9, sw, mtu 1500
        inet4 172.17.0.1/16
        route4 172.17.0.0/16

lo: sin gestión
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

DNS configuration:
        servers: 8.8.8.8 8.8.4.4 127.0.0.1
        domains: undominio.es
        interface: wlp2s0

Si te fijas en la configuración que aparece mas arriba, indica que está conectado a dos interfaces. El primero es el interfaz wifi, y el segundo está conectado a Docker. Si quisieras conocer más información al respecto de cualquiera de estas dos interfaces, simplemente tienes que ejecutar wpcli device show <interfaz>. Por ejemplo, en el caso de la interfaz wifi, sería nmcli device show wlp2s0, lo que te daría un resultado similar al que te muestro a continuación,

GENERAL.DEVICE:                         wlp2s0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         A5:2F:3E:D1:8B:E7
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (conectado)
GENERAL.CONNECTION:                     TP-Link_123A_5G
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         192.168.1.139/24
IP4.GATEWAY:                            192.168.1.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 600
IP4.ROUTE[2]:                           dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 600
IP4.ROUTE[3]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP4.DNS[3]:                             127.0.0.1
IP4.DOMAIN[1]:                          belcar.es
IP6.ADDRESS[1]:                         fe80::aba1:2cc9:c2c5:b075/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 600

Mientras que para conocer información sobre las conexiones, tendrás que utilizar nmcli connection show. Esto te da un resultado similar al que ves a continuación,

NAME                 UUID                                  TYPE      DEVICE  
TP-Link_123A_5G      afef5019-8f21-40b7-b8ef-213df99277ae  wifi      wlp2s0  
docker0              5e4efc28-6f23-4331-b8cb-11ca0d3c93cd  bridge    docker0 
Conexión cableada 1  f5d8b106-a66f-3cce-874d-d584d208c24f  ethernet  --      
TP-Link_123A         eb087a17-5833-467a-bccb-9a7a0fa118e5  wifi      --      

En la información anterior, no se aprecia, pero utiliza diferentes colores para mostrar que conexiones se están utilizando, que como has deducido de la información anterior, son las dos primeras.

De nuevo, si quisieras obtener mas información de estas conexiones lo puedes hacer añadiendo el nombre de la conexión, como por ejemplo te muestro a continuación,

nmcli connection show TP-Link_123A_5G

Cuyo resultado parcialmente puedes ver a continuación,

connection.id:                          TP-Link_123A_5G
connection.uuid:                        afef5019-8f21-40b7-b8ef-213df99277ae
connection.stable-id:                   --
connection.type:                        802-11-wireless
connection.interface-name:              wlp2s0
connection.autoconnect:                 sí
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)

Objetos

Como has podido ver, el funcionamiento de esta herramienta es realmente sencilla. Al final, se trata de ejecutar comandos sobre determinados objetos, como has visto en los ejemplos anteriores. Por un lado, has ejecutado comandos sobre la interfaz device y posteriormente sobre la conexión connection.

Hay mas objetos con los que actuar y comandos para trabajar con estos objetos. De esta manera, simplemente tienes que conocer cuales son los objetos, y tener en cuenta, que en función del objeto, los comandos que puedes emplear son diferentes.

  • g[eneral] estado general y operaciones de NetworkManager
  • n[etworking] control de red general
  • r[adio] interruptores de radio de NetworkManager
  • c[onnection] conexiones de NetworkManager
  • d[evice] dispositivos administrados por NetworkManager
  • a[gent] agente secreto o agente polkit de NetworkManager
  • m[onitor] monitor de cambios de NetworkManager

Esto de poner entre corchetes es porque puedes utilizar tanto general como g cuando trabajes con nmcli. Aquí te tengo que confesar que yo soy mas de utilizar la palabra completa, por aquello de que luego los scripts son mucho mas legibles, pero esto es algo que va a gustos, y ya sabes que para gustos los colores.

Comandos

Sobre cada uno de estos objetos puedes realizar una serie de acciones o comandos. Para conocer que comandos puedes aplicar sobre cada uno de los objetos, lo puede hacer con nmcli <objeto> help. Así, las acciones serían las siguientes,

objetocomandos
generalstatus, hostname, permissions, logging
networkingon, off, connectivity
radioall, wifi, wwan
connectionshow, up, down, add, modify, clone, edit
delete, monitor, reload, load, import, export
devicestatus, show, set, connect, reapply, modify
disconnect, delete, monitor, wifi, lldp
agentsecret, polkit, all
monitor

Este último objeto, no tiene comandos. Su uso es para monitorizar los cambios que se produce en NetworkManager, de forma, que cuando se produce cualquier cambio, este se imprime por pantalla.

Utilidades prácticas

Ahora que ya tienes una visión general sobre el uso de esta herramienta, hay que ver como sacarle punta para aprovecharla al máximo. Por supuesto, que esta herramienta es carne de cañón para utilizarla en tus scripts y automatizar determinadas tareas.

Por ejemplo, ¿como obtener el estado de la conexión para utilizarlo en un script? Has visto que esto se puede hacer con,

nmcli general status

Esto te devuelve,

STATE      CONNECTIVITY  WIFI-HW   WIFI      WWAN-HW   WWAN     
conectado  total         activado  activado  activado  activado

Si solo quieres el estado, tendrás que utilizar tail y cut, por ejemplo,

$ nmcli general status | tail -n 1 | cut -d' ' -f1

También tienes que tener en cuenta que en función de la información que quieras obtener, es posible que nmcli te la ofrezca ya preparada para ello. Al final, se trata de una herramienta que está preparada para gestionar el wifi desde la terminal. Por ejemplo, para conocer la ip de mi conexión, lo puedo hacer con,

nmcli -g ip4.address connecion show TP-Link_123A_5G

Si quisieras cerrar alguna de las conexiones que tienes abiertas, puedes hacerlo fácilmente con,

nmcli connection down TP-Link_123A_5G

O si quieres conectarte a ese red u otra, de la misma manera que en el ejemplo anterior lo podrías hacer con up

nmcli connection up TP-Link_123A_5G

Si no tuvieras almacenadas la contraseña de la conexión WiFi, en este caso, tendrás que utilizar la opción --ask, para que te pregunte por ella.

Conclusión

Esto que te acabo de mostrar solo es la punta del iceberg de las posibilidades que te ofrece nmcli y de todo lo que puedes hacer con esta herramienta.

Desde luego, que la información que ofrece es realmente abrumadora, porque como has visto, no solo tienes algo mas de media docena de objetos sobre los que trabajar, sino que cada uno de ellos tiene distintos comandos. Pero, nmcli, te permite el autocompletado. Es decir, que pulsando la tecla tabulador, nmcli te puede ayudar a completar la información que necesitas para extraer los datos o para realizar una conexión o para lo que necesites.

Se trata de una potente herramienta que no solo te permitirá gestionar el wifi desde la terminal, sino también el resto de conexiones de red. Y no solo está pensada para que la utilices tu, sino también desde el punto de vista del scripting.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.