是否可以在 bluetoothctl 中通过设备的别名来引用设备

是否可以在 bluetoothctl 中通过设备的别名来引用设备

我有一个与我的 raspberry pi 配对的设备,并将别名配置为“cardreader”。这会改变我在扫描中看到它的方式,因此我看到的是“cardreader”而不是其型号。到目前为止一切顺利。但现在我想使用它的别名而不是 macid/蓝牙卡 id 来配对/信任/连接到该设备。类似于pair cardreader而不是pair 43:22:15:15:...。这样做的实际结果是出现未找到设备的错误。我在网上找到的关于 bluez 的文档很少,几乎没有关于设置别名的讨论。如果我不能这样做,我会求助于编写一些命令来执行此操作,但这将是一种遗憾,因为它似乎是一个如此明显的功能。

答案1

不幸的是,命令似乎bluetoothctl无法对别名进行操作。更糟糕的是,bluetoothctl没有提供特定命令来根据设备的别名获取其 MAC 地址。

我能做的最好的事情如下:

ALIAS=<your-device-alias>
bluetoothctl connect `bluetoothctl devices | grep $ALIAS | cut -d ' ' -f 2`

那个部分:

bluetoothctl devices | grep $ALIAS | cut -d ' ' -f 2

根据设备的别名查找其 MAC 地址。然后将结果用作 的参数bluetoothctl connect

答案2

我制作了一个简单的脚本,让你可以使用别名连接到配对的设备。遗憾的是它不能处理配对本身——主要是因为我不经常这样做,所以我觉得没有必要去实现它,请随意添加。

bt device1 device2 device3您可以使用等连接到任意数量的已知设备。

bt

#!/bin/bash
# vi: ft=bash

mapfile deviceList < <(bluetoothctl -- devices)
length=$(echo -n "${deviceList[@]}" | wc -l)

declare -A devices
for (( i=0; i < $length; i++ )); do
    addr=$( echo ${deviceList[$i]} | cut -d " " -f 2 )
    name=$( echo ${deviceList[$i]} | cut -d " " -f 3-)
    devices["$name"]="$addr"
done

bluetoothctl -- power on && sleep 1 || exit 1

while [[ "$@" ]]; do
    bluetoothctl -- connect "${devices["$1"]}" || echo "Unrecognised device: $1"
    shift
    sleep 1
done

请注意,由于它每次都会构建设备列表,如果您拥有大量已知设备,它可能会很慢。

相关内容