Bluetooth w Gentoo Linux
1.
Wprowadzenie
Co to jest Bluetooth?
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ń.
O zawartości tego przewodnika
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.
2.
Obsługiwane urządzenia
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.
3.
Konfiguracja systemu
konfiguracja jądra
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
<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
<M> HCI VHCI (Virtual HCI device) driver
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 |
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
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
# 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
|
4.
BlueZ - Stos Bluetooth
Instalacja BlueZ
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 |
# /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 |
# HCId options
options {
# Automatically initialize new devices
autoinit yes;
# 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
pin_helper /etc/bluetooth/pin-helper;
}
# Default settings for HCI devices
device {
# 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;
# 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 |
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ń.
|
Konfiguracja usług
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
# 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 |
# 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 |
rfcomm0 {
# Automatically bind the device at startup
bind yes;
# Bluetooth address of the device
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 |
# rfcomm connect 0
Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1
Press CTRL-C for hangup
# 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
# rfcomm -i hci0 connect 0 00:0A:0B:0C:0D:0E 1
|
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
Wprowadzenie
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.
Gnome
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.
-
gnome-bluetooth-manager: Do zarządzania zdalnymi urządzeniami
Bluetooth.
-
gnome-obex-send: Do wysyłania plików na inne urządzenia.
-
gnome-obex-server: Do odbioru plików.
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):
-
Z telefonu do komputera, należy wysłać plik przy pomocy Bluetooth z
telefonu, a zostanie on odebrany i będzie zawsze zapisywany w katalogu
/home.
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
KDE korzysta z kdebluetooth, który jest dostarczany z większą ilością
programów niż jego odpowiednik w Gnome.
-
kbluetoothd: Meta serwer Bluetooth
-
kbtsearch: Narzędzie do wyszukiwania urządzeń/serwisów Bluetooth
-
khciconfig: Monitor KDE Bluetooth
-
kioclient: Klient lini poleceń KIO
-
qobexclient: Zestaw narzędzi dla testowania obex
-
kbtobexclient: Aplikacja struktury Bluetooth KDE
- kioobex_start
- kbtserialchat
-
kbemusedsrv: Serwer Bemused KDE
-
kbtobexsrv: Ofensywny serwer OBEX KDE dla Bluetooth
-
kbluepin: Aplikacja KDE KPart
-
auth-helper: Program pomocniczy dla kbtobexsrv, który wysyła prośbę
o autoryzację dla danego linku ACL.
Listing 6.3: Instalacja kdebluetooth |
# emerge kdebluetooth
|
Inne interesujące aplikacje
-
app-mobilephone/obexftp: Transfer plików do telefonów przez OBEX
-
app-mobilephone/bemused: Bemused jest systemem, który pozwala
kontrolować naszą kolekcję muzyki przy pomocy telefonu, używając Bluetooth
-
app-pda/multisync: Multisync pozwala synchronizować kontakty,
kalendarz i notatki między naszym telefonem komórkowym, a komputerem
poprzez połączenie Bluetooth. Posiadam między innymi takie funkcję jak
tworzenie kopii zapasowej i jej późniejsze przywracanie oraz synchronizację
z klientem poczty elektronicznej Evolution. Należy ustawić flagę USE
irmc dla multisync, aby mieć pewność, że posiada wsparcie dla
Bluetooth.
-
net-wireless/opd oraz net-wireless/ussp-push to programy
(serwer i klient), które pozwalają na przesyłanie plików do pamięci
telefonu komórkowego.
7.
Podziękowania
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.
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|