Zadanie wydawało się trywialne: pod systemem 'Kubuntu 8.04' (HH) sparować telefon 'Nokia 6310i' z komputerem przenośnym 'HP Compaq 6720s'  wyposażonym we wbudowany moduł bluetooth. Niestety podczas standardowej procedury parowania otrzymywałem następujący błąd:
 
HCI authentication request failed: Connection timed out
 
Zapraszam do lektury!

Parę danych o sprzęcie i oprogramowaniu:

a. Wersja jądra:

maciej@gucek4:~$ uname -r
2.6.24-19-generic

b. Wersja dystrybucji:

maciej@gucek4:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 8.04
Release:        8.04
Codename:       hardy
 
c. Wersja stosu bluetooth:
 
maciej@gucek4:~$ aptitude show bluez-utils
Pakiet: bluez-utils
Stan: zainstalowany
Zainstalowany automatycznie: tak
Wersja: 3.26-0ubuntu6
 
d. Adapter bluetooth:
maciej@gucek4:/etc/init.d$ lsusb
Bus 006 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 001 Device 003: ID 03f0:171d Hewlett-Packard
Bus 001 Device 001: ID 0000:0000
 
e. Czy adapter bluetooth jest rozpoznawany przez stos bluetooth?
 
maciej@gucek4:/etc/init.d$ hciconfig
hci0:   Type: USB
        BD Address: aa:bb:cc:dd:ee:ff ACL MTU: 1017:8 SCO MTU: 64:8
        UP RUNNING PSCAN
        RX bytes:1205 acl:0 sco:0 events:26 errors:0
        TX bytes:599 acl:0 sco:0 commands:26 errors:0
 


Parowanie urządzenia zewnętrznego składa się z kilku prostych kroków:
 
1. Włączamy adapter bluetooth.
 
W komputerze przenośnym HP Compaq 6720s służy do tego specjalny przycisk na obudowie. Większość zewnętrznych adapterów bluetooth-usb jest wyposażonych w diodę sygnalizującą pracę urządzenia. Prawidłowość podłączenia i wykrycia adaptera sprawdzamy na dwa sposoby:
 
 a. Sprawdzając, czy system widzi jakiekolwiek adaptery (hci0, hci1, ..., hcin):
 
maciej@gucek4:~$ hciconfig
hci0:   Type: USB
        BD Address: aa:bb:cc:dd:ee:ff ACL MTU: 1017:8 SCO MTU: 64:8
        UP RUNNING PSCAN
        RX bytes:1205 acl:0 sco:0 events:26 errors:0
        TX bytes:599 acl:0 sco:0 commands:26 errors:0
 
b. Możemy jeszcze sprawdzić jaka nazwa została przypisana naszemu adapterowi:
 
maciej@gucek4:~$ hciconfig hci0 name
hci0:   Type: USB
        BD Address: 00:1E:37:A3:BC:D9 ACL MTU: 1017:8 SCO MTU: 64:8
        Name: 'gucek4-0'
 
Domyślnie nazwa jest tworzona z połączenia nazwy komputera, do którego jest dołączony adapter (w powyższym przykładzie jest to 'gucek4') oraz numery adaptera (w naszym przykładzie '0' od 'hci0'). 

c. Na pasku zadań powinna pojawić się ikona z symbolem bluetooth informująca, że  aplikacja KBluetooth wykryła urządzenie i jest gotowa do pracy.
 
2. Konfigurujemy bluetooth w urządzeniu zewnętrznym (zewnętrznym względem komputera), które zamierzamy sparować z komputerem przenośnym, by pracowało w tzw. 'trybie publicznym'.
 
Przykład, dla 'Nokia 6310i':
Menu ->  Bluetooth -> Ustawienia Bluetooth -> Identyfikowalność wł. telef.
 
2.1. Sprawdzamy wersję oprogramowania wbudowanego (ang. firmware) naszego telefonu. Wykonanie tego kroku nie jest konieczne. Słyszałem, że przy starszych wersjach oprogramowania telefonu mogą się pojawić problemy. W przypadku telefonu Nokia 6310i wystarczy wcisnąć na klawiaturze, tak jakby się wybierało 'telefon do przyjaciela' następujący łańcuch:
*#0000#
 
Odpowiedź mojego telefonu:
V 5.60
06-09-04
NPL-1
(c) NMP.
 
3. Włączamy bluetooth w urządzeniu zewnętrznym (zewnętrznym względem komputera).
 
Przykład, dla Nokia 6310i:
Menu -> Bluetooth -> Bluetooth -> Włącz
 
4.  Wykrywamy urządzenia zewnętrzne z interfejsem bluetooth będące w zasięgu komputera. W konsoli wpisujemy:
 
maciej@gucek4:~$ hcitool scan
Scanning ...
        aa:bb:cc:dd:ee:ff       Nokia mslonik
 
Najważniejszą informacją jest uzyskany adres urządzenia zewnętrznego w postaci ciągu wartości heksadecymalnych. Warto od razu wkleić go sobie do schowka (zapamiętać).
 
5. Zestawiamy połączenie pomiędzy komputerem, a urządzeniem zewnętrznym. W konsoli wydajemy polecenie:

maciej@gucek4:~$ sudo hcitool cc aa:bb:cc:dd:ee:ff
 
W tym momencie w okolicach ikony bluetooth symbolizującej pracę aplikacji  KBluetooth powinien się pojawić 'dymek' z napisem 'Connected to (...) 'adres'' z nazwą i adresem wykrytego urządzenia zewnętrznego.
 
6. Następny krok to autoryzacja, czyli parowanie urządzeń: komputera oraz urządzenia zewnętrznego (telefonu). W konsoli wydajemy polecenie:
 
maciej@gucek4:~$ sudo hcitool auth aa:bb:cc:dd:ee:ff
 
Prawdopodobnie dostaniemy odpowiedź:
 
Not connected.
 
Przyczyną jest zbyt długi czas, jaki upłynął od wydania poprzedniego polecenia (krok 4). Wobec tego warto połączyć polecenia z kroku 5 i 6:
 
7. Łączymy polecenia  zestawiające połączenie i autoryzujące połączenie:
 
maciej@gucek4:~$ sudo hcitool cc 00:60:57:15:74:FB && sudo hcitool auth 00:60:57:15:74:FB
 
W odpowiedzi wyskakuje okienko umożliwiające wprowadzenie nr PIN. Należy wpisać ten sam PIN, który widnieje w pliku konfiguracyjnym /etc/bluetooth/hcid.conf.
 
7a. Jak sprawdzić, jaki pin widnieje w pliku konfiguracyjnym  /etc/bluetooth/hcid.con?
 
W konsoli wpisujemy:
maciej@gucek4:~$ cat /etc/bluetooth/hcid.conf | grep passkey
        passkey "abcd";
 
7b. W odpowiedzi na wpisane polecenie otrzymałem następujący komunikat:
 
HCI authentication request failed: Connection timed out
 
Przecież wszystko wpisałem prawidłowo. Dopiero po dłuższym czasie mnie olśniło, że przyczyna takiego zachowania może leżeć po stronie konfiguracji adaptera bluetooth:
a. Do doraźnej konfiguracji adaptera bluetooth służy polecenie hciconfig.
b. Do doraźnej konfiguracji urządzeń zewnętrznych służy polecenie hcitool.
c. Do konfiguracji obu urządzeń służy plik konfiugracyjny /etc/bluetooth/hcid.con
 

8. Rekonfigurujemy adapter bluetooth. W konsoli wykonujemy następujące polecenie:
 
maciej@gucek4:~$ sudo hciconfig hci0 auth
 
9. Sprawdzamy, czy wydanie powyższego polecenia przyniosło oczekiwane zmiany:
 
maciej@gucek4:~$ hciconfig hci0
hci0:   Type: USB
        BD Address: aa:bb:cc:dd:ee:ff ACL MTU: 1017:8 SCO MTU: 64:8
        UP RUNNING PSCAN AUTH
        RX bytes:975 acl:0 sco:0 events:28 errors:0
        TX bytes:609 acl:0 sco:0 commands:28 errors:0
 
Widzimy, że w wierszu z funkcjami (?) przybyła nam funkcja AUTH (por. 1a). O to chodziło!
 
10. Ponownie wykonujemy krok 7.
 
W efekcie ponownie wyskakuje okienko z pytaniem o PIN, który wprowadzamy. Tym razem jednak również urządzenie zewnętrzne wymaga autoryzacji. W przypadku Nokii 6310i zgadzamy się na autoryzację połączenia z urządzeniem, które przedstawia się jako 'gucek4-0' (por. 1b) i wpisujemy ten sam numer pin, który przed chwilą wpisaliśmy w okienku.
 
Zrobione!
 
Uwaga! W przypadku telefonu 'Nokia 6310i' nastąpi błyskawiczne rozłączenie komunikacji, o czym zostaniemy poinformowani stosownym komunikatem widocznym na ekranie telefonu. Nie należy się tym przejmować.
 
O wynikach udanego sparowania możemy się przekonać:
 
a. W przypadku komputera poprzez kliknięcie prawym przyciskiem myszy na ikonie bluetooth. Wybieramy Konfiguracja -> Paired / Trusted devices... W okienku powinno figurować nowo sparowane urządzenie.
 
b. W przypadku urządzenia zewnętrznego czasami gdzieś w ustawieniach wyświetlana jest lista urządzeń sparowanych (uwierzytelnionych).
 
Np. w przypadku telefonu 'Nokia 6310i': 
Menu -> Bluetooth -> Pokaż listę urządzeń uwierzytelnionych:
gucek4-0 
 
Kilka uwag:
 
Myślałem, że ustawienia adaptera mogą zostać zmienione na stałe tak, by parowanie (autoryzacja) wszystkich dołączanych urządzeń przebiegła prawidłowo bez konieczności każdorazowego włączania opji 'auth' w adapterze. Za konfigurację demona stosu bluetooth odpowiada plik /etc/bluetooth/hcid.con. Możliwości zmian w konfiguracji tego pliku zostały opisane w manualu:
 
maciej@gucek4:~$ man hcid.conf
 
Niestety nie przewidziano opcji, która na stałe ustawiałaby parowanie (autoryzację). By osiągnąć na stałe pożądane uustawienie trzeba się uciec do innych 'sztuczek', ale to temat na osobny artykuł.
 
Zachęcam do eksperymentów z ustawieniami adaptera blueetoth. Podstawowe informacje można znaleźć w manualu:
 
maciej@gucek4:~$ man hciconfig
 
Lub w skrócie:
 
maciej@gucek4:~$ hciconfig --help 
 
Podobnie, ustawienia urządzenia zewnętrznego można zmienić za pomocą opcji polecenia hcitool:
 
maciej@gucek4:~$ man hcitool
 
Lub w skrócie:
 
maciej@gucek4:~$ hcitool --help 
 
Pomimo że do wykrywania urządzeń posłużyły nam polecenia wydawane z poziomu konsoli, do prawidłowej autoryzacji urządzeń konieczne było działanie w środowisku KDE aplikacji KBluetooth.

Komentowanie za pomocą rozszerzenia JComments zostało wyłączone. Zapraszam do dodawania komentarzy za pomocą aplikacji Disqus.