Aero2 z modemem Huawei E3131

Kategoria: Artykuły, etykiety: internet, modemy, huawei

Dodany: 2012-05-21 10:10 (zmodyfikowany: 2012-08-30 23:33)
Przez: azhag

Wyświetleń: 149074

Spis treści

  1. Wstęp
  2. Uruchomienie modemu
    1. NetworkManager czy wvdial?
    2. Przełączanie urządzenia w tryb modemu
    3. Zmiana domyślnych ustawień modemu
    4. Konfiguracja wvdial
  3. Obsługa
    1. pon.wvdial
    2. Skrypty
    3. Automatyczne uruchamianie połączenia przy starcie
  4. Uwagi końcowe

Wstęp

Aero2 to usługa darmowego internetu mobilnego, której uruchomienie było jednym z warunków przetargu na częstotliwości LTE 2,6GHz. Oprócz zalet w postaci ceny i braku limitów transferu (teoretycznie szybkość łącza pozwala na pobranie ponad 150 GB, u dostawcy komercyjnego taka przyjemność kosztowałaby nawet kilka tysięcy złotych), Aero2 ma również pewne wady — do nich można zaliczyć m.in. rozłączanie sesji co godzinę (o czym za chwilę), dość niską prędkość (ale pozwalającą na całkiem komfortowe przeglądanie sieci) oraz konieczność wyszukania bardziej nowoczesnego modemu (bądź tabletu lub telefonu), który spełnia wymogi techniczne usługi.

Jednym z takich modemów jest Huawei E3131. W chwili powstawania tego tekstu jest to prawdopodobnie najlepsza opcja — modem jest łatwo dostępny (do kupienia w salonach Play) w bardzo atrakcyjnej cenie 129 zł (w tym starter 19 zł, de facto więc koszt modemu to 110 zł, choć samodzielnie nie da się go kupić).

Poniższy tekst prezentuje jak uruchomić internet Aero2 z Huawei E3131, fragmenty powinny jednak być przydatne dla użytkowników innych modemów bądź dla osób chcących połączyć się przez ten model z siecią innego operatora.

Więcej na temat Aero2 można znaleźć na blogu jdtech.pl. W szczególności warto zapoznać się z tekstami:

Uruchomienie modemu

NetworkManager czy wvdial?

Modem bez trudu da się uruchomić przez NetworkManager, jednakże obsługa modemów 3G nadal pozostawia w nim sporo do życzenia. NetworkManager polega z kretesem przy cogodzinnym rozłączaniu — aby ponownie się połączyć należy wyjąć modem z portu USB, włożyć go z powrotem i dopiero wtedy aplikacja znowu „widzi” urządzenie. Konieczność takiej żonglerki skutecznie może obrzydzić korzystanie z Aero2 (choć przy komercyjnych operatorach nie powinno to być większym problemem).

Dla Aero2 zdecydowanie lepszym wyjściem będzie wvdial, który automatycznie — w ciągu kilku sekund — ponowi przerwane połączenie. Do tego potrzebny będzie usb-modeswitch do przełączenia urządzenia w tryb modemu. Na początek zatem instalujemy pakiety:

wvdial usb-modeswitch

wraz z zależnościami.

Przełączanie urządzenia w tryb modemu

Podobnie jak wiele innych urządzeń tego typu, E3131 posiada dwa tryby pracy — wirtualny CD ze sterownikami dla Windowsa oraz właściwy modem. Aby sprawdzić tryb, najprościej będzie zobaczyć czy w /dev/ znajdują się pliki modemu:

ls /dev/ttyUSB*

Jeżeli znajdziemy kilka plików — urządzenie jest w trybie modemu, jeśli nie — w trybie CD (lub zapomnieliśmy go podłączyć ;)).

Ponieważ E3131 to dość nowy model, usb-modeswitch nie ma jeszcze odpowiednich danych, aby samodzielnie przełączyć tryb i należy mu pomóc ręcznie — jako root należy wykonać:

echo "12d1 1506" > /sys/bus/usb-serial/drivers/option1/new_id
usb_modeswitch -v 12d1 -p 14fe -V 12d1 -P 1506 -M "55534243123456780000000000000011062000000100000000000000000000"

Modem powinien się przełączyć i utworzonych zostanie kilka plików /dev/ttyUSB*. Aby potem usb-modeswitch już sam przełączał, należy również jako root zapisać w pliku /etc/usb_modeswitch.d/12d1:14fe:

DefaultVendor=  0x12d1
DefaultProduct= 0x14fe

TargetVendor=  0x12d1
TargetProduct= 0x1506

MessageContent="55534243123456780000000000000011062000000100000000000000000000"

Co ciekawe jednak, powyższa operacja była potrzebna tylko na jednym z testowanych komputerów wyposażonym w Debiana Wheezy. Na drugim, działającym pod kontrolą Ubuntu 12.04, E3131 bez dodatkowych działań był widoczny od razu jako modem — czy to kwestia samego Ubuntu, czy działającego w tle NetworkManagera — nie wiem, nie wnikałem. W każdym razie dobitnie pokazuje to, że przed przystąpieniem do instruowania narzędzia usb-modeswitch należy sprawdzić tryb modemu. Możliwe, że nic nie trzeba robić. Za jakiś czas — po zaktualizowaniu usb-modeswitch-data — z pewnością ręczne przełączanie nie będzie już konieczne.

Zmiana domyślnych ustawień modemu

Huawei E3131, podobnie jak inne modemy z Play, domyślnie skonfigurowany jest w sposób, który uniemożliwia połączenie z Aero2. Szczegóły na ten temat oraz instrukcja zmiany ustawień dla systemu Windows można znaleźć na jdtech.pl w tekście Aero2 – Na czym polegają problemy z Huawei E169.

Na Linuksa nie znam żadnego graficznego narzędzia pozwalającego na łatwą zmianę ustawień. Trzeba niestety to zrobić metodą „partyzancką” (na szczęście wystarczy to zrobić tylko raz). Przy rozłączonym modemie wykonujemy jako root polecenie:

echo "AT^SYSCFG=14,0,3FFFFFFF,1,2\r" >/dev/ttyUSB0

lub

echo "AT^SYSCFG=2,0,3FFFFFFF,1,2\r" >/dev/ttyUSB0

Pierwsze sprawi, że modem będzie działał wyłącznie w trybie WCDMA, drugie ustawi tryb automatyczny. Jeśli zamierzamy korzystać jedynie z Aero2 (które działa tylko na WCDMA) możemy wykonać pierwsze polecenie. Jeśli zaś planujemy korzystać również z innych operatorów, lepiej wykonać drugie.

Więcej na temat AT^SYSCFG można znaleźć na wiki serwisu bez-kabli.

Zmienić ustawienia modemu wystarczy tylko raz, nie trzeba powtarzać tej operacji przed każdym połączeniem.

Konfiguracja wvdial

Twrzymy plik /etc/wvdial.conf lub — jeśli już istnieje — dopisujemy do niego:

[Dialer aero2]
Modem = /dev/ttyUSB0
Init1 = AT+CGDCONT=1,"IP","darmowy"
Phone = *99#
Stupid mode = yes
Username = "aero"
Password = "aero"
Dial Attempts = 0

Jeśli modem znajduje się w innym miejscu, należy odpowiednio zmodyfikować linijkę Modem =. Aby korzystać z własnych DNS-ów możemy dodać jeszcze:

Auto DNS = 0

Przetestujemy teraz połączenie wydając jako root (lub użytkownik należący do grupy dip):

wvdial aero2

Modem powinien się połączyć, aby przerwać połączenie należy wcisnąć Ctrl+C. Ten sposób nawiązywania połączenia jednak jest dość niewygodny — bowiem aby utrzymywać połączenie, musimy mieć stale otwartą tę konsolę. W dalszej części opiszę bardziej przystępne sposoby.

Autoryzacja przy pomocy PIN (przynajmniej w moim przypadku) jest domyślnie wyłączona, jeśli jednak chcemy zabezpieczyć kartę SIM w ten sposób, należy do /etc/wvdial.conf dodać jeszcze:

[Dialer aero2-pin]
Modem = /dev/ttyUSB0
Init1 = AT+CPIN=8888

(oczywiście podając właściwy PIN) i przed połączeniem wydać polecenie:

wvdial aero2-pin

Obsługa

Wcześniej testowo się połączyliśmy za pomocą wvdial aero2, metoda ta jednak jest trochę niewygodna — nie można bowiem zakończyć procesu ani zamknąć konsoli z uruchomionym programem. Tutaj opiszę kilka przystępniejszych wersji.

pon.wvdial

Pakiet wvdial oprócz programu o tej samej nazwie, udostępnia skrypt pon.wvdial, który służy do uruchamiania polecenia łączącego jako działającego w tle demona (analogicznie do programu pppd i skryptu pon, od którego wzięła się nazwa).

Argumenty dla skryptu przekazywane są do programu wvdial, zatem aby się połączyć należy wpisać w konsoli:

pon.wvdial aero2

Po czym można bez konsekwencji zamknąć konsolę. Tak ustanowione połączenie kończy się za pomocą:

poff.wvdial

Skrypty

Aby jeszcze wygodniej korzystać z Aero2, napisałem dwa proste skrypty.

Pierwszy — aero2-start — służy do ustanawiania połączenia (i sprawdzania czy się powiodło) w przystępniejszy sposób:

#!/bin/sh
[ -e /dev/ttyUSB0 ] || { echo "Modem not found"; exit 1; }
echo -n "Łączę z Aero2"
pon.wvdial aero2 >/dev/null 2>&1
COUNT=1
until ping -c1 -w1 208.67.222.222 >/dev/null 2>&1; do
    echo -n '.'
    COUNT=$((COUNT + 1))
    sleep .5
    if [ "$COUNT" -gt 20 ]; then
        echo " D'oh! " && exit 1
    fi
done
echo " OK"
echo "Połączenie ustanowione o `date +%H:%M`"
date "+%H:%M" >/tmp/aero2_kiedy.txt

Dodatkowo pokazuje on, o której godzinie połączenie zostało ustanowione i zapisuje tę informację w pliku /tmp/aero2_kiedy.txt. Ta jest wykorzystywana przez drugi skrypt — aero2-kiedy — informujący za ile minut mniej więcej połączenie zostanie przerwane.

#!/bin/sh

START_TIME=`cat /tmp/aero2_kiedy.txt`
START_MIN=`echo $START_TIME | cut -d: -f2 | sed -re "s/^0//g"`

NOW_TIME=`date +%H:%M`
NOW_MIN=`echo $NOW_TIME | cut -d: -f2 | sed -re "s/^0//g"`

if [ "$START_TIME" = "$NOW_TIME" ]; then
    KIEDY="60"
elif [ "$START_MIN" -gt "$NOW_MIN" ]; then
    KIEDY=$((START_MIN - NOW_MIN))
else
    KIEDY=$((60 + START_MIN - NOW_MIN))
fi

echo "Reset Aero2: ok. $KIEDY min."

Pomocne jeśli chcemy pobrać większy plik i nie wiemy czy uda się to zrobić przed rozłączeniem. Dodatkowo można połączyć powyższy skrypt ze skrótem klawiszowym i jakimś sposobem wizualizacji tekstu w sposób graficzny (zenity, aosd_cat, ...). Ponieważ jednak to już zależy od używanego środowiska graficznego i osobistych preferencji, nie opiszę tego w tym tekście.

Powyższe skrypty najlepiej zapisać jako /usr/local/bin/aero2-start i /usr/local/bin/aero2-kiedy i nadać im prawa do wykonywania (chmod +x plik). Dodatkowo, dla zachowania konwencji, można dodać skrypt lub alias aero2-stop wykonujący poff.wvdial.

Automatyczne uruchamianie połączenia przy starcie

Prosty skrypt (nie jest to najbardziej eleganckie rozwiązanie, aczkolwiek działa), który pozwala na uruchomienie połączenia podczas startu systemu, jeśli modem jest podłączony (i prawidłowo wykryty) oraz nie ma innego połączenia z internetem.

Do /etc/rc.local należy wkleić przed linijką exit 0:

echo -n "Running 3G modem... "
if [ -c /dev/ttyUSB0 ] && ! ping -c1 -w1 208.67.222.222 >/dev/null 2>&1; then
    echo "Yes (this may take few seconds)"
    (
        pon.wvdial aero2
        date "+%H:%M" >/tmp/aero2_kiedy.txt
        ## OpenDNS user? Uncomment below lines
        # echo "nameserver 208.67.222.222"  >/etc/resolv.conf
        # echo "nameserver 208.67.220.220" >>/etc/resolv.conf
    ) &
else
    echo "No (modem not plugged in, or network already available)"
fi

Najpierw sprawdzi on czy jest dostępne urządzenie znakowe /dev/ttyUSB0, jeśli tak — czy adres 208.67.222.222 (jeden z serwerów OpenDNS) odpowie na ping. Gdy nie odpowie (czyli najpewniej nie ma dostępnego internetu) — skrypt uruchomi połączenie przez modem.

Uwagi końcowe

Jeszcze kilka uwag końcowych:

  1. W sieci Aero2 SMS-y oraz kody USSD są zablokowane, zatem nie opisywałem tego zagadnienia w powyższym tekście. Informacje na ten temat można znaleźć w tekście Huawei E122 - instalacja i obsługa modemu 3G. W tym samym tekście znajduje się opis sprawdzania siły sygnału — tutaj wystarczy zrobić analogicznie (dodam, że w moim przypadku należy skorzystać z portu ttyUSB4, jeśli *0 jest zajęty).
  2. Aero2 nie ustala limitów transferu, zatem nie trzeba pilnować ile danych pobieramy i wysyłamy. Jeśli jednak ktoś jest tego ciekawy bądź korzysta z E3131 do łączenia się z inną siecią, może skorzystać z tekstu Statystyki wykorzystania łącza za pomocą vnStat.
  3. Pragnę podziękować użytkownikowi krasnij za podanie sposobu na przełączenie E3131 w tryb modemu (który wielce mi się przydał i prywatnie, i na potrzeby tego tekstu), autorowi bloga jdtech.pl za liczne i przydatne publikacje na temat Aero2 oraz dobrym ludziom tworzącym wiki.bez-kabli.pl.

OSnews Wykop Blip Flaker Kciuk Śledzik Facebook Identi.ca Twitter del.icio.us Google Bookmarks