Bluetooth jest przemysłową specyfikacją, która umożliwia użytkownikom łączenie i wymianę informacji pomiędzy urządzeniami takimi jak komputery osobiste, PDA i telefony komórkowe. Używając tej technologii użytkownik może osiągnąć bezprzewodowy dźwięk i transmisję danych pomiędzy dwoma urządzeniami, nie wydając ogromnych sum pieniędzy. Bluetooth oferuje również możliwość stworzenia małych bezprzewodowych sieci LAN oraz pozwala na synchronizację urządzeń.
W pierwszej części tego przewodnika opisano sposób identyfikacji urządzeń, które wspierają technologię Bluetooth. Dzięki temu użytkownik może zamówić urządzenie Bluetooth, które będzie działało poprawnie. W części tej wytłumaczono również w jaki sposób skonfigurować jądro systemu, zidentyfikować urządzenia Bluetooth zainstalowane w komputerze i wykryte przez jądro oraz zainstalować podstawowe narzędzia Bluetooth.
W drugiej części opisano jak wykrywać zdalne urządzenia i w jaki sposób uaktywnić połączenie do lub z nich poprzez ustawienie częstotliwości komunikacji radiowej lub ustawienie sieci prywatnej (PAN).
W ostatniej części znajduje się szczegółowa lista aplikacji, które pomogą skorzystać z wszystkich możliwości oferowanych przez technologię Bluetooth.
Urządzenia uznane za wspierane i niewspierane Bluetooth
Ważne: Urządzenia te mogą działać nawet wtedy, gdy nie są uznane za takie, które działają poprawnie. Gentoo nie zapewnia żadnego wsparcia dla tego typu urządzeń. |
Listę aktualnie wspieranych urządzeń można znaleźć na stronie Marcela Holtmanna: Funkcje urządzeń Bluetooth oraz informacje na temat wersji.
Jako, że ostatnim stabilnym jądrem Linuksa jest jądro serii 2.6, konfigurację przeprowadzimy używając tej serii. Większość urządzeń Bluetooth podłączamy do portu USB, zatem USB należy również uaktywnić. Prosimy zapoznać się z przewodnikiem Konfiguracja urządzeń USB w Gentoo Linux.
Listing 3.1: Konfiguracja jądra serii 2.6 |
Networking ---> <*> Bluetooth subsystem support ---> --- Bluetooth subsystem support <M> L2CAP protocol support <M> SCO links support <M> RFCOMM protocol support [*] RFCOMM TTY support <M> BNEP protocol support [*] Multicast filter support [*] Protocol filter support <M> HIDP protocol support Bluetooth device drivers ---> <M> HCI USB driver [*] SCO (voice) support <M> HCI UART driver [*] UART (H4) protocol support [*] BCSP protocol support [*] Transmit CRC with every BCSP packet <M> HCI BCM203x USB driver <M> HCI BPA10x USB driver <M> HCI BlueFRITZ! USB driver (Poniższe cztery sterowniki są stworzone dla urządzeń Bluetooth komunikujących się przez złącze PCMCIA i pojawią się one tylko w wypadku gdy jest wybrane wsparcie dla PCMCIA w jądrze) <M> HCI DTL1 (PC Card) driver <M> HCI BT3C (PC Card) driver <M> HCI BlueCard (PC Card) driver <M> HCI UART (PC Card) device driver (Poniższy sterownik przeznaczony jest dla programu HCI Emulation) <M> HCI VHCI (Virtual HCI device) driver (Należy cofnąć się trzy poziom do góry, do sekcji Device Drivers i sprawdzić czy wsparcie dla USB jest uaktywnione. Jest to wymagane w przypadku kiedy używamy nadajnika Bluetooth, w postaci klucza USB). USB support ---> <*> Support for Host-side USB --- USB Host Controller Drivers <M> EHCI HCD (USB 2.0) support [ ] Full speed ISO transactions (EXPERIMENTAL) [ ] Root Hub Transaction Translators (EXPERIMENTAL) <*> OHCI HCD support <*> UHCI HCD (most Intel and VIA) support < > SL811HS HCD support |
Należy uruchomić ponownie komputer wykorzystując nowe jądro. Jeżeli wszystko poszło dobrze, nasz system będzie gotowy do współpracy z urządzeniami Bluetooth.
Ważne: Urządzenie USB może posiadać dwa tryby, a domyślnym będzie nie HCI, a HDI. W tym wypadku należy użyć polecenia hid2hci, aby przełączyć urządzenie do trybu HCI. System zapamięta te ustawienia przy następnym ponownym uruchomieniu. |
Listing 3.2: Sprawdzanie urządzeń Bluetooth |
(Jeden ze sposobów sprawdzenia urządzeń) # cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1 (Wpis Cls=e0(unk. ) identyfikuje urządzenie Bluetooth). T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=0a12 ProdID=0001 Rev= 5.25 (Niektóre można wykryć przy pomocy lsusb z pakietu sys-apps/usbutils) # lsusb Bus 003 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse Bus 003 Device 001: ID 0000:0000 Bus 002 Device 002: ID 0db0:1967 Micro Star International Bluetooth Dongle |
Kiedy już urządzenie jest wykrywane przez jądro, potrzebujemy warstwy, która pozwoli aplikacjom na komunikację z urządzeniem Bluetooth. BlueZ jest oficjalnym stosem Bluetooth Linuksa. Potrzebujemy dwóch pakietów, bluez-libs i bluez-utils. Urządzenia potrzebujące oprogramowania firmware Broadcom lub podobnego mogą wymagać pakietu bluez-firmware.
Listing 4.1: Instalacja bluez-libs i bluez-utils |
# emerge net-wireless/bluez-libs net-wireless/bluez-utils
|
Konfiguracja BlueZ i łączenie w pary PIN-ów
Pora na sprawdzenie czy system poprawnie uruchamia urządzenia Bluetooth. Należy najpierw uruchomić potrzebne usługi Bluetooth.
Listing 4.2: Uruchamianie hciconfig |
(Uruchamianie Bluetooth) # /etc/init.d/bluetooth start * Starting Bluetooth ... * Starting hcid ... [ ok ] * Starting sdpd ... [ ok ] * Starting rfcomm ... [ ok ] # hciconfig hci0: Type: USB BD Address: 00:01:02:03:04:05 ACL MTU: 192:8 SCO MTU: 64:8 DOWN RX bytes:131 acl:0 sco:0 events:18 errors:0 TX bytes:565 acl:0 sco:0 commands:17 errors:0 |
Pokazuje to, że urządzenie Bluetooth zostało rozpoznane. Jak możemy zauważyć urządzenie jest wyłączone (DOWN). Należy je skonfigurować tak, aby uruchamiało się włączone. Plik konfiguracyjny znajduje się w /etc/bluetooth/hcid.conf. Wymagane zmiany, które należy wprowadzić pokazane są poniżej. Dodatkowych szczegółów można szukać w manualu wydając komendę man hcid.conf.
Listing 4.3: Edycja /etc/bluetooth/hcid.conf |
(Wymagane zmiany pokazane są poniżej) # HCId options options { # Automatically initialize new devices autoinit yes; (Należy zmienić zabezpieczenie na tryb "auto") # Security Manager mode # none - Security manager disabled # auto - Use local PIN for incoming connections # user - Always ask user for a PIN # security auto; # Pairing mode pairing multi; (Pin_helper jest wymagany tylko dla <=bluez-libs-2.x oraz <=bluez-utils-2.x) (Należy zmienić zmienną pin_helper na wartość /etc/bluetooth/pin-helper) # PIN helper pin_helper /etc/bluetooth/pin-helper; } # Default settings for HCI devices device { (Należy ustawić nazwę urządzenia. Można je nazwać jak chcemy) # Local device name # %d - device id # %h - host name name "BlueZ at %h (%d)"; # Local device class class 0x3e0100; # Inquiry and Page scan iscan enable; pscan enable; # Default link mode lm accept; # Default link policy lp rswitch,hold,sniff,park; (Jeżeli nie wiemy do czego służą poniższe zmienne nie należy ich zmieniać) # Authentication and Encryption (Security Mode 3) #auth enable; #encrypt enable; } |
Następnie należy skonfigurować PIN urządzenia Bluetooth. Pomoże nam to przy łączeniu w parę tego urządzenia z innym.
Listing 4.4: Edycja /etc/bluetooth/pin |
(Należy zmienić wpis 123456 na wybrany przez nas numer pin)
123456
|
Ważne: Numer ten (wybrany przez nas) musi być taki sam we wszystkich hostach z urządzeniami Bluetooth tak, aby można było je połączyć w pary. Należy również pamiętać, aby numer ten trzymać w tajemnicy, gdyż teoretycznie każda osoba znająca go będzie mogła ustanowić połączenie z naszym urządzeniem. |
Uwaga: Jeżeli używamy <=bluez-libs-2.x oraz <=bluez-utils-2.x, możemy wybierać spośród różnych pomocników pin, zależnie od tego, którego chcemy używać. Dostępnymi pomocnikami pin są między innymi: /usr/lib/kdebluetooth/kbluepin (net-wireless/kdebluetooth), /usr/bin/bluepin lub /etc/bluetooth/pin-helper. |
Uwaga: Od wersji >=bluez-libs-3.x i >=bluez-utils-3.x pomocnicy pin zostali zastąpieni przez programy do zarządzania kluczami. Istnieje kilka graficznych programów tego typu, które pomogą nam w zarządzaniu numerem PIN. Są to na przykład bluez-gnome oraz kdebluetooth. Możemy również korzystać z passkey-agent (można go znaleźć w bluez-utils) w linii poleceń. |
Kiedy już pomyślnie zakończymy konfigurację BlueZ, należy uruchomić ponownie potrzebne usługi.
Listing 4.5: Uruchamianie demonów Bluetooth |
# /etc/init.d/bluetooth restart (Można dodać go do domyślnego poziomu uruchomieniowego) # rc-update add bluetooth default * bluetooth added to runlevel default * rc-update complete. |
Należy się upewnić czy demony Bluetooth zostały uruchomione w poprawny sposób. Jeżeli widzimy, że zarówno hcid i sdpd są uruchomione i działają, znaczy to, że Bluetooth jest dobrze skonfigurowany. Po tym możemy zobaczyć czy urządzenia działają ze skonfigurowanymi przez nas opcjami.
Listing 4.6: Sprawdzanie czy demony Bluetooth uruchomiły się poprawnie |
(Należy sprawdzić czy serwisy działają) # ps -ae | grep hcid 26050 ? 00:00:00 hcid # ps -ae | grep sdpd 26054 ? 00:00:00 sdpd # hciconfig -a hci0: Type: USB BD Address: 00:0A:0B:0C:0D:0E ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:125 acl:0 sco:0 events:17 errors:0 TX bytes:565 acl:0 sco:0 commands:17 errors:0 Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'BlueZ at bluehat (0)' Class: 0x3e0100 Service Classes: Networking, Rendering, Capturing, Object Transfer, Audio Device Class: Computer, Uncategorized HCI Ver: 1.1 (0x1) HCI Rev: 0x1e7 LMP Ver: 1.1 (0x1) LMP Subver: 0x1e7 Manufacturer: Cambridge Silicon Radio (10) |
5. Wykrywanie i łączenie do zdalnego urządzenia
Wykrywanie urządzeń Bluetooth na innych hostach
W tym momencie jesteśmy gotowi, aby wykryć urządzenia Bluetooth zainstalowane na innych komputerach. Jest to niezależne od hosta systemu operacyjnego. Użyjemy polecenia hcitool do tego celu.
Listing 5.1: Sprawdzanie lokalnych urządzeń |
# hcitool dev
Devices:
hci0 00:01:02:03:04:05
|
Listing 5.2: Skanowanie zdalnych urządzeń |
# hcitool scan
Scanning ...
00:0A:0B:0C:0D:0E Grayhat
|
Listing 5.3: Dociekanie zdalnych urządzeń |
# hcitool inq
Inquiring ...
00:0A:0B:0C:0D:0E clock offset: 0x5579 class: 0x72010c
|
Kiedy już znamy adres MAC zdalnego urządzenia Bluetooth, możemy sprawdzić czy oba urządzenia zostały poprawnie połączone w parę.
Listing 5.4: Uruchamianie l2ping |
# l2ping 00:0A:0B:0C:0D:0E
Ping: 00:0A:0B:0C:0D:0E from 00:01:02:03:04:05 (data size 20) ...
20 bytes from 00:0A:0B:0C:0D:0E id 200 time 69.85ms
20 bytes from 00:0A:0B:0C:0D:0E id 201 time 9.97ms
20 bytes from 00:0A:0B:0C:0D:0E id 202 time 56.86ms
20 bytes from 00:0A:0B:0C:0D:0E id 203 time 39.92ms
4 sent, 4 received, 0% loss
|
Ustawianie częstotliwości komunikacji (RFCOMM)
Uwaga: Ustawianie częstotliwości komunikacji radiowej jest krokiem opcjonalnym. |
Możemy nawiązać połączenie w częstotliwości radiowej do innego urządzenia, używając polecenia rfcomm. Aby ułatwić zadanie użytkownikom, szczególnie tym, którzy posiadają kilka urządzeń wspierających Bluetooth, wskazane będzie zmodyfikowanie domyślnej konfiguracji rfcomm znajdującej się w pliku /etc/bluetooth/rfcomm.conf.
Cały fragment konfiguracji zaczynający się od rfcomm0 {, a kończący na }, jest konfiguracją urządzenia, które ustanowi połączenie w /dev/rfcomm0. W tym przypadku pokażemy tylko jeden przykład, rfcomm0. Nic jednak nie stoi na przeszkodzie, aby dodać więcej urządzeń.
Listing 5.5: Edycja pliku /etc/bluetooth/rfcomm.conf |
(Pokazano jedynie zmiany, które mogą okazać się potrzebne) rfcomm0 { # Automatically bind the device at startup (Tworzymy węzeł urządzenia, /dev/rfcomm0 na początku) bind yes; # Bluetooth address of the device (Należy wpisać adres urządzenia do, którego chcemy się łączyć) device 00:0A:0B:0C:0D:0E; } |
Po konfiguracji RFCOMM, możemy połączyć się z każdym urządzeniem. Od kiedy ustawiliśmy odpowiednie opcje w pliku /etc/bluetooth/rfcomm.conf musimy jedynie wydać poniższe polecenia. W przypadku gdy nie poczyniliśmy odpowiednich zmian w pliku konfiguracyjnym, pokazano również alternatywną metodę w code listingu.
Listing 5.6: Ustanawianie połączenia RFCOMM |
(0 odnosi się do wpisu rfcomm0 w pliku konfiguracyjnym) # rfcomm connect 0 Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1 Press CTRL-C for hangup (Jeżeli nie edytowaliśmy pliku /etc/bluetooth/rfcomm.conf) # rfcomm connect 0 00:0A:0B:0C:0D:0E 1 Connected /dev/rfcomm0 to 00:0F:DE:69:50:24 on channel 1 Press CTRL-C for hangup |
Pierwszy parametrem po komendzie wywołującej połączenie jest węzeł urządzenia TTY RFCOMM, który zostanie użyty (zazwyczaj 0). Drugim parametrem jest adres MAC zdalnego urządzenia. Trzeci parametr jest opcjonalny i określa kanał, który ma być używany. Należy zauważyć, że aby połączyć się z danym urządzeniem, to urządzenie musi oczekiwać na przychodzące połączenia. Aby przerwać połączenie wystarczy wcisnąć kombinację klawiszy CTRL+C.
Listing 5.7: Nasłuchiwanie przychodzących połączeń RFCOMM |
# rfcomm listen 0 1
Waiting for connection on channel 1
|
W podobny sposób jak komenda połączenia, można podawać parametry przy komendzie odbioru. Pierwsza określa węzeł urządzenia RFCOMM (zazwyczaj 0), które zostanie użyte do akceptacji połączenia. Natomiast drugi parametr określa kanał, który będzie użyty.
Za każdym razem gdy wywołujemy komendę rfcomm, można również określić fizyczne urządzenie, którego chcemy używać. Poniżej można zobaczyć na przykładzie dwóch powyższych komend wybór fizycznego urządzenia.
Listing 5.8: Wybór fizycznego urządzenia do połączenia RFCOMM |
# rfcomm -i hci0 listen 0 1 Waiting for connection on channel 1 (Nasłuchiwanie określonego urządzenia) # rfcomm -i hci0 connect 0 00:0A:0B:0C:0D:0E 1 (Używanie określonego urządzenia do połączenia się z innym) |
Ustawianie sieci prywatnej (Personal Area Network)
Uwaga: Należy mieć na uwadze, że ustawianie sieci prywatnej (PAN) jest krokiem opcjonalnym. W rozdziale tym opisano jak podłączyć się do sieciowego punktu dostępowego, choć ustawianie grupy sieci typu Ad-Hoc przebiega w podobny sposób. |
Należy załadować moduł bnep. Prawdopodobnie też będziemy chcieli, aby ładował się on przy każdym uruchomieniu komputera.
Listing 5.9: Ładowanie modułu bnep |
# modprobe bnep # echo "bnep" >> /etc/modules.autoload.d/kernel-2.6 |
Należy uruchomić demona pand na hoście, który dostarczy nam NAP-a. Musimy uściślić czy chcemy serwis NAP-a. Host ten będzie komputerem głównym (master) podczas gdy inne, podłączające się do niego, będą podrzędnymi (slave). Innym możliwym serwisem jest GN (sieć grupowa typu ad-hoc).
Listing 5.10: Uruchamianie demona pand |
# pand --listen --role NAP --master --autozap
|
Po wykonaniu powyższych czynności będziemy posiadać nasłuchującego hosta, a więc reszta komputerów będzie musiała jedynie się z nim połączyć.
Listing 5.11: Łączenie do sieciowego punktu dostępowego |
# pand --connect 00:0A:0B:0C:0D:0E --service NAP --autozap
|
Jeżeli wszystko poszło dobrze możemy skonfigurować adresy IP naszego hosta.
Listing 5.12: Konfiguracja adresów IP modułu bnep |
host0 # ifconfig bnep0 192.168.2.1 host1 # ifconfig bnep0 192.168.2.2 host0 # ifconfig bnep0 bnep0 Link encap:Ethernet HWaddr 00:0A:0B:0C:0D:0E inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::210:60ff:fea3:cb41/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:5 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:208 (208.0 b) TX bytes:188 (188.0 b) host1 # ifconfig bnep0 bnep0 Link encap:Ethernet HWaddr 00:01:02:03:04:05 inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::210:60ff:fea2:dd2a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:5 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:208 (208.0 b) TX bytes:188 (188.0 b) |
Na koniec można przeprowadzić test i sprawdzić czy sieć działa poprawnie.
Listing 5.13: Ping IP pomiędzy interfejsami bnep |
host1 # ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=34.0 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=37.3 ms
--- 192.168.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 34.045/35.690/37.336/1.656 ms
|
6. Aplikacje do codziennej pracy z Bluetooth
Istnieje dość sporo aplikacji do codziennej pracy z Bluetooth. Rozdział ten został podzielony na trzy części, pierwsza przeznaczona na opis aplikacji dla Gnome, druga dla KDE, a ostatnia na temat różnorodnych aplikacji.
Jeżeli jesteśmy użytkownikami środowiska Gnome, najprawdopodobniej będziemy używać gnome-bluetooth. Posiada on najbardziej podstawowe i najbardziej funkcjonalne opcję, takie jak podano poniżej.
Listing 6.1: Instalacjag gnome-bluetooth |
# emerge gnome-bluetooth
|
Do menu w sekcji Aplikacje > Narzędzia systemowe zostaną dodane wpisy, dzięki którym można będzie w łatwy sposób uruchomić menedżera lub udostępnianie plików do transferu danych pomiędzy dwoma urządzeniami.
Aby przesyłać pliki (prosty sposób):
gnome-phone-manager jest świetną aplikacją, którą możemy używać do wysyłanie i czytania wiadomości tekstowych SMS, używając wyłącznie systemu. Nie musimy nawet dotykać telefonu, gdyż czytanie czy wysyłanie wiadomości realizowane jest przez samą aplikację. Możemy być również powiadamiani o nowej wiadomości na ekranie, jeśli ta opcja jest uaktywniona w ustawieniach. instalacja samego programu jest prosta jak zawsze.
Listing 6.2: Instalacja gnome-phone-manager |
# emerge gnome-phone-manager
|
KDE korzysta z kdebluetooth, który jest dostarczany z większą ilością programów niż jego odpowiednik w Gnome.
Listing 6.3: Instalacja kdebluetooth |
# emerge kdebluetooth
|
Specjalne podziękowania dla Marcela Holtmanna za jego czas i oddanie przy pracy nad Bluetooth i za recenzję tego przewodnika. Duże podziękowania należą się także Douglasowi Russellowi za wykonanie dodatkowych testów sprzętowych oraz za poprawki do tego przewodnika.
Materiał udostępniany na podstawie licencji Creative Commons - Attribution / Share Alike.