Gestionar el bluetooth desde la terminal en Linux

Personalizar

Aunque pueda parecer un tanto incongruente, me resulta mas intuitivo gestionar el bluetooth desde la terminal en Linux, que hacerlo desde el diálogo de configuración. Parece como que tengo mas control. Pero como todo, esto depende de gustos y de lo acostumbrado que estés al uso del terminal. Sin embargo, lo que está claro, es que si lo que quieres hacer es un script para gestionar el comportamiento del bluetooth, no tienes mas remedio que recurrir a los comandos que puedas ejecutar desde la terminal. Así, en este artículo, precisamente quiero revisar como gestionar el bluetooth desde la terminal en Linux.

Bluetooth desde la terminal de Linux

Gestionar el bluetooth desde la terminal en Linux

A que viene este interés

Es posible que te estés preguntando, a que viene este repentino interés de gestionar el bluetooth desde la terminal en Linux. La cuestión, es que desde que me he pasado a un gestor de ventanas tipo mosaico, un tiling window manager, me faltan algunas herramientas, y precisamente este es una de ellas, y lo puedes encontrar en el tutorial de Polybar.

Ya se, ya se lo que me vas a decir…, al final parece que esto no es tan productivo, pero, no todo lo contrario. O no. Todo depende de lo que te quieras complicar la vida, o mejor dicho el entorno de escritorio.

Ahora, si lo que quieres es hacer scripts en Bash, o en cualquier otro lenguaje, esta es una forma como no hay otra. Desde luego, te la tienes que ingeniar para tener todas las herramientas.

La herramienta

En el caso de gestionar el bluetooth desde la terminal en Linux, sin lugar a dudas, la herramienta que tienes que utilizar es bluetoothctl. Este comando es el que necesitas para buscar, emparejar y conectar dispositivos. Esta herramienta, al contrario que otras, es completamente agnóstica del entorno de escritorio que estés utilizando.

Para obtener mas información de esta herramienta tienes que ejecutar bluetoothctl help. Verás que te da una gran cantidad de comandos posibles. Indicarte además que bluetoothctl es una herramienta interactiva. Es decir, que al ejecutarla entrarás directamente dentro de una línea de comandos propia, desde donde puedes realizar las distintas operaciones.

Las operaciones básicas

Comentar todos los comandos que tiene disponible esta herramienta llevaría varios artículos, y realmente no es mi objetivo. El objetivo de este artículo es describir como puedes hacer las operaciones más básicas con esta herramienta.

Iniciar y detener el bluetooth

La primera de las operaciones que seguro vas a querer hacer es tener la posibilidad de iniciar y detener el bluetooth. Por supuesto para esto, el primer paso es que tengas habilitado el servicio de bluetooth. Para confirmar este punto, simplemente ejecuta este comando en un terminal,

systemctl status bluetooth.service

Este comando tiene que devolverte algo como lo que te muestro a continuación,

● bluetooth.service - Bluetooth service
     Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabl>
     Active: active (running) since Thu 2021-03-25 21:25:19 CET; 1 weeks 0 days ago
       Docs: man:bluetoothd(8)
   Main PID: 737 (bluetoothd)
     Status: "Running"
      Tasks: 1 (limit: 9369)
     Memory: 2.9M
     CGroup: /system.slice/bluetooth.service
             └─737 /usr/lib/bluetooth/bluetoothd

Una vez ya estás seguro de que el servicio de bluetooth está funcionando en tu equipo, deberías conocer el número de controladores de bluetooth que tienes en tu equipo, ya sea porque vienen instalados por defecto o por que los has añadido tu. Para esto, ejecuta la siguiente instrucción,

bluetoothctl list

Esto te debería devolver algo como,

Controller C4:8E:8F:F6:9C:F8 xps13 [default]

Si quieres saber algo de alguno de los controladores que tienes instalados, en el caso de que tengas mas de uno, tienes que utilizar el comando bluetoothctl show o en el caso de que tengas mas de uno seleccionar el identificado en cuestión, por ejemplo, en mi caso, sería,

bluetoothctl show C4:8E:8F:F6:9C:F8

Este comando te da información sobre este controlador, desde si está en funcionamiento, si se puede descubrir por parte de otros dispositivos, si está en modo de descubrimiento, para hacer lo propio con otros dispositivos o si está haciendo la operación de descubrimiento. Y por supuesto si es posible emparejarse con este controlador.

Para iniciar el bluetooth, tienes que utilizar el comando bluetoothctl power on y para detenerlo bluetoothctl power off.

Gestionar dispositivos

El siguiente paso, una vez controlado el iniciar y detener el bluetooth de tu máquina es el de poder buscar dispositivos, y por supuesto emparejar. Para esto, el primer paso, es indicar que se pueda descubrir y que se pueda emparejar. Si tienes varios controladores, selecciona el controlador que quieras utilizando bluetoothctl select <ctrl>, donde <ctrl> es el controlador que utilizarás. Y lo siguiente,

  • bluetoothcl pairable on
  • bluetoothcl discoverable on

Ahora ha llegado el momento de comenzar a buscar dispositivos. Para esto, ejecuta el comando,

bluetoothctl scan on

Este comando te tiene que devolver algo como,

Discovery started
[CHG] Controller C4:8E:8F:F6:9C:F8 Discovering: yes
[NEW] Device 14:91:38:6F:35:68 Echo Show 5-5MV

Cuando hayas encontrado el dispositivo que andas buscando ya puedes comenzar el proceso de emparejamiento utilizando el comando bluetoothctl pair <device-id>.

Recuerda cuando hayas terminado el proceso devolver al controlador a su estado oculto, para evitar tentaciones a los amigos de lo ajeno. Para esto,

bluetoothcl pairable off
bluetoothcl discoverable off
Conectando dispositivos

Por supuesto que el objetivo de todo esto es conectar dispositivos, si no, esto no tiene mucho sentido. Conectar dispositivos es tan sencillo como utilizar,

bluetoothctl connect <device>

Mientras que apara desconectar tienes que utilizar bluetoothctl disconnect <device>. Pero ¿como conectar todos los dispositivos que tienes emparejados? Aquí es donde puedes utilizar la magia de Bash, haciendo un simple script que te permita realizar esta operación,

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

De la misma forma, si lo que quieres hacer es desconectar todos los dispositivos, tienes que utilizar un script similar al anterior,

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

Por otro lado, si lo que quieres saber es cuales de los dispositivos que tienes emparejados se encuentran conectados tendrías que utilizar el comando bluetoothctl info <device-id>. Esto lo puedes convertir en un script, utilizando,

devices_paired=$(bluetoothctl paired-devices | grep Device)
echo "$devices_paired" | while read -r line; do
    ITEM=${line#* }
    ID=${ITEM%% *}
    NAME=${ITEM#* }
    bluetoothctl info $ID | grep "Connected: yes" > /dev/null
    rs=$?
    if [ $rs -eq 0 ]
    then
        echo $NAME
    fi
done

Conclusiones

Por supuesto que esta herramienta te permite hacer mucho mas de lo que te he mostrado en este artículo. Al fin y al cabo, esto no es mas que la punta del iceberg de las posibilidades que te ofrece la herramienta. Pero, aquí tienes las opciones más básicas que necesitarás hacer y un punto de entrada a esta herramienta.

Deja una respuesta

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