怎样在Linux中使用蓝牙

怎样在Linux中使用蓝牙,第1张

方法如下:

1、终端使用命令lsusb

2、运行hciconfig可以看到:

从上图可以看出,的蓝牙设备是hci0

3、运行hcitool dev可以看到蓝牙设备的硬件地址

运行hcitoo --help 可以查看更多相关命令

然后激活设

sudo hciconfig hci0 up

要注意的是,激活前蓝牙必须是打开的,否则会出现如下错误:

4、然后扫描:

hcitool scan

5、然后开始连接了,连接阶段使用的主要命令是rfcomm:

运行rfcomm --help 可以查看用法

首先需要绑定目的蓝牙设备:

sudo rfcomm bind /dev/rfcomm0 E0:A6:70:8C:A3:02

注意:上面的这个地址是目的蓝牙设备的硬件地址。

接着连接:

sudo cat >/dev/rfcomm0

这是目的蓝牙主机就会d出一个对话框要求输入pin码,随便输入一个,然后主机就会d出一个对话框,只要输入的和刚才一致就可以通过验证。之后我们发现我的手机已经显示了成功配对的标记了。

自从安装了Deepin Linux,并 采用自己编译的内核 后,笔者的ThinkPad X200笔记本体验可谓是上升了一个非常重要的层次。后来有一天,笔者想用蓝牙耳机听音乐,然而在使用过程中发现,这台笔记本虽然自带蓝牙,屏幕下的蓝牙指示灯一直点亮着,系统中却看不到与蓝牙有关的设置选项。

出现这样的问题,多半就是因为系统中对蓝牙的支持没有启用,主要包括系统组件和内核两个层面。下面把我的经验总结如下。

默认地,Deepin并没有在系统中装上蓝牙组件,须用户手动安装。在终端中运行:

其中, bluetooth 是Linux蓝牙的核心组件,而 blueman 则是基于GTK+的一个全功能蓝牙管理器。把它们一齐装上,即可为Deepin启用全面的蓝牙支持。

笔者本以为安装了蓝牙组件后,蓝牙功能就能正常使用(因为之前在解决WLAN问题时,WLAN驱动未配置的情况下无线网卡灯是不会亮的,然而蓝牙灯始终会常亮),但是当打开蓝牙管理器时,竟然报错,提示蓝牙服务未启动。这不得不让我想到,内核中的蓝牙支持是否没有启用。

果不其然。在内核源码目录下运行 make menuconfig ,打开内核配置界面,依次对内核进行以下配置。

内核中的蓝牙选项位于【Network Settings】 -->【Bluetooth subsystem support】。先选中【Bluetooth subsystem support】,然后按”Y“,勾选它。

【Bluetooth subsystem support】中有子菜单,按回车进入,如下所示:

其中有几个选项,控制特定类型蓝牙设备协议的支持,一般全部启用。它们包括:

最为重要的一步,就是将蓝牙适配器驱动编译入内核当中。 进入最下方子菜单【Bluetooth device drivers】,如下所示:

菜单中根据接口和特定型号设备,列出了相应的支持选项,有些选项在勾选后还会展开新的选项。典型的接口有USB、SDIO、UART,按需要勾选。

笔者X200笔记本的蓝牙适配器是Broadcom BCM2045B,走的是USB通道,因此先勾选【HCI USB driver】,随后会在该项下面出现三个新的选项,再进一步勾选【Broadcom protocol support】。不过,在得知适配器信息之前,笔者拿捏蓝牙适配器可能也走了UART通道,所以也将【HCI UART driver】勾上,再进一步勾选下面的【Intel AG6XX protocol support】。但实际使用时发现,X200的蓝牙适配器的确走的是USB而非UART。若不能确定自己的蓝牙适配器类型,可以一并选上,也不占用太多空间。

上述配置完成后,按左右方向键选择”Save“,保存内核配置,然后选”Exit“退出。使用下面的命令重新编译内核并安装:

重启后,蓝牙功能即被激活。

在内核中启用蓝牙支持,并在系统中安装蓝牙组件后,Deepin发生了翻天覆地的变化。Deepin下蓝牙的体验非常出色。

Blueman管理器默认开机启动,会在托盘区域出现一个蓝牙图标,在其中可以很方便地管理蓝牙设备。

在Blueman管理器中可以搜索到各种蓝牙设备,包括各种手机、电脑,以及笔者的蓝牙耳机。与蓝牙耳机配对后,Deepin即刻将声音通过蓝牙进行播放,无需再进行进一步的配置,尤其方便。此外,Blueman还有其他有趣的玩法,比如文件传输、浏览设备文件,其中对设备文件的浏览功能与当年的MTK功能机类似。

以X200为代表的ThinkPad早期机型有一项设计非常出彩,就是它屏幕下的灯条,系统运行状态一目了然。其中正包括了蓝牙指示灯,当有数据传输时(如正使用蓝牙音频),指示灯会闪烁,如此就能知道蓝牙设备是否正常工作。可谓匠心。

要想让使用Deepin的笔记本支持蓝牙,需要做两项工作——

由此,Deepin下设备的价值就能被进一步挖掘,体验自会更上一层楼。

一.Linux对于蓝牙的支持

 在Linux 2.6内核已经实现如下协议。

串口形式蓝牙设备驱动(HCI UART driver)

USB蓝牙棒驱动(HCI USB driver)

内核也实现了L2CAP,RFCOMM串口接口,以及SCO链路支持.

另外内核也直接支持BNEP(Bluetooth Network Encapsulation Protocol ),即把蓝牙网络当成一个无线局域网 *** 作。

 Linux也带了蓝牙输入设备的相关支持。

需要打开 HIDP 和HID2HCI两个选项都要打开.

DUND 把蓝牙网络当成一个拨号网络来处理。

2.蓝牙协议栈

在实现了L2CAP后,也需要一个蓝牙协议栈处理。它起什么作用呢? 我的理解是内核封装到RFCOMM的层次,即只负责的蓝牙的包的封装与收发。至于包收上来,在蓝牙的四个阶段,如何应用的状态影响,以及如何响应正确的包,这一些事情由蓝牙协议栈来完成的。

在Linux实现蓝牙功能有多个互相竞争的蓝牙协议栈,但是影响最大是bluez.几乎已经成为Linux下的标准协议栈的代名词。

还有一个协议栈是Affix  不过用的人比较少

在应用程序级,它主要由两部分组成,一个是bluez的应用程序库,主要负责与内核的bluez通信,和bluez-util工具。即完成蓝牙四阶段处理的一些命令行工具。

3.蓝牙的概念。

配对由一方发起即可,如果本设备需要被其它设备搜索,需要有被发现功能。

二.Linux关于蓝牙命令

-------------------------------------------------

在Linux使用蓝牙最方便是使用bluez-util自带向个命令来测试。

我们这里采用市面最容易找到的蓝牙棒来做物理层设备与手机进行通讯测试。把蓝牙棒插LINUX下的USB口后,在dmesg我们会看到提示

表示USB蓝牙棒已经被识别了。如果

*** 作系统自带HCI工具主要来自bluez-util.

/usr/sbin/hciattach : attach serial devices via UART HCI to BlueZ stack

/usr/sbin/hcid     :Bluetooth Host Controller Interface Daemon

/usr/sbin/hciemu    :HCI emulator

/usr/sbin/hciconfig :  configure Bluetooth devices

/usr/sbin/hcidump  : Parse HCI data

/usr/bin/hcitool   : configure Bluetooth connections

/usr/bin/sdptool    : control and interrogate SDP servers

hciconfig类似于 hciconfig.类似的 *** 作可以参见官网(这里不方便留链接,自己去搜索下就可以了)

检测USB设备,lsusb

2.查看hci设备,hciconfig

激活设备

hciconfig hci0 up

3.修改蓝牙配置文件

蓝牙采用/etc/bluetooth/

hcid.conf  rfcomm.conf

其中hcid.conf有关配对信息。其中security user表示每次配对询问用户对方PIN,而auto则直接采用passkey中的PIN码。

4.重启蓝牙服务

如果修改了蓝牙配置后,需要重启蓝牙服务

service bluetooth stop

service bluetooth start

5.扫描设备

6.增加自动配对设置

修改 /etc/bluetooth/rfcomm.conf

增加扫描蓝牙地址

7.创建设备结点(只合适于第一次)

rfcomm create dev #它将创建于/dev/rfcomm0 设备结点

它等同于如下命令系列

mknod /dev/rfcomm0 c 216 1

chmod 666 /dev/rfcomm0

rfcomm bind /dev/rfcomm0 00:21:19:A4:E0:F1-1

8.增加SDP消息信息

为了减少麻烦,把所有支持的蓝牙服务都加上.

sdptool add --channel=1 DID SP DUN LAN FAX OPUSH FTP HS HF SAP NAP GN PANU HID CIP CTP A2SRC A2SNK SYNCML NOKID PCSUITE SR1

9.增加蓝牙串口绑定

rfcomm bind /dev/rfcomm0 00:21:19:A4:E0:F1 1

#rfcomm bind /dev/rfcomm0 蓝牙设备地址  通道,这个命令可选

10.解除蓝牙绑定

格式:rfcomm unbind /dev/rfcomm0 蓝牙设备地址   通道

11.联接蓝牙设备

hcitool cc 00:21:19:A4:E0:F1

三.关于蓝牙配置文件

-------------------------------------------

蓝牙的配置文件主要是 /etc/bluetooth目录下的hcid.conf和rfcomm.conf.

这里的security 是表示配对的认证模式,user表示由用户输入密码。这个需要在后面用

pin_helper 指明用哪一个程序输入密码,这程序可以是图形界面程序,或者是字符界面程序。

常见的pin_helper有

/usr/bin/bluez-pin : bluez自带的pin输入界面

kbluepin

passkey 配置项指明请求联接的设备的pin码。当采用auto模式时,将采用这个密码来联接.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7569062.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存