34.2. 藍芽

「藍芽」是連接各種設備 (如:行動電話、PDA、週邊設備、膝上型電腦,或鍵盤或滑鼠等系統元件) 的無線技術。此一名稱衍生自丹麥國王 Harold Bluetooth,他統一了斯堪的那維亞許多分裂的地區。「藍芽」標誌是以 "H" (像一顆星星) 和 "B" 的北歐文字為基礎。

可由許多重要方面辨識「藍芽」和 IrDA。首先,個別設備不需要直接「看到」彼此;其次,可將數個設備連線於一個網路中。但是,最大資料速率為 720 Kbps (目前的版本 1.2)。理論上,「藍芽」甚至可穿過牆面通訊。但是實際上,這要視牆面的材質和設備等級而定。有三種設備等級的傳輸範圍介於 10 至 100 公尺。

34.2.1. 基本操作

下列小節簡述「藍芽」運作的基本原則。請瞭解需要符合哪些軟體需求,藍芽如何與系統互動,以及藍芽設定檔的運作方式。

34.2.1.1. 軟體

若要使用「藍芽」,您需要「藍芽」介面卡 (可以是內建介面卡或外部裝置)、驅動程式和「藍芽」通訊協定堆疊。Linux 核心已經包含使用「藍芽」的基本驅動程式。Bluez 系統做為通訊協定堆疊使用。為了確保應用程式可與「藍芽」搭配使用,必須安裝基礎套件 bluez-libsbluez-utils。這些套件提供許多所需的服務和公用程式。此外,部份介面卡,例如,BroadcomAVM BlueFritz!,要求必須安裝 bluez-firmware 套件。bluez-cups 套件讓您可透過「藍芽」連線列印。如果必須進行「藍芽」連線的偵錯工作,請安裝 bluez-hcidump 套件。

34.2.1.2. 一般互動

「藍芽」系統由四個連鎖層所組成,提供需要的功能:

硬體

Linux 核心支援所需的介面卡和適合的驅動程式。

組態檔

用於控制「藍芽」系統。

精靈

組態檔案所控制並可提供功能的服務。

應用程式

應用程式允許使用者使用並控制精靈所提供的功能。

當您插入「藍芽」介面卡時,熱插拔系統會載入它的驅動程式。載入驅動程式之後,系統會檢查組態檔案以查看「藍芽」是否應該啟動。如果應該啟動,它會決定要啟動的服務。根據此資訊,會啟動對應的精靈。在安裝時會查探藍芽介面卡。如果找到一或多個介面卡,便會啟用藍芽。否則會停用藍芽系統。任何稍後新增的藍芽設備都必須以手動方式啟用。

34.2.1.3. 設定檔

在「藍芽」中,服務是藉由設定檔 (例如,檔案傳輸設定檔、基本列印設定檔和個人區域網路設定檔) 所定義。若要讓裝置使用其他裝置的服務,兩者均必須了解相同設定檔,但裝置套件和手冊中通常缺少這項資訊。不幸地,部份製造商並未嚴格符合個別設定檔的定義。即使如此,設備之間的通訊通常可順暢運作。

在下列文字中,本地設備為實體上連線到電腦的設備。其他僅可透過無線連線存取的設備稱為遠端設備。

34.2.2. 組態

此小節介紹藍芽的組態。請瞭解需要哪些組態檔、需要哪些工具以及如何以 YaST 或手動方式設定藍芽。

34.2.2.1. 以 YaST 設定藍芽

使用「YaST 藍芽」模組 (請參閱圖 圖形 34.2, "YaST 藍芽組態") 來設定系統的「藍芽」支援。只要熱插拔一偵測到系統上的「藍芽」介面卡 (例如,在開機期間或是在插入介面卡時),便會自動以此模組中設定的設定值來啟動「藍芽」。

圖形 34.2. YaST 藍芽組態

YaST 藍芽組態

在組態的第一步驟中,決定是否要在系統上啟動「藍芽」服務。如果您已啟用藍芽服務,可以設定兩個項目。首先,裝置名稱。這是發現您的電腦時,其他設備所顯示的名稱。一共有兩種可用的保留字元—%h 代表系統的主機名稱 (有用,例如,如果它是由 DHCP 動態指定),而 %d 會插入介面編號 (如果您在電腦中有一個以上的「藍芽」介面卡才有用)。例如,如果您在欄位中輸入 Laptop %h,而 DHCP 指定 unit123 的名稱給您的電腦,則其他遠端的設備將以 Laptop unit123 來識別您的電腦。

當遠端設備嘗試連線,安全管理員參數會與本機系統的行為相關。其差別在於處理 PIN 號碼。允許任何設備不需要 PIN 即可連線,或是判斷如何在需要 PIN 時選擇正確的 PIN。您可以在適當的輸入欄位輸入 PIN (儲存在組態檔案)。如果設備嘗試連線,它會先使用此 PIN。如果它失敗,它就會恢復不使用 PIN。就最佳的安全性而言,最好選擇永遠詢問使用者的 PIN。此選項允許您在不同 (遠端) 的設備上使用不同的 PIN。

然後按一下 進階精靈組態 以進入選取和設定可用服務的對話方塊 (在「藍芽」中也稱為「設定檔」)。所有可用的服務均顯示在清單中,可按一下 啟用停用 加以啟用或停用。按一下 編輯 以開啟快顯對話方塊,您可以在其中指定選取服務 (精靈) 的其他引數。除非您對服務很熟悉,否則請勿做任何變更。完成精靈的組態之後,按一下 確定 以結束此對話方塊。

回到主要對話方塊,按一下 安全性選項 以進入安全性對話方塊,您可以在其中指定加密、驗證和掃描設定。然後結束安全性對話方塊以回到主要對話方塊。當您以完成關閉主要對話方塊之後,「藍芽」系統已經可以使用。

從主要對話方塊,也可以開啟 設備和服務類別 對話方塊。藍芽設備群組成不同的設備類別。在此對話方塊中,針對電腦選擇正確的類別,例如桌上型膝上型。設備類別與服務類別不同,並非很重要,同樣在此設定。有時像手機這一類的藍芽設備,如果它們可以偵測到您系統上所設定的正確服務類別,則只允許某些特定功能。這通常是發生在手機上,它們必須要有物件轉送的類別,才能從電腦轉送檔案或轉送檔案至電腦。您可以選擇多個類別。「為了以防萬一」而選取所有的類別是沒有太大幫助的。預設的選擇應該在大部份的情況都適用。

如果您想要使用「藍芽」來設定網路,請在 進階精靈組態 對話方塊中啟用 PAND,並以 編輯 設定精靈的模式。「藍芽」網路連線若要能運作,必須有一個 pand 在 傾聽 模式操作,而對等裝置則是在 搜尋 模式操作。根據預設,傾聽 模式為預先設定。請調整您本地 pand 的行為。此外,請在 YaST 網路卡模組中設定 bnepX 介面 (X 代表系統中的設備號碼)。

34.2.2.2. 手動設定藍芽

Bluez 系統個別元件的組態檔案位於 /etc/bluetooth 目錄中。唯一的例外是啟動元件的檔案 /etc/sysconfig/bluetooth,可由 YaST 模組修改。

以下所述的組態檔案僅可由使用者 root 修改。目前沒有變更所有設定值的圖形使用者介面。最重要的設定值可使用「YaST 藍芽」模組來設定,如 節 34.2.2.1, "以 YaST 設定藍芽" 中所述一般。所有其他的設定,僅在特殊狀況的資深使用者才會用到。通常,預設值就足夠。

PIN 號碼提供基本保護,避免不需要的連線。行動電話在建立第一個連絡人時 (或在設定電話的設備連絡人時) 通常會查詢 PIN。兩個設備若要通訊,兩者皆必須以相同 PIN 辨識本身。在電腦上,PIN 位於檔案 /etc/bluetooth/pin 中。

[Important]藍芽連線的安全性

不管 PIN,兩個設備之間的傳輸可能不是完全安全。根據預設,「藍芽」連線的驗證和加密是停用的。啟動驗證和加密可能會導致與某些「藍芽」設備進行通訊時發生問題。

可以在組態檔案 /etc/bluetooth/hcid.conf 中變更各種設定,如設備名稱和安全性模式。通常,預設值就足夠。檔案包含描述各種設定選項的註解。

在所包括的檔案中的兩個區段是指定為 optionsdevice。第一個區段包含 hcid 用以啟動的一般資訊。第二個區段則包含個別的本地「藍芽」設備的設定值。

options 區段最重要的設定之一為 security auto;。如果設為 auto,hcid 會嘗試使用本地 PIN 以進行內送連線。如果它失敗,它就會切換至 none,仍然嘗試建立連線。若要加強安全性,此預設值應設為 user,以確保使用者在每次建立連線時都會被要求輸入 PIN。

device 區段中設定電腦顯示在另一端的名稱。設備類別 (例如,DesktopLaptopServer) 是在此區段中定義。驗證與加密也是在這裏啟用或關閉。

34.2.3. 系統元件和公用程式

「藍芽」的操作性視各種服務間的互動而定。至少需要兩個背景精靈:hcid (host controller interface daemon,主機控制器介面精靈),做為「藍芽」設備和控制它的介面;以及 sdpd (service discovery protocol daemon,服務探索通訊協定精靈),設備可藉此找出主機提供何種服務。如果在啟動系統時沒有自動啟用它們,hcid 和 sdpd 均可使用 rcbluetooth start 指令來啟用。此指令必須以 root 的身份執行。

以下段落簡略描述可與「藍芽」搭配使用的最重要外圍程序工具。即使現在提供了各種控制「藍芽」的圖形元件,看一下這些程式還是非常值得的。

部份指令必須以 root 的身份執行。包括測試遠端設備連線的指令 l2pingdevice_address

34.2.3.1. hcitool

hcitool 可用來判斷是否偵測到本地或遠端設備。hcitool dev 指令可列出本地設備。輸出會對每一個偵測到的本地設備以 interface_name device_address 格式產生一行。

遠端設備可使用 hcitool inq 指令來搜尋。每一個偵測到的設備會傳回三個值:設備位址、時鐘偏移值和設備等級。設備位址相當重要,因為其他指令會使用它來辨識目標設備。時鐘偏移值主要為技術層次的用途。等級以十六進位值指定設備類型和服務類型。

指令 hcitoolname device-address 可用來判斷遠端設備的設備名稱。如果是遠端電腦,類別和設備名稱會與它的 /etc/bluetooth/hcid.conf 檔案中的資訊一致。本地設備位址會產生錯誤輸出。

34.2.3.2. hciconfig

指令 /usr/sbin/hciconfig 傳遞本地設備的進一步資訊。如果 hciconfig 以無引數執行,輸出會顯示設備資訊,如設備名稱 (hciX)、實體設備位址 (以 00:12:34:56:78 格式表示的 12 位數字) 和關於傳輸資料量的資訊。

hciconfig hci0 name 顯示當您的電腦接收到遠端設備要求時所傳回的名稱。除了查詢本地設備的設定之外,hciconfig 尚可用來修改這些設定。例如,hciconfig hci0 name TEST 可將名稱設為 TEST

34.2.3.3. sdptool

程式 sdptool 可用來檢查特定設備提供的服務。指令 sdptoolbrowse device_address 會傳回設備的所有服務。sdptool search service_code 指令可用來搜尋特定服務。此指令會掃描所有可存取的設備以尋找要求的服務。如果有一個設備提供服務,程式會印出設備傳回的完整服務名稱以及簡短描述。輸入 sdptool 而無任何參數,則可檢視所有可能服務代碼清單。

34.2.4. 圖形應用程式

在 Konqueror 中,輸入 URL bluetooth:/ 以列出本地和遠端「藍芽」設備。連按兩下設備可取得設備提供的服務之綜覽。如果您以滑鼠在特定服務上移動,瀏覽器的狀態列會顯示服務所使用的設定檔。如果您按一下服務,會開啟對話方塊,詢問要做什麼:儲存、使用服務 (必須啟動應用程式才能執行) 或取消動作。如果您不想要再顯示對話方塊,可是想要永遠執行選取的動作,可以標示核取方塊。對於某些服務,尚未提供支援。對於其他服務,必須安裝額外的套件。

34.2.5. 範例

本小節提供兩個可能的「藍芽」案例典型範例。第一個範例教導如何透過「藍芽」建立兩個主機之間的網路連線。第二個範例則是教導電腦與手機之間的連線。

34.2.5.1. 兩台主機之間的網路連線

在第一個範例中,將在兩台主機 H1H2 之間建立網路連線。這兩台主機的「藍芽」設備位址為 baddr1baddr2 (如上述在兩台主機上以指令 hcitooldev 所決定)。主機應該以 IP 位址 192.168.1.3 (H1) 和 192.168.1.4 (H2) 來辨識。

藉由 pand (Personal Area Networking Daemon,個人區域網路精靈) 的協助建立「藍芽」連線。下列指令必須以使用者 root 的身份執行。描述重點在於「藍芽」特定動作,不提供網路指令 (ip) 的詳細說明。

輸入 pand -s 以啟動主機 H1 的 pand。然後,可使用 pand-c baddr1 建立主機 H2 的連線。如果您在其中一台主機上輸入 ip link show 以列出可用的網路介面,輸出應該包含如下的項目:

 bnep0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 
 link/ether 00:12:34:56:89:90 brd ff:ff:ff:ff:ff:ff

除了 00:12:34:56:89:90,輸出應該包含本地設備位址 baddr1baddr2。現在此介面必須指定 IP 位址並啟用。在 H1 上,可使用下列兩個指令來執行:

ip addr add 192.168.1.3/24 dev bnep0
ip link set bnep0 up

H2 上:

ip addr add 192.168.1.4/24 dev bnep0
ip link set bnep0 up

現在 H1 可從 H2 的 IP 192.168.1.3 之下存取。使用指令 ssh192.168.1.4H1 存取 H2 (假設 H2 執行 sshd,在 SUSE Linux 中預設便會啟用)。指令 ssh192.168.1.4 也可以一般使用者執行。

34.2.5.2. 從行動電話到電腦的資料傳輸

第二個範例說明如何將含有內建數位相機的行動電話所建立的相片傳輸到電腦 (不產生多媒體訊息傳輸的額外成本)。雖然不同行動電話的功能表結構不同,但程序通常相似。如有需要,請參考您電話的手冊。此範例描述從 Sony Ericsson 行動電話傳輸相片到膝上型電腦。電腦上的 Obex-Push 服務必須為可用的,且電腦必須授與行動電話存取權。在第一步驟中,使膝上型電腦上的服務可用。您的膝上型電腦上必須執行特殊的服務精靈,才能從電話取得資料。如果已安裝 kbluetooth 套件,就不必啟動特殊的精靈。如果未安裝 kbluetooth,請使用 bluez-utils 套件中的 opd 精靈。以下列指令啟動精靈:

opd --mode OBEX --channel 10 --daemonize --path /tmp --sdp 

使用了兩個重要的參數:--sdp 向 sdpd 註冊服務,而 --path /tmp 則是指定程式接收資料的儲存位置—在此例中是儲存於 /tmp。您也可以指定其他您具有寫入存取權的目錄。

如果您使用 kbluetooth,當膝上型電腦收到相片時,會出現提示,要您輸入目錄。

現在行動電話必須認識電腦。要這樣做,開啟電話上的 連線 功能表並選取 藍芽 。如有需要,在選取 我的設備 之前按一下 開啟。選取 新設備 並讓電話搜尋膝上型電腦。如果偵測到設備,它的名稱會出現在顯示幕上。選取和膝上型電腦相關的設備。如果您遭遇到 PIN 查詢,請輸入在 /etc/bluetooth/pin 中指定的 PIN。現在您的電話可辨識膝上型電腦,並且可和膝上型電腦交換資料。結束目前功能表並移至影像功能表。選取要傳輸的影像,並按下 其他。在下一個功能表中,按下 傳送 以選取傳輸模式。選取 透過藍芽。膝上型電腦應該列為目標設備。選取膝上型電腦以啟動傳輸。然後影像會儲存在 opd 指令所指定的目錄。音軌可以相同方式傳輸到膝上型電腦。

34.2.6. 疑難排解

如果您無法建立連線,請根據下列清單繼續。請記住錯誤可能發生在連線的任一端或甚至在兩端。如果可能,以另一個「藍芽」設備重新建構問題,以確認設備沒有損壞。

本地設備是否列在 hcitooldev 的輸出中?

如果本地設備沒有列在此輸出中,表示 hcid 未啟動,或設備未被識別為「藍芽」設備。這可能有各種因素。設備可能損壞或正確的驅動程式可能遺失。內建「藍芽」的膝上型電腦通常有無線設備 (如 WLAN 和「藍芽」) 的開啟和關閉開關。請檢查您膝上型電腦的手冊以查看您的設備是否有此開關。以指令 rcbluetoothrestart 重新啟動「藍芽」系統,並檢查 /var/log/messages 中是否報告任何錯誤。

您的「藍芽」介面卡是否需要韌體檔案?

如果需要,請安裝 bluez-bluefw 並以指令 rcbluetoothrestart 重新啟動「藍芽」系統。

hcitoolinq 的輸出是否傳回其他設備?

請測試此指令一次以上。連線可能受到干擾,因為其他設備也使用「藍芽」的頻帶。

PIN 符合嗎?

檢查電腦的 PIN 號碼 (在 /etc/bluetooth/pin 中) 是否符合目標設備的。

遠端設備可以「看到」您的電腦嗎?

請嘗試從遠端設備建立連線。檢查此裝置是否看得到電腦。

可以建立網路連線嗎 (請參閱 節 34.2.5.1, "兩台主機之間的網路連線")?

節 34.2.5.1, "兩台主機之間的網路連線" 中描述的設定可能不適用,這有幾個原因。例如,兩台電腦其中之一不支援 ssh 通訊協定。請嘗試 ping192.168.1.3ping192.168.1.4。如果可以,請檢查 sshd 是否在作用中。其他問題可能是兩個設備其中之一已經有網路設定,與範例中的位址 192.168.1.X 衝突。如果是此狀況,請嘗試不同的位址,如 10.123.1.210.123.1.3

膝上型電腦是否顯示為目標設備 (請參閱 節 34.2.5.2, "從行動電話到電腦的資料傳輸")?行動設備可識別膝上型電腦上的 Obex-Push 服務嗎?

我的設備 中,選取對應設備並檢視 服務 清單。如果沒有顯示 Obex-Push (即使在更新清單之後),則問題是因為膝上型電腦上的 opd 所造成。opd 是否在作用中?您對特定目錄是否有寫入存取權?

節 34.2.5.2, "從行動電話到電腦的資料傳輸" 中描述的狀況以相反方向是否能運作?

如果安裝了 obexftp 套件,在部份設備上可使用 obexftp -b device_address -B 10 -p image 指令來執行。已測試數種 Siemens 和 Sony Ericsson 型號並發現其可以作用。請參閱 /usr/share/doc/packages/obexftp 中的文件。

如果您已安裝 bluez-hcidump 套件,就可以使用 hcidump -X 檢查裝置之間傳送的內容。有時候輸出有助於提示問題所在,但是要知道,這其中只有一部分是"明確的文字"。

34.2.7. 如需詳細資訊

如需其他 (最新) 文件,請參閱 /usr/share/doc/packages/bluez-utils/ (有德文版和英文版)。

「藍芽」的使用和組態的各種說明之廣泛綜覽可在 http://www.holtmann.org/linux/bluetooth/ 中找到。其他有用的資訊和說明: