Naštěstí byl už dávno opuštěn starý systém přidávání nových vlastností BlueZ projektu do jádra a nyní tedy máme klasicky dvě možnosti.
- stáhnout poslední verzi jádra – doporučuji 2.4.21-rc2, jelikož ve starších jádrech se vyskytuje velice nepříjemná race condition
- použít -mh patche na současné stabilní jádro 2.4.20, 2.4.19 a 2.4.18 z adresy www.holtmann.org/linux/kernel
Kdo má starší jádro, měl by urychleně přejít na nové nebo patchnout to současné, jelikož ve všech jádrech od 2.2.0 do 2.4.21-pre5 včetně je race condition, kterou lze lokálně zneužít a získat práva roota.
Poté, co jsme patchli naše současné jádro nebo rozbalili nové – uvádět zde postup nemá smysl, jelikož jej snad už každý z mých předchozích článků zná – přistoupíme k jeho konfiguraci a zapneme Bluetooth podporu:
<M> 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
Bluetooth device drivers --->
<M> HCI USB driver
[*] SCO (voice) support
[ ] USB zero packet support
< > HCI UART driver
< > HCI VHCI (Virtual HCI device) driver
Jaký modul používá váš hardware a jestli vůbec je schopen pod Linuxem fungovat, zjistíte na této stránce: www.holtmann.org/linux/bluetooth/devices.html
Podle ní příslušně upravte sekci drivers. Osobně doporučuji používat USB dongles, už z toho důvodu, že dnes stojí i s daní 1000 korun a navíc fungují bez problémů.
Nyní upravíme soubor /etc/modules.conf
a přidáme autoloading příslušných modulů:
#modrozub
alias net-pf-31 bluez
alias bt-proto-0 l2cap
alias bt-proto-2 sco
alias bt-proto-4 bnep
alias tty-ldisc-15 hci_uart
alias char-major-10-250 hci_vhci
alias bt-proto-3 rfcomm
Nyní přeložíme poslední verze utilit ze stránky: bluez.sourceforge.net/download/download.htmla stáhneme a přeložíme tyto soubory:
bluez-libs-2.4.tar.gz
bluez-utils-2.3.tar.gz
bluez-sdp-1.1.tar.gz
bluez-pan-1.1.tar.gz
bluez-hcidump-1.5.tar.gz
bluez-bluefw-0.9.tar.gz
Při kompilování postupujeme od bluez-libs k bluez-bluefw přesně tak, jak jsou soubory uvedeny pod sebou.
Po nainstalování nám vznikne adresář /etc/bluetooth
, ve kterém se nacházejí soubory potřebné ke správné funkci bluetooth pod Linuxem. Nezbývá nám tedy nic jiného, než se v nich trochu „povrtat“ :)
Ze všeho nejdříve ovšem musíme „nahodit“ Bluetooth zařízení, aby o nich jádro vědělo:
modprobe hci_usb; #popřípadě jiný driver v závislosti na vašem železe
hciconfig hciX up; #hci0 - prvni dongle, hci1 - druha dongle...
Nyní zeditujeme soubor /etc/bluetooth/pin
a nastavíme párovací heslo. Doporučuji nastavit nějakou číselnou kombinaci, jelikož v případě párování s mobilním telefonem nebudeme mít možnost zadat písmena.
Poté nastavíme soubor /etc/bluetooth/hcid.conf
Mně se nejvíce osvědčila tato kombinace:
# # HCI daemon configuration file. # # $Id: hcid.conf,v 1.3 2002/07/18 18:12:46 maxk Exp $ # # 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 # none - Pairing disabled # multi - Allow pairing with already paired devices # once - Pair once and deny successive attempts pairing multi; # PIN helper pin_helper /bin/bluepin; } # Default settings for HCI devices device { # Local device name # %d - device id # %h - host name #name "BlueZ (%d)"; name "Linux"; # Local device class class 0x100; # Default packet type pkt_type DH1,DM1,HV1; # Inquiry and Page scan iscan enable; pscan enable; # Default link mode # none - no specific policy # accept - always accept incoming connections # master - become master on incoming connections, # deny role switch on outgoing connections # #lm accept,master; # lm accept,master; # Default link policy # none - no specific policy # rswitch - allow role switch # hold - allow hold mode # sniff - allow sniff mode # park - allow park mode # #lp hold,sniff; # lp hold,sniff,park,rswitch; # Authentication and Encryption auth enable; encrypt enable; }
Poté můžeme pustit démona starajícího se o ověřování hesel – hcid takto:
hcid -f /etc/bluetooth/hcid.conf
Dalším krokem je vyeditování souboru /etc/bluetooth/rfcomm.conf
– zde je největší změna. Již se oproti minulosti nepoužívá démon rfcommd, projekt BlueZ přešel na jaderný modul rfcomm.
# # RFCOMM configuration file. # # $Id: rfcomm.conf,v 1.1 2002/10/07 05:58:18 maxk Exp $ # rfcomm0 { # Automatically bind the device at startup bind yes; # Bluetooth address of the device device 00:11:22:33:44:55; # RFCOMM channel for the connection channel 1; # Description of the connection comment ""; }
device označuje MAC adresu zařízení, ke kterému se chcete připojit, kanál s danou námi využívanou službou na daném zařízení a rfcomm0 označuje zařízení v /dev/, v tomto případě /dev/rfcomm0. Těchto sekcí si v souboru vyrobíme příslušný počet.
Následuje vytvoření příslušných devices v /dev/, o které se postará tento jednoduchý skript:
I=0 while [ "$I" -lt 256 ]; do if [ ! -c /dev/rfcomm"$I" ]; then mknod -m 666 /dev/rfcomm"$I" c 216 "$I" fi I=`expr "$I" + 1` done
Jestliže máte vhci zařízení, vyrobíte jej takto:
mknod /dev/vhci c 10 250; chmod 644 /dev/vhci
S nastavením systému jsme hotovi a můžeme začít Bluetooth rutinně používat :)
Nejsnazší cestou je asi použití příkazu rfcomm bind all
a poté již jen používat daná zařízení ve všech skriptech, kde chceme, jednoduchým přidáním /dev/rfcomm0 na místa, kam bychom jinak psali /dev/ttyS0 nebo /dev/ircomm0.
Rfcomm můžeme obsluhovat i ručně, uvedu zde nejčastěji používané příkazy:
rfcomm bind device MAC kanal
– spojení jádra a daného zařízení/kanálurfcomm release device
– uvolnění jádra od daného zařízenírfcomm connect device kanal
– rovnou se k zařízení připoj a nečekej na inicializaci
Z dalších příkazů se mohou například hodit:
hcitool scan
– vyhledá MAC adresy zařízení v dosahu a určí jejich nickname – zařízení musí být v módu zjistitelnýhcitool inq
– zjistí pouze MAC adresy a doplňkové informacehcitool dev
– uvede seznam všech adaptérů v počítačihcitool info MAC
– zjistí informace o zařízeníhcitool cc MAC
– připojí se k danému zařízeníhcitool dc MAC
– odpojí se od daného zařízeníhcitool lq MAC
– určí kvalitu linky vedoucí k danému zařízení! (dodáno na mé přání :-) )hciconfig hciX features
– řekne, které vlastnosti vaše zařízení podporujehciconfig hciX revision
– sdělí vám, zda jste šťastným uživatelem dongle s podporou kolika připojených zařízení v režimu slave/master – daný firmware porovnejte s touto stránkou a dostanete výsledek:
www.holtmann.org/linux/bluetooth/csr.html
Bluez v dnešní době umí i komunikovat s Bluetooth bondovkami, využívat výhod PAN a SDP. Bohužel ani jedno z těchto dalších potřebných zařízení nevlastním, takže je nemohu vyzkoušet. Zde je prostor pro prodejce těchto zařízení k jejich zapůjčení a za drobnou reklamu napsání další části seriálu. Takže co bych potřeboval? Ještě alespoň dva USB nebo PCMCIA Bluetooth adaptéry a Bluetooth bondovku.
Asi mne nenapadá nic, co bych dodal, takže užívejte, modrejte a popřípadě se ptejte v diskusi pod článkem :-)