Posts Tagged tethering

Udostępnienie połączenia internetowego z Andorida poprzez port USB

Udostępnianie połączenia internetowego przy użyciu sieci wi-fi, które opisałem we wpisie Udostępnienie połączenia internetowego z Andorida poprzez sieć bezprzewodową ma w moim przypadku kilka wad:

  • pobiera tyle energii, że telefon podłączony do komputera przy użyciu kabla USB raczej się rozładowuje niż ładuje
  • w moim przypadku połączenie to także rozgrzewało telefon do 50 stopni, co prawdopodobnie powodowało, że czasem się po prostu wyłączał

Jeżeli posiadamy zrootowany telefon z zainstalowanym Cyanogenmod w wersji 5 (może wcześniejsze wersje też to obsługują, ja testowałem w tej) to istnieje możliwość udostępnienia połączenia internetowego poprzez kabel USB.

Konfiguracja telefonu

W telefonie należy właściwie zrobić tylko jedną rzecz, włączyć udostępnienia połączenia poprzez USB. A można to zrobić wybierając Ustawienia, następnie Sieci zwykłe i bezprzewodowe, a na końcu zaznaczyć opcję Internet Tethering.

I to właściwie tyle.

Konfiguracja komputera

W moim przypadku konfiguracja dotyczy systemu Ubuntu 10.4. Postaram się pokazać, jak należy ten system skonfigurować, aby automatycznie nawiązywał połączenie z telefonem i konfigurował odpowiednio połączenie sieciowe.

Wymogiem poprawnego działania tego połączenie jest obeność w jądrze modułu RNDIS, odpowiedzialnego za zestawienie połączenie sieciowego po łączu USB. W przypadku Ubuntu odpowiednie jądro zostało juz skompilowane z odpowiednimi modułami.

Po podłączeniu telefonu warto wydać polecenie:

# ip a s usb0

Jeżeli polecenie to wyświetli informacje o interfejsie usb0 to oznacza, że połączenie działa, pozostaje je tylko skonfigurować.

A konfiguracja polega tak naprawdę na pobraniu adres IP z serwera DHCP. Można zrobić w następująco:

# dhclient usb0

Komenda ta powinna pobrać dynamiczny adres IP, po jej wydaniu warto sprawdzić, czy możemy połączyć się z jakimiś zasobami.

I tak naprawdę to wszystko, po tych operacjach powinno działać połączenie z Internetem.

Automatyczna konfiguracja połączenia z telefonem

Konfiguracja automatycznej konfiguracji internfejsu usb0 jest stosunkowo prosta. Należy w pliku /etc/network/interfaces dopisać dwie linijki:

1
2
auto usb0
iface usb0 inet dhcp

Pierwsza linijka oznacza automatyczne konfigurowanie wybranego interfejsu sieciowego, a druga informuje, że należy pobrać informacje o sieci IP pobrać z serwera DHCP.

Pozstaje jeszcze tylko zrestartować sieć:

# /etc/init.d/networking restart

Od tej pory po podłączeniu telefonu sieć USB powinna automatycznie zostać skonfigurowana.

Źródła

Tags: , ,

Dostęp do Internetu za pomocą HTC G1 z systemem Android (Proxoid)

W przeciwieństwo do wielu innych telefonów HTC G1 z Androidem nie ma wbudowanego modemu umożliwiającego zestawienie połączenia z siecią Internet po podłączeniu do do komputera. Jest to dosyć irytująca cecha, która utrudnia wykorzystanie łączności Internetowej w podróży. W przypadku telefonów, które nie zostały „zrootowane” musimy posiłkować się zarówno odpowiednią aplikacją na telefonie, jak i zbudować odpowiedni tunel łączący nasz komputer z telefonem.

Krok 1: Instalacja aplikacji Proxoid na telefonie

Najpierw należy zainstalować aplikację Proxoid na telefonie. Jest ona dostępna na Google Market, więc nie powinno to sprawić kłopotów.

Krok 2: Konfiguracja telefonu

Włączyć tryb „USB debugging” na telefonie. Jest on potrzebny do tego, aby dało się komunikować z telefonem z poziomu komputera. Czyli z MENU wybrać opcję Settings->Applications->Development, i zaznaczyć opcję USB debugging.

Okienko Android USB Deugging

Okienko Android USB Deugging

Krok 3: Konfiguracja UDEV

Przynajmniej w przypadku Ubuntu trzeba jeszcze skonfigurować odpowiednio demona UDEV, tak aby poprawnie rozpoznawał telefon. Należy utworzyć plik /etc/udev/rules.d/11-android.rules o następującej zawartości:

1
2
SUBSYSTEMS=="usb", SYSFS{idVendor}=="0bb4", SYSFS{idProduct}=="0c02", MODE="0666", OWNER="nazwa użytkownika"
SUBSYSTEMS=="usb", SYSFS{idVendor}=="0bb4", SYSFS{idProduct}=="0c01", MODE="0666", OWNER="nazwa użytkownika"

Aktualizacja

W przypadku jądra 2.6.32 powyższy wpis sprawiał mi problemy (telefon był ciągle wykrywany, nagle przestawał być widziany). Dopiero zmiana tego wpisu na poniższy rozwiązała problemy:

1
2
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c01", ENV{ACL_MANAGE}="1", MODE="0666", OWNER="nazwa użytkownika"
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c02", ENV{ACL_MANAGE}="1", MODE="0666", OWNER="nazwa użytkownika"

Swoją drogą, wg. komunikatów podawanych przez jądro to użycie atrybuty SYSFS nie jest zalecane przynajmniej od wersji 2.6.32, zamiast tego poleca się użycie właśnie atrybutu ATTR.

Należy wpisać swoją nazwę użytkownika po deklaracji OWNER.

Teraz restart demona:

# /etc/init.d/udev restart

I można podłączać telefon. Po wydaniu poniższego polecenia powinniśmy otrzymać podobny komunikat:

# lsusb  | grep High
Bus 001 Device 017: ID 0bb4:0c02 High Tech Computer Corp.

Krok 4: Pobranie SDK do androida

Należy pobrać SDK do tworzenia aplikacji dla systemu Android. Znajduje się tam aplikacja o nazwie adb, która będzie potrzebna do uzyskania połączenie pomiędzy komputerem a telefonem.

SDK można pobrać ze strony: http://developer.android.com/sdk/index.html.

W moim przypadku korzystam z Android SDK ver. 1.6 oraz na telefonie także mam zainstalowany system Android w wersji 1.6.

Po pobraniu SDK należy je rozkompresować i odszukać polecenie adb, które zaraz będzie potrzebne. Powinno ono znajdować się w katalogu: android-sdk/tools/adb.

Krok 5: Utworzenie tunelu

Ponieważ telefon nie posiada modemu, nie można w zwykły sposób zestawić połączenia pomiędzy nim a komputerem. Do tego celu służy aplikacja adb, która potrafi nasłuchiwać na wybranym porcie i przekazywać dane do telefonu także tam na odpowiedni port. Przypomina to tworzenie tunelu przy użyciu ssh.

Włączenie nasłuchiwania na lokalnym porcie 8080 i przekazywanie pakietów na port 8080 na telefonie, gdzie aplikacja Proxoid pobierze je i przesle dalej w świat:

/adb forward tcp:8080 tcp:8080
* daemon not running. starting it now *
* daemon started successfully *

Przy pierwszym wywołaniu aplikacji otrzymamy komunikat o jej starcie. Za pomocą programu netstat można sprawdzić, czy adb faktycznie nasłuchuje na wybranym przez nas porcie:

$ netstat -tlpn | grep adb

tcp        0      0 127.0.0.1:5037          0.0.0.0:*               LISTEN      11573/adb
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      11573/adb

Jeżeli wynikiem działania polecenia netstat będzie tylko jedna linia (lub wcale), to można jeszcze raz spróbować włączyć przekierowanie portów przy użyciu adb. Jeżeli w wyniku znajdzie się linia w postaci 127.0.0.1:8080 to wszystko powinno nam już działać.

Krok 6: Konfiguracja przeglądarki

Należy skonfigurować wybraną przeglądarkę tak, aby korzystała z serwera proxy HTTP. Jako adres serwera należy wpisać wartość localhost, jako port 8080.

Jeżeli zdarza się nam często konfigurować serwer proxy, warto rozważyć na przykład instalację dodatku FoxyProxy do Firefoksa.

Krok 7: Uruchomienie aplikacji Proxoid

Ostatnim elementem jest uruchomienie aplikacji Proxoid na telefonie. Po uruchomienie należy wybrać jeszcze przełącznik Start/Stop Proxoid i powinniśmy się już cieszyć działającym połączeniem z siecią Internet.

Kroków było sporo, ale w codziennym użytkowaniu konieczne będzie wykonanie tylko kroków 5, 6 oraz 7.

Problemy

Jeżeli z jakiś powodów nie działa komunikacja, należy sprawdzić za pomocą polecenia netstat czy aplikacja adb nasłuchuje na odpowiednim porcie. Jeżeli nie, to uruchomić ją ponownie (nie wiem czemu, ale czasem się po prostu proces wysypuje).

Można także sprawdzić, czy adb wykrywa nasz telefon:

$ ./adb devices

List of devices attached
HT92FKV03562    device

W przypadku konfliktów portów, można zmienić port 8080 na jakiś inny, ale należy pamiętać aby jego numer był większy niż 1024 oraz zmodyfikować odpowiednio konfigurację przeglądarki.

Źródła

Tags: , , , ,