Ako na USB modem v Linuxe

Ako na USB modem v Linuxe
23.11.2010 02:00 | Články | drak_dragon
V poslednej dobe som sa na rôznych fórach už niekoľkokrát stretol s otázkou, ako rozbehať taký či onaký bezdrôtový USB modem na Linuxe. Keďže som sa už s takýmto zariadením stretol a podarilo sa mi ho (viac-menej úspešne) na tomto operačnom systéme spojazdniť, rozhodol som sa spísať postup pre tých, ktorí si s takýmto modemom nevedia rady.

Bezdrôtové modemy, okrem toho, že sú modemami, môžu zároveň obsahovať aj pamäťovú kartu a zvyčajne je na nich aj virtuálne CD-ROM médium, na ktorom bývajú uložené ovládače pre dané zariadenie. Problém pre používateľa Linuxu však môže nastať vtedy, ak dané zariadenie nie je tak celkom kompatibilné s naším operačným systémom a darmo pátrame po nejakom linuxovom ovládači - nemôžeme ho nájsť ani na spomínanom virtuálnom CD a ani na oficiálnych webových stránkach výrobcu. A presne s takýmto problémom som sa stretol aj ja. Jednalo sa o bezdrôtový modem od firmy Samsung, konkrétny model: SGH-Z810, ktorý sa plánoval používať na operačnom systéme Ubuntu 10.04. Tento návod je však možné použiť aj pre iné modemy a iné systémy založené na Linuxe.

Kedže som teda nikde nenašiel oficiálny ovládač pre toto zariadenie, pustil som sa do hľadania alternatívnych riešení a nekonečného skúšania. Moja snaha nakoniec bola odmenená úspechom, kde sa zase raz potvrdilo pravidlo: Komu sa nelení, tomu sa zelení. A teraz priamo k veci.
Pre začiatok, je potrebné mať nainštalovanú knižnicu libusb, ktorá by v Ubuntu mala byť. Pokiaľ prítomná nie je, je možné ju nájsť v Ubuntu repozitároch. Ďalej budeme potrebovať šikovnú vecičku, USB_ModeSwitch. Tento program je možné takisto nájsť v Ubuntu repozitároch (balík sa volá usb-modeswitch), prípadne na stránke autora, kde môžete nájsť aj ďalšie informácie o tomto kuse softwaru. Vyššie som písal, že zariadenie nie je kompatibilné so systémom. Nie je to tak celkom pravda. Modem, ako taký, kompatibilný s Linuxom je. Problém však je ten, že systém nie je schopný prepnúť toto zariadenie z režimu pamäťového zariadenia (je tam predsa jednak spomínaný virtuálny CD-ROM, jednak pamäťová karta) do režimu modemu. A práve na toto prepnutie nám slúži USB_ModeSwitch.
Ďalej budeme potrebovať nakonfigurovať USB_ModeSwitch pre dané zariadenie. Na to nám slúži súbor /etc/usb-modeswitch.conf. V tomto súbore odkomentujte odsek prislúchajúci k danému zariadeniu (v našom prípade odsek označený ako Samsung SGH-Z810 USB (with microSD card)). Pokiaľ v tomto priečinku konfiguračný súbor nemáme, môžeme si ho vytvoriť, a to s nasledujúcim obsahom:

# Samsung SGH-Z810 USB (with microSD card)

# This ID gets an "Option" treatment by newer kernels.
# Use module option "option_zero_cd=2" with usb-storage.
# A kernel patch to fix the problem is pending.

# Contributor: A Friend

DefaultVendor= 0x05c6
DefaultProduct= 0x1000

TargetVendor= 0x04e8
TargetProduct= 0x6601

CheckSuccess=10

# only for reference
MessageEndpoint=0x05

MessageContent="55534243123456780000000000000616000000000000000000000000000000"

Pokiaľ sa snažíte rozbehať iné zariadenie ako tento modem a súbor /etc/usb-modeswitch.conf si vytvárate ručne, tu si môžete stiahnuť súbor s informáciami o rôznych iných modemoch, ktoré potom doplníte do spomínaného konfiguračného súboru (súbor na stiahnutie je komprimovaný pomocou gzip).
Ak máme nakonfigurovaný program USB_ModeSwitch, potom pripojte modem k počítaču a počkajte, kým sa zobrazí ako pamäťové zariadenie. Ďalej spustite príkaz usb_modeswitch s právami roota. Pokiaľ vo výpise niečo nesedí, konkrétne výpis vyzerá nejako takto:

Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
Found default devices (1)
Accessing device 014 on bus 007 ...
Using endpoints 0x05 (out) and 0x85 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
No driver found. Either detached before or never attached

SCSI inquiry data (for identification)
-------------------------
Vendor String: ����
Model String: �����8��
Revision String: ��
-------------------------
Error: could not get description string "manufacturer"
Error: could not get description string "product"
Error: could not get description string "serial number"

USB description data (for identification)
-------------------------
Manufacturer:
Product:
Serial No.:
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x05 ...
OK, message successfully sent
Device is gone, skipping any further commands
-> Run lsusb to note any changes. Bye.

a dokonca nám ani príkaz lsusb neoznámi prítomnosť tohoto zariadenia, je potreba doplniť riadok InquireDevice=0 do súboru /etc/usb-modeswitch.conf. Bohužiaľ neviem, čo presne tento parameter robí, skrátka som ho nejakým zázrakom vygooglil a mne pomohol.
Ďalším krokom je vytvorenie súboru /etc/udev/rules.d/45-hotplug.rules. Obsahom tohoto súboru nech je toto:

SUBSYSTEM=="usb", SYSFS{idProduct}=="1000", SYSFS{idVendor}=="05c6", RUN+="/usr/sbin/usb_modeswitch"

Toto nám zautomatizuje prepínanie zariadenia do režimu modemu po pripojení, čiže nebudeme musieť viac používať príkaz usb_modeswitch.
Ďalej budeme pravdepodobne potrebovať nastaviť PPPD (Point-to-Point Protocol Daemon, ktorý by mal byť súčasťou Ubuntu). Píšem pravdepodobne, pretože sa domnievam, že nie všetky zariadenia to budú potrebovať - odporúčam teda skúsiť preskočiť nasledujúce nastavenia a vyskúšať funkčnosť modemu aj bez nich. Tieto nastavenia sú špecifické v závislosti od operátora, preto ak nevyužívate služieb mobilného operátora Orange Slovensko, asi budú aj tak nepoužiteľné.
Prvým konfiguračným súborom je /etc/ppp/options. Upozorňujem, že toto nie je kompletný konfiguračný súbor - sú to iba riadky, ktoré boli doplnené alebo zmenené oproti východziemu nastaveniu.

# noproxyarp
nodetach
# updetach
# noipx
noipdefault

Ďalší konfigurák je /etc/ppp/peers/provider:

# Orange Slovakia (modem Samsung SGH Z810)
/dev/ttyACM0
921600
crtscts
# user ""
# show-password
refuse-pap
refuse-mschap
refuse-mschap-v2
noauth
defaultroute
usepeerdns
# dryrun
# debug
# chat -v -f ... verbose
connect '/usr/sbin/chat -f /etc/ppp/chatscripts/sgh-z810'
noipdefault
ipcp-accept-local
# local
# novj
# novjccomp
nobsdcomp
nodeflate
# lcp-echo-interval 10
# lcp-echo-failure 5
# lcp-restart 5
disconnect '/usr/sbin/chat -f /etc/ppp/chatscripts/sgh-z810-hang'
# noccp

Potom /etc/ppp/chatscripts/sgh-z810:

# Samsung SGH-Z810 (HDSPA modem)
TIMEOUT 5
# ABORT 'NO ANSWER'
# ABORT 'ERROR'
ABORT 'BUSY'
ABORT 'NO CARRIER'
ABORT 'VOICE'
ABORT 'NO DIALTONE'
# ECHO OFF
# REPORT
SAY "Starting connect script\n"
# Z = reset the modem
'' ATZ
# is PIN necessary?
OK AT+CPIN?
# E0 - disable echoing of characters received from DTE in the command mode
# V1 - verbose result codes
# &D2 - upon DTR switch from ON to OFF, the call is released
# &C1 - DCD matches state of the remote modem's data carrier
# S0=0 - no automatic answer
OK ATE0V1&D2&C1S0=0
OK ATS7=60
OK ATS0=0
# show capabilities
#OK AT+GCAP
#OK AT+CLCK=?
# signal strength (GPRS >15)
OK AT+CSQ
# display network
#OK AT+COPS?
# terminal adapter manufacturer
# OK AT+GMI
# mobile equipment manufacturer
# OK AT+CGMI
# mobile equipment revision
# OK AT+CGMR
# show IMEI
OK AT+GSN
# GPRS network registration status
# OK AT+CGREG?
SAY "Setting PDP context\n"
# define PDP (Packet Data Protocol) context
# +CGDCONT=,"IP","internet"
SAY "Dialing...\n"
# D = dial a number
OK 'ATDT*99#'
CONNECT ''

A nakoniec /etc/ppp/chatscripts/sgh-z810-hang:

# Samsung SGH-Z810 (HDSPA modem)
# insert a BREAK
#'' \K
# +++ = switches the modem from data to command state
# H = hang up
'' "+++ATH0"
SAY "Disconnected.\n"

Po tomto všetkom sa treba trocha povŕtať v správe pripojení, tj. povoliť Mobile Broadband v menu pri pravom kliknutí na ikonu správcu pripojení v paneli a vytvoriť nové spojenie v manažéri sieťových spojení v záložke Mobile Broadband (pravý klik na správcu, potom klik na Upraviť spojenia...). Teraz by malo byť vidieť nové pripojenie v ponuke správcu pripojení a potom už stačí posledné kliknutie, chvíľku počkať a ak sa všetko urobilo správne, mali by ste byť online.

Napriek veľkej snahe o stopercentné fungovanie tohoto modemu, toto riešenie má nejakú svoju chybičku na kráse. A to - pripojenie občas spadne. Teda aspoň v mojom prípade. Myslím ale, že na to, že zariadeniu sa nedostalo podpory zo strany výrobcu pre operačný systém Linux, je to stále lepšie ako nič. Sám autor programu USB_ModeSwitch na svojej stránke píše, že tento jeho program je vhodný na experimentovanie s nepodporovaným hardwarom. Odporúčam teda obstarať si radšej modem s podporou pre Linux, ak to je možné, a tento návod považovať iba ako riešenie v núdzi.

    • Sakis3G 23.11.2010 | 04:24
      Svantoviit   Návštevník
      Ak sa vam nechce hrabat v konfigurakoch urcite vyskusajte Sakis3G. Skript vyuziva usb_modeswitch a automatizuje pripajenie cez usb modem. Ovladanie aj cez GUI. U mna fungoval out-of-the-box. Skript a hrbu info najdete na http://www.sakis3g.org/
      • Re: Sakis3G 04.12.2010 | 15:05
        unknown   Návštevník
        Toto nema cenu. Skor ma to znechuti ako snazi sa spojazdnit modem konfigovym sposobom.