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 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 NetworkManagern[etworking]
control de red generalr[adio]
interruptores de radio de NetworkManagerc[onnection]
conexiones de NetworkManagerd[evice]
dispositivos administrados por NetworkManagera[gent]
agente secreto o agente polkit de NetworkManagerm[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,
objeto | comandos |
---|---|
general | status , hostname , permissions , logging |
networking | on , off , connectivity |
radio | all , wifi , wwan |
connection | show , up , down , add , modify , clone , edit |
delete , monitor , reload , load , import , export | |
device | status , show , set , connect , reapply , modify |
disconnect , delete , monitor , wifi , lldp | |
agent | secret , 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.