歡迎您光臨本站 註冊首頁

在Linux系統中征服藍牙

←手機掃碼閱讀     火星人 @ 2014-03-23 , reply:0

本文是本人在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

協助診斷。

[火星人 ] 在Linux系統中征服藍牙已經有2876次圍觀

http://coctec.com/docs/linux/show-post-117997.html