Internet przez komórkę
Niektóre drobne rzeczy, które zwykły po prostu działać w innych systemach, są niebywale skomplikowane i upierdliwe pod Linuksem. Taka rzecz to połączenie z internetem za pośrednictwem telefonu komórkowego.
Oczywiście, dla przeciętnego użytkownika Ubuntu nie stanowi to żadnego problemu — dopóki sprzęt jest rozpoznawany i działa. Podobnie jest z Gnome czy KDE, twórcy tych środowisk przygotowali odpowiednie nakładki na BlueZ, jednakże ja nie używam żadnego z tych środowisk, w związku z tym pierwszą próbę przeprowadziłem „na małpkę”, czyli poprzez zainstalowanie nakładki Blueman, która prawie zadziałała. Nakłada zachowywała się bardzo przyzwoicie, wykryła telefon, pozwoliła na przeglądanie plików w telefonie, ale poległa przy próbie połączenia z Siecią. Czarę goryczy przelał fakt znarowienia się programu przy ponownej próbie komunikacji z telefonem.
Zacząłem więc brnąć w spiralę frustracji i piekło konfiguracji by po paru godzinach w pełni cieszyć się możliwością serfowania po sieci z pomocą telefonu komórkowego.
Dla potomności i własnej sklerozy zapisuję więc poszczególne kroki.
Główni bohaterowie
- Telefon Nokia 5220 XpressMusic
- Komputer Acer Aspire One + Gentoo Linux na pokładzie.
- Dongiel bluetooth Trust (najtańszy, jaki udało mi się kupić na giełdzie swego czasu)
Telefon działa w sieci Orange, ale myślę, że dla innych sieci powinno być analogicznie.
Oprogramowanie
Przede wszystkim konieczne będzie skonfigurowanie kernela (dodanie modułów bt, wsparcia dla USB itp.), zgodnie z dokumentacją Gentoo o ile wcześniej się tego nie zrobiło. Cała reszta opisu w tejże dokumentacji dotyczy niestety starszej wersji BlueZ (2.x oraz 3.x), dlatego część z tych informacji jest niestety nieaktualna. Można też od razu dodać wsparcie dla PPP:
Device drivers ---> [*] Networking device support ---> <M> PPP (point-to-point protocol) support [*] PPP filtering <M> PPP support for async serial ports <M> PPP support for sync tty ports <M> PPP Deflate compression <M> PPP BSD-Compress compression
Jeżeli nie jest ustawiona, dodać flagę bluetooth
do flag USE
w
/etc/make.conf
i (najprościej) wywołać komendę:
root@aspire1 ~ # emerge -vaNDu world
Jako zależność zostanie skompilowany bluez
w wersji (na dzień 2010-11-23)
4.75. Po kompilacji, wystarczy uruchomić usługę:
root@aspire1 ~ # /etc/init.d/bluetooth start
lub włożyć dongiel do gniazda USB; usługa powinna wystartować automatycznie.
Kolejnym niezbędnym programem będzie pppd
, choć dla własnej wygody
zainstalowałem wvdial
:
root@aspire1 ~ # emerge wvdial -va These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] net-dialup/ppp-2.4.4-r25 USE="gtk pam -activefilter -atm -dhcp -eap-tls -ipv6 -mppe-mppc -radius" 0 kB [ebuild N ] virtual/c++-tr1-functional-0 0 kB [ebuild N ] net-libs/wvstreams-4.6.1-r1 USE="dbus pam ssl -debug -doc" 0 kB [ebuild N ] net-dialup/wvdial-1.61 0 kB Total: 4 packages (4 new), Size of downloads: 0 kB Would you like to merge these packages? [Yes/No]
Konfiguracja BlueZ
Najbardziej upierdliwą rzeczą jest skonfigurowanie komunikacji pomiędzy telefonem a komputerem. Ponieważ w międzyczasie zmienił się dość istotnie sposób w jaki BlueZ utrzymuje konfigurację, postaram się to opisać jak najdokładniej.
Po uruchomieniu serwisu bluetooth, w katalogu /var/lib/bluetooth/
zostanie
utworzony katalog o nazwie takiej samej jak adres sprzętowy dongla, załóżmy
AA:AA:AA:AA:AA:AA
. W tymże katalogu znajduje się plik config
, który
domyślnie zawiera:
name aspire1-0 class 0x4800fe
do którego należy dopisać linię:
mode discoverable
po czym spróbować wyszukać komputer z donglem przy pomocy telefonu. W przypadku niepowodzenia, należy upewnić się, by urządzenie było wykrywalne (uaktywniona flaga ISCAN) oraz miało możliwość podłączenia doń (uaktywniona flaga PSCAN). W moim przypadku musiałem ręcznie uaktywnić flagę ISCAN:
root@aspire1 ~ # hciconfig hci0 hci0: Type: BR/EDR Bus: USB BD Address: AA:AA:AA:AA:AA:AA ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:707 acl:0 sco:0 events:26 errors:0 TX bytes:358 acl:0 sco:0 commands:26 errors:0 root@aspire1 ~ # hciconfig hci0 piscan root@aspire1 ~ # hciconfig hci0 hci0: Type: BR/EDR Bus: USB BD Address: AA:AA:AA:AA:AA:AA ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:720 acl:0 sco:0 events:28 errors:0 TX bytes:365 acl:0 sco:0 commands:28 errors:0
Po tej operacji telefon powinien być w stanie wykryć komputer, choć nadal nie można się z nim sparować, ponieważ nie wiadomo jakiego hasła spodziewa się komputer. Hasło (lub, jak niektóre źródła podają: pin) należy ustalić indywidualnie względem adresu sprzętu.
Żeby znaleźć adres sprzętowy telefonu należy uaktywnić BT w telefonie, telefon musi być widoczny (powinna być dostępna odpowiednia opcja w ustawieniach) i uruchomić skanowanie na komputerze:
root@aspire1 ~ # hcitool scan Scanning ... BB:BB:BB:BB:BB:BB Nokia5220
Uzyskany w ten sposób adres należy dopisać do pliku
/var/lib/bluetooth/AA:AA:AA:AA:AA:AA/pincodes
:
BB:BB:BB:BB:BB:BB 123456
Następnie należy zrestartować serwis bluetooth i ponownie spróbować wyszukać urządzenie powiązane (czyli dokonać sparowania). Po podaniu właściwego pinu w telefonie, powinien pojawić się komunikat o pomyślnie dodanym urządzeniu.
Kolejna rzecz to podłączenie portu szeregowego z „modemem” w telefonie. Najpierw należy sprawdzić na którym kanale znajduje się Dial-up Networking:
root@aspire1 ~ # sdptool search DUN Inquiring ... Searching for DUN on BB:BB:BB:BB:BB:BB ... Service Name: Dial-up networking Service RecHandle: 0x10003 Service Class ID List: "Dialup Networking" (0x1103) "Generic Networking" (0x1201) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Dialup Networking" (0x1103) Version: 0x0100
Czyli usługa modemu znajduje się na kanale pierwszym. Można spróbować ręcznie zbindować usługę do urządzenia:
root@aspire1 ~ # rfcomm bind /dev/rfcomm0 BB:BB:BB:BB:BB:BB 1 root@aspire1 ~ # rfcomm rfcomm0: BB:BB:BB:BB:BB:BB channel 1 clean
I już prawie jest fajnie. Celem zbindowania portu na stałe, można to zrobić w
globalnym pliku konfiguracyjnym /etc/bluetooth/rfcomm.conf
:
rfcomm0 { bind yes; device BB:BB:BB:BB:BB:BB; channel 1; comment "Port w telefonie Nokia 5220"; }
Po restarcie komputera, port ten zawsze będzie widoczny w /dev
.
Konfiguracja wvdial
Ostatnia rzecz, jaką należy zrobić, to skonfigurować wvdial
. Plik
konfiguracyjny znajduje się w /etc/wvdial.conf
:
[Dialer Defaults] Modem = /dev/modem Baud = 115200 Init1 = ATZ Init2 = ATE0 [Dialer Orange] Modem = /dev/rfcomm0 Init3 = AT+cgdcont=1,"IP","internet" Phone = *99***1# Stupid Mode = 1 Username = ppp Password = ppp
Teraz wystarczy uruchomić wvdial
:
root@aspire1 ~ # wvdial orange --> WvDial: Internet dialer version 1.61 --> Cannot get information for serial port. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATE0 ATE0 OK --> Sending: AT+cgdcont=1,"IP","internet" OK --> Modem initialized. --> Sending: ATDT*99***1# --> Waiting for carrier. CONNECT ~[7f]}#@!}!} } }2}#}$@#}!}$}%\}"}&} }*} } g}%~ --> Carrier detected. Starting PPP immediately. --> Starting pppd at Tue Nov 23 21:57:46 2010 --> Pid of pppd: 6314 --> Using interface ppp0 --> pppd: [10]. [10]. --> pppd: [10]. [10]. --> pppd: [10]. [10]. --> pppd: [10]. [10]. --> local IP address 99.99.99.99 --> pppd: [10]. [10]. --> remote IP address 6.6.6.6 --> pppd: [10]. [10]. --> primary DNS address 79.163.127.70 --> pppd: [10]. [10]. --> secondary DNS address 217.116.100.65 --> pppd: [10]. [10].
I to wszystko.