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.
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.
Muchas gracias por el artículo, el más completo y claro que he visto.
Muchas gracias.
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
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
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.
hciconfig -a # es otra opcion que puedes usar, me sirve en Raspberry y tambien en mi latop samsung algun viejita.
¡ 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.
Muchas gracias por el comentario.
Amí me dice que tengo el servisio de bluetooth inactivo (dead), ¿como lo activo?
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»
Hace todos los pasós y funcionan pero al momento de reiniciar para utilizar el Bluetooth tengo que hacer los mismo para poder usarlo
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.
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! 🙂
Buena información. Gracias
Muchísimas gracias, no sé por qué de manera gráfica me era imposible. Bendita terminal.
MOitas grazas polo seu artigo.