Gestionar el bluetooth desde la terminal en Linux

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.

16 comentarios en “Gestionar el bluetooth desde la terminal en Linux

  1. RI
    Ricardo hace 3 años

    Muchas gracias por el artículo, el más completo y claro que he visto.

    1. NE
      Nestor hace 2 años

      Estimado, observo que mi notebook no tiene controlador bluetooth, ¿ como y dónde puedo conseguirlo o adquirirlo ? Seguí todos sus pasos y me salió ésta información, por lo que deduzco que no tengo bluetooth en mi equipo antiguo Toshiba NB505
      :~$ bluetoothctl list
      :~$ bluetoothctl show
      No default controller available
      :~$ bluetoothctl power on
      No default controller available

      1. JH
        jhon hace 2 años

        no tienes bluetooth o linux no tiene controlador para el bluetooth que tienes. yo tuve ese problema y me toco comprar un bluetooth dongle de tplink y funciono rapidamente sin problemas

      2. AR
        aristobulo pinzón hace 1 año

        Y yo estoy en las mismas.
        Parece que tendré que comprar uno para un HP …
        systemctl status bluetooth.service
        ● bluetooth.service – Bluetooth service
        Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset
        Active: active (running) since Tue 2023-05-23 18:33:28 -05; 56min ago
        Docs: man:bluetoothd(8)
        Main PID: 1086 (bluetoothd)
        Status: «Running»
        Tasks: 1 (limit: 4915)
        Memory: 2.5M
        CGroup: /system.slice/bluetooth.service
        └─1086 /usr/lib/bluetooth/bluetoothd
        todos@jsg:~$ bluetoothctl list
        todos@jsg:~$ bluetoothctl show
        No default controller available
        Saludos.

      3. RA
        rafael osorio hace 10 meses

        hciconfig -a # es otra opcion que puedes usar, me sirve en Raspberry y tambien en mi latop samsung algun viejita.

  2. A.
    A.E. hace 3 años

    ¡ Muchas Gracias ! Su artículo me ha sido de gran ayuda, he percibido que conectando mis dispositivos con mi pc a través de bluetooth desde la terminal, se vincula más rápido. Por alguna razón antes batallaba un poco en conectar.

  3. DI
    Diego Pelegrin hace 2 años

    Amí me dice que tengo el servisio de bluetooth inactivo (dead), ¿como lo activo?

    1. BL
      BlueBeast hace 2 años

      Hola , utiliza «sudo systemctl start bluetooth.service» para activar el servicio y «sudo systemctl stop bluetooth.service» para detenerlo, si quieres ver el estado del servicio utiliza «sudo systemctl status bluetooth.service»

  4. BR
    Bryan Tacuri hace 2 años

    Hace todos los pasós y funcionan pero al momento de reiniciar para utilizar el Bluetooth tengo que hacer los mismo para poder usarlo

  5. CA
    Carlos hace 2 años

    Estimado, observo que mi notebook no tiene controlador bluetooth, ¿ como y dónde puedo conseguirlo o adquirirlo ? Seguí todos sus pasos y me salió ésta información, por lo que deduzco que no tengo bluetooth en mi equipo, antiguo marca HP 14
    :~$ bluetoothctl list
    :~$ bluetoothctl show
    No default controller available
    :~$ bluetoothctl power on
    No default controller available
    MI equipo: 4 GB Ram, version 2004, procesador intel (R) celeron (R) CPU N2830 @ 2.16GHz, Tarjeta video intel (R) HD Graphics.

  6. AL
    Albert hace 2 años

    Buenas! Muchas gracias por el artículo!
    Si me lo permites, me gustaría hacerte notar que tienes una pequeña typo en:
    bluetoothcl pairable on
    bluetoothcl discoverable on
    Falta una t en «bluetoothcl»
    Saludos! 🙂

  7. JO
    Jose hace 1 año

    Buena información. Gracias

  8. EM
    Emiya Shirou hace 11 meses

    Muchísimas gracias, no sé por qué de manera gráfica me era imposible. Bendita terminal.

  9. RA
    Ramón hace 6 meses

    MOitas grazas polo seu artigo.

Deja una respuesta

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