2016年9月7日 星期三

解決「不能透過藍牙 (Bluetooth) 傳輸檔案」的問題

在新安裝的 Fedora 24 系統,使用隨著「MATE 桌面環境」安裝的 Bluetooth 管理程式,在傳輸聲音時並沒有什麼問題。不過,當想傳輸檔案時,卻不能做。雖然可以用 USB 傳輸檔案,速度也比較快。但若不是資料量大時,用藍牙傳輸小檔案,少了一些插、拔的動作。
  之前的版本是可以經由藍牙傳輸檔案,最近的更新卻不行傳輸。根據經驗,一定是某些套件未安裝,或是某些設定未啟用。

1.  查詢藍牙模組的功能

首先查詢 PC 端的藍牙控制器功能,在終端機開啟『bluetoothctl』藍牙管理程式。再下『show』命令,會列出目前所能提供的功能
[bluetooth]# show
Controller 00:A0:96:1D:48:78
    Name: Celeron-D
Alias: Celeron-D
Class: 0x0c0104
Powered: yes
Discoverable: no
Pairable: yes
UUID: Headset AG(00001112-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile(00001801-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control(0000110e-0000-1000-8000-00805f9b34fb)
UUID: Generic Access Profile(00001800-0000-1000-8000-00805f9b34fb)
UUID: PnP Information(00001200-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target(0000110c-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink(0000110b-0000-1000-8000-00805f9b34fb)
UUID: Audio Source(0000110a-0000-1000-8000-00805f9b34fb)
Modalias: usb:v1D6Bp0246d0529
Discovering: no
接著,再用『info xx:xx:xx:xx:xx:xx』查詢藍牙裝置的功能;命令後的 16 進位數字,就是藍牙裝置的 MAC 位址 (MAC Address) (:或稱為『識別碼』),可以用『devices』或『paired-devices』查詢得知。
[bluetooth]# info B8:D9:CC:7F:3A:A3
Device B8:D9:CC:7F:3A:A3
      Name: GT-I9100
Alias: GT-I9100
Class: 0x5a020c
Icon: phone
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: OBEX Object Push(00001105-0000-1000-8000-00805f9b34fb)
UUID: Audio Source(0000110a-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target(0000110c-0000-1000-8000-00805f9b34fb)
UUID: Advanced Audio Distribu..(0000110d-0000-1000-8000-00805f9b34fb)
UUID: Headset AG(00001112-0000-1000-8000-00805f9b34fb)
UUID: NAP(00001116-0000-1000-8000-00805f9b34fb)
UUID: Handsfree Audio Gateway(0000111f-0000-1000-8000-00805f9b34fb)
UUID: SIM Access(0000112d-0000-1000-8000-00805f9b34fb)
UUID: Phonebook Access Server(0000112f-0000-1000-8000-00805f9b34fb)
UUID: Message Access Server(00001132-0000-1000-8000-00805f9b34fb)
UUID: PnP Information(00001200-0000-1000-8000-00805f9b34fb)
Modalias: bluetooth:v0075p0100d0100
若兩個藍牙裝置有互相對應的功能,才可以建立互通的通道。上例中,『OBEX Object Push』這個功能只有手機端有,而 PC 端並沒有對應的功能。查詢這個套件的作用為何,
[root@Celeron-D ~]# dnf info bluez-obexd
上次中介資料過期檢查:3:06:22 以前,時間點為 Sun Sep  4 16:26:50 2016。
可用的軟體包
名稱: bluez-obexd
架構: x86_64
Epoch: 0
版本: 5.41
發行版: 1.fc24
大小: 192 k
軟體庫: updates
摘要: Object Exchange daemon for sharing content
URL: http://www.bluez.org/
授權: GPLv2+
描述: Object Exchange daemon for sharing files, contacts etc over bluetooth
由描述可以看出:造成不能傳輸檔案的原因,應該就是這個模組未安裝所致。

2.  安裝 OBEX 套件

用 DNF 就可以補安裝這個套件,命令如下:
[root@Celeron-D ~]# dnf install bluez-obexd
同時也會安裝另一個套件 libical。
  接下來可以測試,會發現 PC 端仍然看不『OBEX』相關功能,重新開啟藍牙服務 (:systemctl restart bluetooth.service)、重開機也沒用。這個因為新安裝的 bluez-obexd 套件,所提供的 OBEX 功能未啟動,啟動的命令有兩組,一組在使用者端,
[SiB@Celeron-D ~]$ systemctl --user status obex
[SiB@Celeron-D ~]$ systemctl --user enable obex
一組在 root 管理者
[root@Celeron-D ~]# systemctl --global enable obex
:網路資料也有稱只要 root 管理者下命令即可,筆者沒有去測試,確保可以用比較重要。

3.  確認 OBEX 功能

再查詢 PC 端的藍牙功能,確認是否有 OBEX 相關功能。
[bluetooth]# show
Controller 00:A0:96:1D:48:78
    Name: Celeron-D
Alias: Celeron-D
Class: 0x0c0104
Powered: yes
Discoverable: no
Pairable: yes
UUID: Headset AG(00001112-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile(00001801-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control(00001106-0000-1000-8000-00805f9b34fb)
UUID: OBEX File Transfer(0000110e-0000-1000-8000-00805f9b34fb)
UUID: Generic Access Profile(00001800-0000-1000-8000-00805f9b34fb)
UUID: OBEX Object Push(00001105-0000-1000-8000-00805f9b34fb)
UUID: PnP Information(00001200-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target(0000110c-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink(0000110b-0000-1000-8000-00805f9b34fb)
UUID: Audio Source(0000110a-0000-1000-8000-00805f9b34fb)
UUID: Message Notification Se..(00001133-0000-1000-8000-00805f9b34fb)
UUID: Phonebook Access Server(0000112f-0000-1000-8000-00805f9b34fb)
UUID: Message Access Server(00001132-0000-1000-8000-00805f9b34fb)
Modalias: usb:v1D6Bp0246d0529
Discovering: no
由結果可以看出有提供兩個 OBEX 相關功能,也有兩個與訊息 (Message) 交換有關功能,還有一個電話簿存取 (Phonebook Access) 功能。經實測,已經可以透過藍牙傳輸檔案了。

已測試版本:

  • Fedora 24 + MATE 桌面 1.14.1 + BlueZ 5.41

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)