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.
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.
La entrada Gestionar el bluetooth desde la terminal en Linux aparece primero en Atareao.