Ubuntu Bluetooth - Część V

Dzisiaj zrobimy coś kreatywnego. Użyjemy Bluetooth do połączenia naszego peceta z Internetem przez telefon wyposażony w technologię Bluetooth. Najpierw przydatny wstępniak, w którym postaram się rozłożyć na części pierwsze wszelkie fachowe skróty, określenia i co najważniejsze, możliwe do uzyskania prędkości.

W obecnie dostępnych telefonach mamy dostęp do kilku generacji standardów transmisji pakietowej (umyślnie pomijam CSD i HSCSD, to przeżytek). Najbardziej popularne jest 2.5G, czyli GPRS. W praktyce, mając wysokiej (>=10) klasy modem w telefonie można uzyskać prędkość pobierania rzędu 56kbit/s (teoretycznie, przy korzystnej konfiguracji sieci nawet 80kbit/s), a więc tyle samo ile oferują modemy. Niestety jest to rozwiązanie gorsze od modemu, ze względu na straszliwe opóźnienia, sięgające 700ms do jednej sekundy. Dzieje się tak dlatego, iż połączenie GPRS jest zwykle priorytetowane niżej od rozmów głosowych. Połączenie to nadaje się do rozmów tekstowych i bardzo prostych stron WWW bez grafiki.

Kolejnym standardem jest EDGE (inna nazwa to EGPRS). Zależnie od klasy EDGE technologię tę można określić jako 2.5G (poniżej klasy 4) lub jako 3G (klasa 4 i wyższa). EDGE jest więc sympatycznie określany jako standard 2.75G. Jest to rozwinięcie standardu GPRS, który umożliwia prędkość 236,8kbit/s (teoretycznie przy 8 slotach prędkość ta wzrasta do 473,6kbit/s, ale polscy operatorzy udostępniają 4). Co najważniejsze, opóźnienia są znacznie niższe (choć nadal zauważalne) od tych w GPRS i można już w miarę komfortowo przeglądać strony internetowe, nawet te okraszone lekką grafiką. Obecnie w Polsce wszędzie gdzie mamy zasięg sieci komórkowej mamy dostęp do transmisji EDGE.

Ostatecznie mamy już prawdziwe standardy 3G, czyli UMTS, czasami nazywany 3GSM, aby podkreślić, iż jest to następca zwykłej sieci GSM. Jest on dostępny w Polsce w dużych miastach i umożliwia uzyskanie prędkości pobierania do 384kbit/s lub nawet 3.6mbit/s jeśli telefon obsługuje standard HSDPA (tak, są karty ExpressCard/PCMCIA 7,2mbit/s, a teoretycznie standard obsługuje 14,4mbit/s, ale konia z rzędem temu, kto znajdzie obecnie telefon obsługujący taką przepustowość). Trwają także prace nad HSUPA, który pozwoli na błyskawiczne wysyłanie danych. W każdym razie opóźnienia w tym połączeniu nie przekraczają (przy dobrym zasięgu) 10ms, więc nadaje się do większości domowych zastosowań.

W przyszłości sieć UMTS prawdopodobnie obejmie wszystkie miasta, gdzie będzie to opłacalne (aby usługi typu "wideo na żądanie były możliwe", stacje bazowe muszą być rozmieszczone w odległościach nie większych niż 1-1,5km od siebie, więc nie ma co marzyć o pełnym wachlarzu usług gdzieś na wsi, to się po prostu nie opłaca).

Trzeba teraz jeszcze wziąć pod uwagę ograniczenia prędkości przesyłu danych przez Bluetooth. Standard 1.2 pozwala na transfer w praktyce do 721kbit/s, więc powinno wystarczyć na wszystko oprócz HSDPA. Standard 2.0 EDR pozwala na uzyskanie 2,1mbit/s (teoretycznie 3mbit/s), więc np. w Warszawie stracimy sporą część pasma.

Dopiero wczoraj udało mi się skonstruować połączenie między Ubuntu 7.04 a Nokią E61, więc wreszcie mogę się na ten temat wypowiedzieć z doświadczenia. Zmierzona prędkość bez problemu dobija do maksimum przepustowości (~16KB/s). Jako awaryjne połączenie z Internetem w laptopie w miejscu, gdzie mamy jeszcze zasięg sieci GSM (a więc automatycznie EDGE) sprawdza się znakomicie, zwłaszcza gdy używamy tylko komunikatora tekstowego. Podczas przeglądania stron WWW radzę wyłączyć wyświetlanie obrazków i animacji Flash (dodatki Flashblock oraz ImgLikeOpera w Firefoksie zdają egzamin).

Właściwie wszystkie telefony wyposażone w łącze radiowe Bluetooth obsługują profil Dial-Up Networking, ale warto mimo wszystko sprawdzić dostępność tego profilu, może to nam oszczędzić warstwy szkliwa. I jeszcze jedno, konieczny jest oczywiście prawidłowy profil dostępu do Internetu (nie WAP, to co innego) w telefonie. Wszyscy operatorzy sieci w nowych telefonach umieszczają takie profile w standardzie, a jeśli takiego profilu nie mamy, to można go łatwo zdalnie uzyskać poprzez stronę WWW danego operatora (wystarczy podać swój numer, model telefonu i wybrać profil, a zostanie on wysłany do naszego telefonu).

W zasadzie nie powinienem tego tutaj pisać, ale fakt, iż nie da się obecnie obejść terminala, aby zestawić tego typu połączenie mówi wiele o stanie graficznych narzędzi w Linuksie. Błagam, niech ktoś mnie wyprowadzi z błędu, jeśli faktycznie nie mam racji.

Zainstalujmy najpierw potrzebne pakiety, a następnie zrestartujmy sesję:

tom@srebrny:~$ sudo apt-get install bluetooth bluez-utils bluez-gnome gnome-bluetooth

Ustawiamy telefon w tryb wykrywalny/widoczny (discoverable), i szukamy urządzeń:

tom@srebrny:~$ hcitool scan
Scanning ...
XX:XX:XX:XX:XX:XX Nokia E61

A teraz obejrzyjmy usługi, jakich udziela nam nasz telefon:

tom@srebrny:~$ sdptool browse XX:XX:XX:XX:XX:XX
Browsing XX:XX:XX:XX:XX:XX ...
(...)
Service Name: Dial-Up Networking
Service RecHandle: 0x1000d
Service Class ID List:
"Dialup Networking" (0x1103)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 2
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100

Wszystko w porządku, mamy Dialup Networking na kanale nr 2 (Channel: 2). Teraz należy zakasać rękawy i dobrać się do konfiguracji RFCOMM. Otwórzmy odpowiedni plik do modyfikacji (/etc/bluetooth/rfcomm.conf), dodajmy adres Bluetooth naszego telefonu, kanał oraz opcjonalnie opis połączenia:

tom@srebrny:~$ sudo gedit /etc/bluetooth/rfcomm.conf

Treść tego pliku powinna wyglądać tak (oczywiście adres urządzenia i kanał muszą odpowiadać używanemu telefonowi, a wszelkie znaki # muszą zniknąć):

rfcomm0 {
bind yes;
device XX:XX:XX:XX:XX:XX;
channel 2;
comment "EDGE via Bluetooth";
}

Tak zmodyfikowany plik zapisujemy, następnie uruchamiamy ponownie usługi Bluetooth:

tom@srebrny:~$ sudo /etc/init.d/bluetooth restart

Uwaga, telefony na plaformie Symbian S60 (np. N95) lubią zmieniać czasami numer kanału, należy wtedy uwolnić stary kanał (rfcomm release 0) i powtórzyć procedurę z wyszukiwaniem usług, zapamiętaniem nowego numeru i zmodyfikowaniu pliku rfcomm.conf.

Teraz sprawdzamy poprawność połączenia. Ta operacja powinna wymusić powiązanie telefonu z komputerem, o ile nie zostało to wykonane wcześniej (wpisujemy wtedy dowolny ciąg w telefonie, powiedzmy 1234, potwierdzamy, następnie klikamy w chmurkę w Ubuntu i podajemy identyczny ciąg znaków do uwierzytelnienia).

tom@srebrny:~$ echo > /dev/rfcomm0

Jeśli połączenie wzbudziło telefon, to znaczy, że wszystko jest na najlepszej drodze. Wszystkie instrukcje, z jakimi miałem do tej pory do czynienia dalej ciągną tę epopeję w terminalu i bardzo słusznie. Nie udało mi się zestawić połączenia za pomocą NetworkManager, za pomocą gnome-ppp się udało, ale niestety tylko w teorii, w praktyce połączenie nie działało (wyłączenie n-m nic nie dało). Wreszcie wczoraj doszedłem jak to zrobić w miarę prosto, bez całkowitego wyłączania NetworkManagera. Tak wygląda konfiguracja dla trzech naszych operatorów (jak ktoś ma telefon w sieci Play to niech napisze w komentarzach potrzebne dane):

Era - APN: erainternet Login/hasło: erainternet/erainternet (w TakTaku erainternettt)
PlusGSM - APN: www.plusgsm.pl Login/hasło: brak/brak
Orange - APN: internet Login/hasło: internet/internet

Oto potrzebne pliki konfiguracyjne:

- Utworzenie /etc/ppp/peers/bluetooth-internet
- Utworzenie /etc/chatscripts/bluetooth-internet
- Modyfikacja /etc/network/interfaces

Oprócz tego trzeba wziąć pod uwagę, iż niektóre telefony (np. Nokia) mają niestandardowe ciągi inicjujące modem, a poza tym reszta konfiguracji niezawsze działa ze wszystkimi telefonami, eksperymenty mogą być nieuniknione. Podam pliki konfiguracyjne z jakich ja korzystam z telefonem Nokia E61, które powinny zadziałajać ze wszystkimi telefonami z serii E i N od Nokii. Podam też ciągi inicjujące dla całej reszty telefonów. Zaczynamy.

tom@srebrny:~$ gksudo gedit /etc/ppp/peers/bluetooth-internet

Wklejamy zawartość:

noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/bluetooth-internet"
usepeerdns
/dev/rfcomm0 230400
defaultroute
crtscts
lcp-echo-failure 0
modem -detach
noccp
ipcp-accept-remote
ipcp-accept-local
noipdefault

Zapisujemy, zamykamy. Prędkość możemy tutaj regulować w zasadzie dowolnie, ja ustaliłem 230400 bajtów na sekundę, gdyż 115200 to trochę za mało dla EDGE. Nie eksperymentowałem z wyższymi prędkościami, do UMTS proponuję wprowadzić 460800, a do HSDPA proponowałbym na początek bezpiecznie 921600, a jeśli zadziała można spróbować zwiększyć przepustowość do 2073600. Zaznaczam, iż nie próbowałem prędkości powyżej 230400.

tom@srebrny:~$ gksudo gedit /etc/chatscripts/bluetooth-internet

Wklejamy zawartość:

TIMEOUT 35
ECHO ON
ABORT '\nBUSY\r'
ABORT '\nERROR\r'
ABORT '\nNO ANSWER\r'
ABORT '\nNO CARRIER\r'
ABORT '\nNO DIALTONE\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
'' \rAT
OK 'AT+CGDCONT=1,"IP","erainternettt"'
OK ATD*99#
CONNECT ""

Tutaj już koniecznie należy dobrać parametry do posiadanego telefonu i sieci. W miejscu "erainternettt" należy wprowadzić nazwę punktu dostępowego (APN) swojej sieci (podane wyżej). Jeśli mamy telefon Nokia, to nic więcej nie trzeba zmieniać. Natomiast do innych telefonów zamiast ciągu ATD*99# należy podać ATD*99***1# lub ATD*99***2#, a jeśli to nie pomoże spróbować zmienić wartość 1 na 2 w wyższym wierszu. Zapisujemy, zamykamy.

Teraz należy uderzyć w NetworkManager. Konieczne jest pominięcie tego mechanizmu.

tom@srebrny:~$ gksudo gedit /etc/network/interfaces

W ostatnim wolnym wierszu wpisujemy:

iface hci0 inet static

Zapisujemy, zamykamy.

Przetestujmy połączenie. Aby połączyć:

tom@srebrny:~$ pon bluetooth-internet

Powinny wysypać się komunikaty tego typu:

AT
OK
AT+CGDCONT=1,"IP","erainternettt"
OK
ATD*99#
CONNECT
Serial connection established.
Using interface ppp0
Connect: ppp0 <--> /dev/rfcomm0
PAP authentication succeeded
Cannot determine ethernet address for proxy ARP
local IP address 10.122.132.145
remote IP address 10.6.6.6
primary DNS address 213.158.194.1
secondary DNS address 213.158.193.38

Aby rozłączyć:

tom@srebrny:~$ poff bluetooth-internet

Wszelkie błędy można wyczytać z dziennika systemowego:

tom@srebrny:~$ gedit /var/log/syslog

To właściwie wszystko. Po kilku sekundach połączenie zostanie nawiązane. Wszelkie aplikacje polegające na NetworkManager nie będą wiedziały o istnieniu tego połączenia, ale powinny działać poprawnie (chociaż Gajim raczej nie zauważa rozłączenia, trzeba wszystkim sterować ręcznie). Rozwiązania dotyczą Ubuntu 7.04 i wersji późniejszych.

Komentarze do notki Ubuntu Bluetooth - Część V

  1. jachacy powiedział(a):

    Niestety, dostępność EDGE nie wygląda tak różowo jak napisałeś, może poza Orange. Mapy wg pokrycia:
    http://www.orange.pl/portal/map/map/int_tech?id=1458917
    http://www.era.pl/pl/biznes/uslugi_porady/internet/zasieg
    http://iplus.pl/zasieg.html#mapy

  2. spin powiedział(a):

    Chyba przesadziles z tymi opoznieniami dla HSDPA. Mam blueconnecta juz od ponad 1,5 roku, no i od jakiegoś czasu HSDPA. Jeszcze mi sie nie zdarzylo zeby opoznienia byly mniejsze niz 200-300ms.. No i predkosc tez rzadko przekracza wartosc UMTSową (mieszkam w centrum Warszawy zeby nie bylo).

  3. TomaszD powiedział(a):

    @jachacy
    W teorii wygląda to tak, że sprzęt w wieżach nadawczych musi zostać zaktualizowany do EDGE, zostało to już w znakomitej większości zrealizowane. Zakładam, że obecnie tam gdzie jest GPRS jest także EGPRS i dalekie od prawdy to nie jest. Ja jeszcze się nie spotkałem z sytuacją, gdzie byłby dostępny GPRS, ale już nie EGPRS.
    @spin
    Podałem wartość teoretyczną, taką którą można uzyskać w idealnych warunkach. Kwestię słabej infrastruktury i ciągłego wysokiego obciążenia sieci pominąłem.

  4. zyga powiedział(a):

    @TomaszD "Ja jeszcze się nie spotkałem z sytuacją, gdzie byłby dostępny GPRS, ale już nie EGPRS. " - malo widziales, tak sie sklada, ze pracuje w tym od 10 lat i Ci powiem ze wymiana modułow TRX (z supportem EDGE) jest kosztowna i nie wszedzie bedzie dokonywana - poprostu sie nie bedzie oplacala

  5. TomaszD powiedział(a):

    Bez urazy, ale to zabrzmiało jak z oświadczeń PZU "Prowadziłem samochód już 40 lat kiedy miałem wypadek". Bez przesady, nie trzeba siedzieć w czymś 10 lat, żeby wiedzieć, iż wymiana sprzętu jest droga i w pewnych miejscach nieopłacalna. Jednak w znakomitej większości obszarów zurbanizowanych EDGE jest już dostępny, a może być tylko lepiej.

  6. zyga powiedział(a):

    w zurbanizowanych terenach sa alternatywy dla podlaczania sie do internetu przez komorke - tansze i szybsze
    no chyba ze sie myle ;)
    a propos lepiej:
    -szefie, kiedy bedzie LEPIEJ ?
    -LEPIEJ juz bylo

  7. zyga powiedział(a):

    acha, opis jest swietny i co do tego nie mialem watpliwosci
    oczywiscie tutaj tez sa alternatywy - moge opisac moja :-)
    0-wpis w /etc/bluetooth/rfcomm.conf
    device XX:XX:XX:XX:XX:XX; #twoj adres
    1-pliczek: /etc/ppp/chat-gprs
    '' ATZ OK
    AT+CGDCONT=1,"IP","www.umc.ua"
    OK "ATD*99***1#"
    CONNECT ''
    2-pliczek: /etc/ppp/peers/moj-gprs
    /dev/rfcomm0 230400
    connect '/usr/sbin/chat -v -f /etc/ppp/chat-gprs'
    crtscts
    modem -detach
    noccp
    defaultroute
    usepeerdns
    noauth
    ipcp-accept-remote
    ipcp-accept-local
    noipdefault
    3-skrypcik, np: ~/gprs.sh:
    #!/bin/bash
    sudo rfcomm connect XX:XX:XX:XX:XX:XX
    pppd call moj-gprs &

    no i to w zasadzie tyle: odpalamy z paluszka ~/gprs.sh i poszlo

  8. MySZ powiedział(a):

    Mogę tylko powiedzieć że całość działa bez problemów z GutsyGibbon, SE K750i i HP nx7400 :) Dziękuję!

  9. Mateusz A. powiedział(a):

    Ja korzystam z wvdial...

  10. RA powiedział(a):

    Cyferka na końcu w "ATD*99***1" oznacza ID skonfigurowanego połączenia GPRS w komórce i można ją sprawdzić w telefonie zamiast klepać na "ślepo".

    Łączenie z komórką przez rfcomm można wrzucić do "pre-up" w po uprzednim skonfigurowaniu pppX w /etc/network/interfaces.

  11. velchinaski powiedział(a):

    Nareszcie cos co działa na moim K750i bo do tej pory wszystko było nie skuteczne DZIęKI !!!!!

  12. m. powiedział(a):

    nokia 6280 + ubuntu 7.10 + orange free

    camel@ubuntu:~$ pon bluetooth-internet
    AT
    OK
    AT+CGDCONT=1,"IP","www.orange.pl"
    OK
    ATD*99#
    CONNECT
    Serial connection established.
    Using interface ppp0
    Connect: ppp0 <--> /dev/rfcomm0
    PAP authentication succeeded
    LCP terminated by peer
    Connection terminated.
    Modem hangup

    co może być przyczyną ??? w telefonie wyskakuje komunikat ze trzeba uaktywnic dane pakietowe natomiast karta sim jest typowo do internetu a telefon skonfigurowany prawidlowo bo pod windows dziala (pod windows dziala tylko przez kabel a nie pod bluetooth)

    jakies sugestie ?? ewentualnie jak uruchomic ten telefon przez zwykly kabel usb ? byle telefon robil jako modem

    pozdrawiam

  13. Menda powiedział(a):

    Hmm a w jaki sposób udospęnić internet z komputera w telefonie ?

  14. mpop powiedział(a):

    Działa świetnie. Dziekuję

  15. Zac powiedział(a):

    Przy uruchamianiu polaczenia z orange zadzialalo mi na ustawieniach apn internet, user/pass internet/internet. takie ustawienia sugeruje sam operator na stronie www. poza tym - doskonaly i merytoryczny opis

  16. TomaszD powiedział(a):

    Poprawiłem ustawienia Orange.

  17. babel powiedział(a):

    hey, ja mianowic mam problem z polaczeniem wywala mi cos takiego:

    AT
    OK
    AT+CGDCONT=1,"IP","payandgo.o2.co.uk"
    OK
    ATE1
    OK
    ATD*99#
    CONNECT
    Serial connection established.
    Using interface ppp0
    Connect: ppp0 <--> /dev/rfcomm0
    PAP authentication succeeded
    Cannot determine ethernet address for proxy ARP
    local IP address 10.218.136.81
    remote IP address 10.6.6.6
    primary DNS address 193.113.200.200
    secondary DNS address 193.113.200.201

    ale kiedy che otworzyc strone to sie nic nie dzieje
    jak puszczam ping na onet to pokauje mi jego ip, ale pingi nie leca
    moze ktos wiec co jest nie tak
    pozdrawiam

  18. moro powiedział(a):

    dziękuję. bardzo pomocny opis.

  19. cezaryece powiedział(a):

    ja mam to samo niestety, tak jakby było złe routowanie

  20. Szalonooki powiedział(a):

    Bardzo pomocny opis. Po zrobieniu wszystkiego pod to dyktando, firefox nie otwieral stronek, ponieważ domyślnie przechodził w tryb offline.
    Ze mam polączenie z netem, zorientowalem sie po klienecie torrentow, ssał dosyc stabilnie.
    Wystarczyło przestawić firefoxa na online i miodzio: stronki zaczely fikać az milo.
    Wielkie dzienksy i respekcik.
    Użyty sprzęt: DELL latitude D630 z Ubuntu 8.10 + telefonik Samsung SGH-Z720 z kartą w Orange, w tle muzyka Dead Can Dance.
    Wszystko poszło na podanych w tym opisie ustawieniach.

  21. Ramirez powiedział(a):

    Wszystko zadziałało bez problemu! Dzięki wielkie za opis!
    Xubuntu 8.10 @ Dell Latitude E6400 via LG KU990 Viewty (PlusGSM)

Dodaj komentarz: