297 - Dos scripts para gestionar WiFi y Bluetooth desde la terminal

PodcastPodcast

297 - Dos scripts para gestionar WiFi y Bluetooth desde la terminal

En este podcast te cuento sobre dos scripts para gestionar WiFi y Bluetooth desde la terminal, aunque lo puedes utilizar desde donde quieras

1:25
-3:15

En el último congreso de esLibre, di una charla sobre los entornos de escritorio altamente productivos. En esta charla, comentaba las grandes ventajas que ofrecen este tipo de entornos, sobre todo en lo referente a la productividad. Sin embargo, no todo son ventajas. También presentan inconvenientes, entre los que se encuentran, por un lado la curva de aprendizaje y por otro lado que tu te lo tienes que hacer todo. Así, por ejemplo, no tienes como gestionar el WiFi y Bluetooth desde la terminal. Y como te cuento en este podcast puedes implementar un par de scripts para gestionar WiFi y Bluetooth desde la termianl o desde donde quieras.

Por supuesto que esto no es necesario, seguro que puedes encontrar decenas de scripts a lo largo y ancho de internet para resolver esta situación… pero, ¿y lo que nos gusta hacerlo a nosotros?

Esto que inicialmente es un inconveniente, es precisamente una de sus ventajas, porque tu vas a ir construyendo ese entorno de escritorio altamente productivo, adaptado a tus necesidades. Por supuesto, que para alguien el bluetooth, es algo realmente imprescindible, y para ti, no te aporta absolutamente nada. Tenerlo es un estorbo, mas que una comodidad.

Así, en este episodio del podcast, te muestro como puedes implementar esos scripts para gestionar WiFi y Bluetooth, y por supuesto como puedes adaptarlo a a tus necesidades.

Dos scripts para gestionar WiFi y Bluetooth desde la terminal

Dos scripts para gestionar WiFi y Bluetooth desde la terminal

Sobre los entornos de escritorio altamente productivos

Una cuestión que no se si mencioné en la charla de esLibre 2021, es referente a Bash, o a la shell que estés utilizando. Si todavía no conoces Bash u otro. Si quieres aprender a hacer scripts en Bash. Además del tutorial que tienes disponible titulado scripts en Bash, donde también encontrarás los correspondientes vídeos, la mejor forma de aprender Bash es utilizando un Tiling Window Manager. De esta forma te enfrentarás a situaciones como la que te cuento en este episodio del podcast sobre dos scripts para gestionar WiFi y Bluetooth desde la terminal.

Y mas que utilizando un Tiling Window Manager, yo te diría que, personalizando, configurando y adaptando, un Tiling Window Manager. En este caso, en el caso de Bash, lo suyo es que optaras por i3, sway o bspwm, como gestor de ventanas, y esto por citarte algunos.

Pero lo mismo que te digo para Bash, también te podría decir para otros lenguajes de programación. Por ejemplo, si quieres aprender Python, optaría por QTile. Y mas.

Y ¿porque te digo esto? Tarde o temprano vas a querer, adaptar, modificar o ajustar algunos detalles de tu gestor de ventanas. Tarde o temprano querrás tener WiFi o Bluetooth o cualquier otra pieza. Y si bien, existen cientos de scripts, a lo largo y ancho de Internet, seguro que le querrás dar tu toque personal, que tenga tu magia, que se adapte exactamente a tus necesidades.

Aquí es donde te vas a preocupar de aprender, de saber como se hace. Y no solo aprenderás sobre Bash, sino que también vas a aprender sobre tu sistema operativo favorito. Es decir, necesitarás conocer el funcionamiento del mismo, necesitarás saber sobre sus entrañas, para poder hacer esas operaciones.

Rofi

En particular para ambos scripts utilizaré Rofi, para que te muestre las distintas opciones para conectarte. Sin embargo, puedes elegir cualquier otro, o incluso hacerlo a medida utilizando para ello cualquier herramienta de cuadros de diálogo, tal y como te comento en el tutorial de diálogos para scripts.

¿Y porque Rofi? En mi caso, utilizo Rofi para mostrarte las opciones de WiFi y Bluetooth, por el simple hecho de que es el lanzador de aplicaciones que estoy utilizando. Pero por supuesto, tu puedes utilizar el que consideres.

Tal y como lo describen los propios desarrolladores de esta herramienta, Rofi, comenzó como un clone de simpleswitcher, un cambiador, un switcher.

Sin embargo, Rofi ha crecido respecto a sus orígenes, incorporando características extras, como lanzador de aplicaciones y lanzador de ssh. Y además lo puedes utilizar como reemplazo de dmenu, lo que lo convierte en una herramienta increíblemente versatil. Y es precisamente esta característica la que quiero utilizar en estos dos scripts.

Sobre el WiFi

El primero de los scripts sobre el que te quiero hablar, es el que te permitirá gestionar el WiFi. Para esto me basaré en un artículo que publiqué aquí mismo, titulado Gestionar el WiFi desde la terminal.

En este artículo, hago referencia a nmcli. Esta es una herramienta para la línea de comando que te permite gestionar NetworkManager, y lo que no es menos importante, conecer el estado de la configuración de red. De hecho, lo puedes utilizar perfectamente como reemplazo de cualquier interfaz gráfico. Y sobre todo para realizar tus scripts.

De esta manera puedes utilizar las posibilidades que te ofrece NetworkManager en lo que a responder a ciertos eventos se refiere. Es decir, podrías hacer que en función de la conexión Wifi que tengas, habilitar o no WireGuard.

Pero en el caso que ocupa, tan solo lo quieres para dos cosas,

  • Mostrar la conexión que tienes
  • Poder conectarte a la red que necesites.

La gestión de las conexiones WiFi es tan sencilla como utilizar el siguiente script,

declare -A wifis
nmcli c | grep -v NAME | grep wifi | {
    while read -r line
    do
        variable=($line)
        wifis[${variable[0]}]=${variable[1]}
    done
    ans=$(echo ${!wifis[@]} | tr ' ' '\n' | rofi -dmenu)
    rs=$?
    if [ $rs -eq 0 ]
    then
        nmcli c up ${wifis[$ans]}
    fi
}

Sobre el bluetooth

El caso del bluetooth es similar. En este caso, hago referencia a un artículo, que también publiqué hace relativamente poco tiempo titulado gestionar el bluetooth desde la terminal en Linux.

En este caso lo integro con Polybar, por un lado, para mostrar el estado del bluetooth directamente en la barra de estado. Y por otro lado, también lo utilizo para conectar con los distintos dispositivos bluetooth que se encuentran en las proximidades de mi equipo.

Así para conectar todos los dispositivos emparejados cuando habilito el bluetooth tieens que utilizar la siguiente función,

bluetooth_toggle() {
    if bluetoothctl show | grep -q "Powered: no"; then
        bluetoothctl power on >> /dev/null
        sleep 1

        devices_paired=$(bluetoothctl paired-devices | grep Device | cut -d ' ' -f 2)
        echo "$devices_paired" | while read -r line; do
            bluetoothctl connect "$line" >> /dev/null
        done
    else
        devices_paired=$(bluetoothctl paired-devices | grep Device | cut -d ' ' -f 2)
        echo "$devices_paired" | while read -r line; do
            bluetoothctl disconnect "$line" >> /dev/null
        done

        bluetoothctl power off >> /dev/null
    fi
}

Imaginación al poder

Esto solo es la punta del icebert de las posibilidades que te ofrecen tanto nmcli como bluetooth a la hora de automatizar cualquier proceso. No solo se trata simplemente de conectar o desconectar un dispositivo bluetooth, o conectarse a una determinada red WiFi. Se trata de ir un paso mas allá, y dependiendo de donde te encuentres hacer o tomar diferentes decisiones.

Una de estas decisiones, tal y como te adelanté anteriormente, podría ser, por ejemplo, la de habilitar la VPN WireGuard, pero igual que te digo esto, puede ser cualquier cosa. Como por ejemplo, que en función de la conexión WiFi que tengas que habilite el bluetooth o no lo habilite. Y cualquier cosa que puedas imaginar.

Al final, aquí depende un poco de tus conocimientos en scripting, en el caso de que utilices Bash, o de cualquier otro lenguaje de programación, como puede ser Python, o el que consideres.

Entrada y salida de audio

Además de lo que te he comentado en referencia a WiFi o a bluetooth, también podría haberte mostrado la posibilidad de seleccionar tanto la entrada como la salida de audio, utilizando, en este caso, pulseaudio. Pero esto lo dejaremos para un futuro episodio del podcast, en el que tratar audio y vídeo, por ejemplo.


Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Imagen de portada Denny Müller

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *