我正在尝试将我宣传的蓝牙设备类别从计算机更改为运行 ubuntu 12.04 的手机。我下载了 bluez 源代码并编辑了 main.conf 文件以更改行
Class = 0x000100
到别的东西。我用
Class = 0x0c025a
然后我运行 make && make install。我认为这没问题,因为/etc/bluetooth/main.conf
文件已根据我的更改进行了更新。
现在的问题是,当我真正尝试连接到设备时
hcitool cc <bdaddr>
我发现我仍在使用 Class0x000100
而不是 来宣传自己0x0c025a
。
我缺少什么才能使这些更改生效?
答案1
首先,找到您的接口名称:
hciconfig
它应该给你接口的名称,例如hci0
。
假设显示你的界面类:
hciconfig hci0 class
这应该会显示您的设备类别。
最后,以超级用户权限:
sudo hciconfig hci0 class 000408
应该设置您的设备的新类别。
具有十六进制和二进制表示的蓝牙类的有用参考可以在这里找到: http://www.question-defense.com/tools/class-of-device-bluetooth-cod-list-in-binary-and-hex
答案2
BlueZhostname
插件会覆盖中的Name
和Class
设置/etc/bluetooth/main.conf
。请按照以下步骤指定蓝牙设备类别 (CoD):
hostname
通过修改 来跳过启动蓝牙守护进程时加载插件的过程/lib/systemd/system/bluetooth.service
。例如:sudo sed -i 's/bluetoothd/bluetoothd \-\-noplugin=hostname/g' /lib/systemd/system/bluetooth.service
或者,您可以使用 指定包含列表--plugin=<plugins>
。请参阅bluetoothd(8)
和https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/plugins
在常规部分中编辑
/etc/bluetooth/main.conf
并指定。如果您想要除以下内容之外的其他内容,请指定:Class
Name
BlueZ X.YZ
[General] Class = 0x1c0420 Name = UbuntuCarAudio
重新启动或重启蓝牙服务以使更改生效:
sudo systemctl daemon-reload sudo service bluetooth restart
hciconfig -a
通过运行或来验证更改echo 'show' | bluetoothctl
。hciconfig -a
将显示解码的设备类别 (CoD) 信息:Name: 'UbuntuCarAudio' Class: 0x1c0420 Service Classes: Rendering, Capturing, Object Transfer Device Class: Audio/Video, Car Audio
答案3
您需要在 /etc/bluetooth/main.conf 文件中更改类名。
Class = 0x00041C
然后重启蓝牙服务
sudo service bluetooth restart
然后从顶部面板图标关闭蓝牙并将其打开。