热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

在Linux系统中征服蓝牙

在Linux系统中征服蓝牙--Linux通用技术-Linux技术与应用信息,下面是详情阅读。
本文是本人在ubuntu下安装使用蓝牙耳机的笔记。

蓝牙的内核支持不在本文讨论范围,系统的默认配置已满足要求。有兴趣的可以看参考资料中的相关文章。

先来看一下涉及到的各个软件包。

bluez-hcidump - Analyses Bluetooth HCI packets//建议安装,方便调试
bluez-pcmcia-support - PCMCIA support files for BlueZ 2.0 Bluetooth tools//你的蓝牙适配器是PC卡接口时
bluez-pin - Bluetooth PIN helper with D-BUS support//连接蓝牙设备(比如耳机)时输入验证码的工具
bluez-utils - Bluetooth tools and daemons//核心支持,必须安装
bluez-btsco - Bluez Bluetooth SCO tool//连接蓝牙耳机必备
gnome-bluetooth - GNOME Bluetooth tools.//蓝牙设备扫描,用蓝牙收发文件的工具
alsaplayer-alsa - PCM player designed for ALSA (ALSA output module)//alsa相关工具,推荐

建议先将蓝牙适配器插到电脑上,再执行上面的软件安装。

hcitool dev

这时会列出你的蓝牙适配器的信息:

Devices:
hci0 00:08:1B:83:C7:91

如果没有,则是驱动方面出了问题。
如果有蓝牙手机,现在就可以用它和你的电脑互传文件了。
发文件给电脑要先在电脑上运行

gnome-obex-server

发文件给手机请用

gnome-obex-send filename

(建议给上面两条命令建个alias)

安装必备的软件后。有两个配置文件需要关注。

一:/etc/bluetooth/hcid.conf
网上的资料大都说要修改这个文件。但根据我的实践,这个文件不用做任何修改即可正常使用。
不过如果你的蓝牙设备是固定的(比如像我只有一个蓝牙耳机),建议做如下修改:
建立一个文件/home/ahlong/bt-pin.sh
内容为

#!/bin/sh
echo “PIN:0000″

“0000″是耳机的验证码,可从随机文档上查得。

chmod a+x /home/ahlong/bt-pin.sh

将文件改为可执行,一定别忘了(此处省略852字)。
然后找到配置文件下面的这段

# PIN helper
pin_helper /usr/bin/pinwrapper;

并将”/usr/bin/pinwrapper”改为”/home/ahlong/bt-pin.sh”。
这样可以使btsco时弹出对话框的步骤直接被省略。

二:/etc/bluetooth/rfcomm.conf
进行这步前,需要先得到耳机的标识码。

hcitool scan

扫描设备。如果无输出,可做如下尝试后重新扫描(下面两个命令可能不只用在这个时候):

sudo hciconfig hci0 down
sudo hciconfig hci0 up

如果还是没有输出,请确保你的耳机处在”可以被发现”状态。具体方法请见设备随机文档。
这里得到的是00:03:89:4A:96:6D
现在可以把配置文件改成类似下面的样子。

rfcomm0 {
bind yes;
# Bluetooth address of the device
device 00:03:89:4A:96:6D;
# # RFCOMM channel for the connection
channel 2;
# # Description of the connection
comment “ahlong-M3000″;
}

上面的channel的值是如何确定的呢?

sdptool records 00:03:89:4A:96:6D

这个命令用于扫描00:03:89:4A:96:6D支持多少种蓝牙应用。
下面是我的输出:

Service Name: M3000 by Plantronics
Service RecHandle: 0×10000
Service Class ID List:
“Headset” (0×1108)
“Generic Audio” (0×1203)
Protocol Descriptor List:
“L2CAP” (0×0100)
“RFCOMM” (0×0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0×656e
encoding: 0×6a
base_offset: 0×100
Profile Descriptor List:
“Headset” (0×1108)
Version: 0×0100

Service Name: M3000 by Plantronics
Service RecHandle: 0×10001
Service Class ID List:
“Handsfree” (0×111e)
“Generic Audio” (0×1203)
Protocol Descriptor List:
“L2CAP” (0×0100)
“RFCOMM” (0×0003)
Channel: 2
Language Base Attr List:
code_ISO639: 0×656e
encoding: 0×6a
base_offset: 0×100
Profile Descriptor List:
“Handsfree” (0×111e)
Version: 0×0100

从上面看到这个蓝牙耳机支持”Headset” 和 “Handsfree”,当然还有”Generic Audio”。
Channel设为1或2都是可以的。但我试验发现,设为1时似乎XMMS放完一首歌时会停在下一首歌开始处,所以我选成2。

有多个蓝牙设备时添加多个rfcommX {……}即可。

想用蓝牙耳机听音乐,需要加载snd_bt_sco模块

sudo modprobe snd_bt_sco

执行完后,系统就会多出来一块声卡设备(我这里是/dev/dsp2)。可以通过gnome-volume-control的菜单里看到。
为了方便使用,建议将snd_bt_sco添加到/etc/modules。

想要使用蓝牙听音乐时打开一个控制台并输入

btsco 00:03:89:4A:96:6D 2

2是通道,好像可以省略。
正常的话不会有输出,务必保持窗口不被关闭。
特别说明一下,由于显式指定了地址,这里并不要求耳机处在”可以被发现”状态。

这样蓝牙耳机就可用了,不过由于蓝牙耳机不是默认的声卡设备。所以需要在软件里手动指定。
在XMMS中,将输出驱动选为alsa,然后点击Configure,在audio device里选择带BT字样的。
mplayer对声卡的识别没有XMMS好,同样选择alsa,再将device手动填成hw=1,0即可,hw=1,0的值与你电脑硬件配置等相关。可以用XMMS中读到,也可以根据gnome-volume-control的顺序来推断。
虚拟出的声卡一个时刻只能被一个程序使用。
如何让skype使用蓝牙耳机呢?

依次点Tools>>Options>> Sound Devices;

在audio system to use处选择ALSA;

把下面所有的都选成Bt Headset。

如果安装了alsaplayer,这里就可以用

aplay -D plughw:1,0 xx2.wav

向蓝牙耳机播放音乐;

arecord -d 10 -f cd -t wav -D plughw:1,0 bt0.wav

录制一段10s长的录音。
如果没有录下声音请检查一下mic的音量设置(通过gnome-volume-control)。

以上操作出现任何问题都可以借助

sudo hcidump

协助诊断。
推荐阅读
author-avatar
我并没有你们想象P的坚强
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有