Исходные данные: Ubuntu 10.04.2, Мегафон (Красноярск)
Вообще в самом модеме уже есть софт для работы. Поддерживаются Windows и Linux (вроде бы и MAC OS, но не пробовал). Но после перепрошивки модема новым Firmware в Linux работа приложения Mobile Partner прекратилась. Переустановка не помогла. Понижать версию прошивки модема не хотелось и я стал пробовать оживить устройство через Network Manager.
Сразу скажу - фирменный софт написан на Java и довольно тормозной, поэтому ну его нафиг. Единственный его плюс - можно удобно смотреть и пополнять балансы, отправлять SMS. На этом удобства заканчиваются.
Внимание! Фирменный софт модифицирует sudoers, что небезопасно и вообще ай-ай-ай: http://habrahabr.ru/blogs/linux/131302/
Поэтому я решил избавиться от этой поделки и жить проще и удобнее.
Для начала обязательно удаляем Mobile Partner (если конечно он был установлен):
# ./UninstallMobilePartner
Далее нужно установить пакет usb-modeswitch, иначе NM не увидит наш модем:
# sudo apt-get install usb-modeswitch
Создаем файлик /etc/usb_modeswitch.d/12d1:140c (да, именно такое имя файла - 12d1:140c)
######################################################## # Huawei E173 (HSPA+ modem) DefaultVendor= 0x12d1 DefaultProduct=0x140c TargetVendor= 0x12d1 TargetProduct=0x140c CheckSuccess=20 MessageContent="55534243123456780000000000000011060000000000000000000000000000"
Создаем еще один файлик /etc/udev/rules.d/45-huawei173.rules
SUBSYSTEM=="usb", SYSFS{idProduct}=="140c", SYSFS{idVendor}=="12d1", RUN+="/lib/udev/modem-modeswitch --vendor 0x12d1 --product 0x140c --type option-zerocd"
Далее настраиваем NM:
Перетыкаем модем, ждем пока определятся всего его запчасти, соединяемся.
Примечание: почему-то мое субъективное мнение таково, что скорость соединения стала выше и само соединение стабильнее.
Еще примечание: первая попытка подключения завершается неудачей, при повторном подключении все ОК. Ощущение что просто не успевает подгрузиться какой-то модуль, но не проверял.
Неопробовано в боевых условия, взял отсюда: http://wiki.russianfedora.ru/index.php/USB-модемы
#!/bin/bash function decodeUCS2 () # декодирует UCS { bytes=$(echo -n $1 | sed "s/\(.\{2\}\)/\\\x\1/g") REPLY=$(printf $bytes | iconv -f UCS-2BE -t UTF-8) } function encodePDU () # кодирует в PDU { in=$1 let "in_len=${#in}-1" for chr in $(seq 0 $in_len) do let "chr2=$chr+1" let "t=$chr%8+1" if [ "$t" -ne 8 ]; then byte=$(printf "%d" "'${in:$chr:1}") let "c=$byte>>($chr%8)" let "c2=(1<<$t)-1" byte2=$(printf "%d" "'${in:$chr2:1}") let "b=$byte2 & $c2" let "c=$b<<(8-$t) | $c" REPLY=$REPLY$(echo "obase=16; $c" | bc | sed "s/^\(.\{,1\}\)$/0\1/") fi done } function USSD () # выполняет USSD запрос { $(printf "AT+CUSD=1,$1,15\r\n" > /dev/ttyUSB$ttyID) REPLY=$(grep -m 1 "+CUSD" /dev/ttyUSB$ttyID | sed "s/.*\"\([A-F0-9]*\)\".*/\1/") decodeUCS2 $REPLY } function data_traffic () # преобразователь инфы авторепортов модема { i= 0 REPLY=$1 REPLY2=$1 data_text=( "байт" "Кбайт" "Мбайт" "Гбайт" "Тбайт" ) #ИМХО больше никто не скачает while [ $REPLY2 -gt 1024 ] do REPLY=$(echo "scale = 2 ; $REPLY/1024" | bc) REPLY2=$(echo "$REPLY2/1024" | bc) let "i=i+1" done REPLY="$REPLY ${data_text[$i]}" } if ls /dev/ttyUSB* > /dev/null; then ttyID= Здесь должен быть номер вашего /dev/ttyUSB, например ttyID=2. В подключенном и отключенном режимах он разный. if [ -z "$*" ]; then op=$(zenity --list --text="Выберите операцию:" --column="" --column="" --height="280" --width="280" --title="Билайн Интернет Дома" --print-column=1 --hide-column=1 "balance" "Проверить баланс" "start" "Активация стартового баланса" "req" "Выполнить USSD запрос" "at" "Выполнить AT комманду" "info" "Информация о соединении") elif [ $# -gt 1 ]; then op=$(echo -n $* |sed "s/\(.*\) .*/\1/") op2=$(echo -n $* |sed "s/.* \(.*\)/\1/") else op=$* fi case $op in balance) USSD "AA184C3602" MSG=$(echo -n $REPLY | sed "s/\.Дета.*//") ;; start) USSD "AA182CA68AC562B111" MSG=$REPLY ;; req) if [ -z "$op2" ]; then number=$(zenity --entry --text="Введите номер" --title="Билайн Интернет Дома" --width=270) else number=$op2 fi encodePDU $number USSD $REPLY MSG=$REPLY ;; at) if [ -z "$op2" ]; then cmd=$(zenity --entry --text="Введите AT комманду" --title="Билайн Интернет Дома" --width=270) else cmd=$op2 fi cmd=$(echo -n $cmd | tr a-z A-Z) cmd2=$(echo -n $cmd | sed "s/^AT//; s/\(.[A-Za-z0-9]*\).*/\1/") $(printf "$cmd\r\n" > /dev/ttyUSB$ttyID) MSG=$(grep -m 1 "$cmd2" /dev/ttyUSB$ttyID) ;; info) DSFLOWRPT=$(grep -m 1 "SFLOWRPT" /dev/ttyUSB$ttyID | sed "s/.*://g") for i in `seq 1 5` do info_[$i]=$(echo -n "$DSFLOWRPT" | cut -f$i -d, | sed "s/./ibase=16; /" | bc) done let "time=${info_[1]}/60" let "speed_trans=${info_[2]}/1024" let "speed_rec=${info_[3]}/1024" data_traffic "${info_[4]}" ; trans_data=$REPLY data_traffic "${info_[5]}" ; rec_data=$REPLY MSG="Время соединения: $time мин.<br/>Передача данных: $speed_trans Кбит/c<br/>Получение данных: $speed_rec Кбит/с<br/>Передано данных: $trans_data<br/>Получено данных: $rec_data" ;; *) MSG="Неверная операция" esac else MSG="Модем не подключен" fi if [ -n "$MSG" ]; then $(notify-send "Билайн Интернет Дома" "$MSG") fi
режим «только модем»
echo -e "AT^U2DIAG=0" > /dev/ttyUSB0
режим «modem + CD-ROM»
echo -e "AT^U2DIAG=1" > /dev/ttyUSB0
режим «modem + CD-ROM + Card Reader»
echo -e "AT^U2DIAG=255" > /dev/ttyUSB0
режим «modem + Card Reader»
echo -e "AT^U2DIAG=256" > /dev/ttyUSB0
режим «edge/gprs»
echo -e "AT+ZSNT=1,0,0\r\n" > /dev/ttyUSB0
режим 3g
echo -e "AT+ZSNT=0,0,2\r\n" > /dev/ttyUSB0
Для начала необходимо обновить прошивку модема, взять можно здесь: http://kras.shop.megafon.ru/modems/88430.html#files
Прошивку для Asus WL-500gP берем тут: https://code.google.com/p/wl500g/, аккуратно выбираем среди прощивок именно свою модель! Перешиваем роутер, делаем базовые настройки (SSID, шифрование и т.д.).
Втыкаем модем в роутер, открываем USB Network Devices ⇒ 3G/CDMA Modem, устанавливаем следующие параметры:
Остальные настройки по желанию
Применяем изменения: Apply ⇒ Finish
После перезагрузки все должно заработать.