Ubuntu 12.04 „Precise Pangolin“
Ubuntu 11.10 „Oneiric Ocelot“
Ubuntu 10.04 „Lucid Lynx“
Viele neue Netzwerk-Geräte mit USB-Anschluss wie WLAN- und UMTS-Sticks haben Treiber für Windows integriert und werden als sogenannte "flip-flop"- oder "Zero-CD"-Geräte bezeichnet. Diese Hardware wird zunächst immer als Speichermedium erkannt, damit die Treiber installiert werden können. Nach Installation der Treiber werden sie automatisch auf ihre eigentliche Funktion als Netzwerkkarte oder Modem umgeschaltet. Damit entfällt die unter Umständen mühsame Treibersuche, da diese quasi immer mit dabei sind.
Leider nutzt dieser auf Windows abgestimmte Mechanismus unter Linux nicht viel. Viele Geräte funktionieren auch unter Linux, z.B. mit dem usb-storage
- oder dem option
-Modul, einem optimierten Treiber für Hochgeschwindigkeits-Modems. Allerdings muss dazu erst der "Modus" umgeschaltet werden, da diese Art von Hardware auch unter Linux zunächst immer nur als Datenträger erkannt wird.
Für diese Umschaltung kann - abhängig von der eigenen Hardware - das Programm USB_ModeSwitch verwendet werden. Es unterstützt bereits eine Vielzahl
von Geräten und wird laufend weiter entwickelt. Das Programm ozerocdoff
basiert auf USB_ModeSwitch und bietet die gleiche Funktionalität, beschränkt sich aber auf Hardware der Firma Option
.
Falls die UMTS-Hardware ausschließlich unter Linux genutzt wird, lässt sich der "flip-flop"- oder "Zero-CD"-Mechanismus evtl. abschalten. Die dazu erforderlichen AT-Befehle sind leider nicht allgemein gültig, sondern müssen zuerst recherchiert werden und exakt zur verwendeten Hardware passen. Um die ermittelte Befehlssequenz an die Hardware zu senden, kann das Programm minicom
aus dem gleichnamigen Paket verwendet werden.
Achtung: bitte beachten, dass nach der dauerhaften Umschaltung der Windows-Treiber nicht mehr zugänglich ist.
Benötigt werden die Pakete [1]
usb-modeswitch
usb-modeswitch-data
mit apturl
Paketliste zum Kopieren:
sudo apt-get install usb-modeswitch usb-modeswitch-data
sudo aptitude install usb-modeswitch usb-modeswitch-data
Welche Version in Ubuntu enthalten ist, erfährt man über die Ubuntu Paketsuche . Das kann insbesondere hilfreich sein, wenn Systeme mit nicht funktionierendem Internetzugang mit manuell heruntergeladenen Paketen versorgt werden müssen.
Da sich das Programm noch in ständiger Weiterentwicklung befindet, sollte bei Problemen mit der eigenen Hardware entweder auf ein PPA bzw. Fremdpaket ausgewichen oder das Programm selbst aus dem Quelltext übersetzt (kompiliert) werden.
Eine neuere Version für Ubuntu 10.04 stellt der Debian Maintainer Didier Raboud zur Verfügung.
Adresszeile zum Hinzufügen des PPAs:
ppa:odyx/usb-modeswitch
Zusätzliche Fremdquellen können das System gefährden.
Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen bietet die PPA-Beschreibung vom Benutzer/Team odyx.
Damit Pakete aus dem PPA genutzt werden können, müssen die Paketquellen neu eingelesen werden.
Die neueste Version kann auch selbst kompiliert werden. Zuerst müssen folgende Pakete installiert [1] werden:
build-essential
libusb-dev
mit apturl
Paketliste zum Kopieren:
sudo apt-get install build-essential libusb-dev
sudo aptitude install build-essential libusb-dev
Dann kann der Quellcode von der Projektseite heruntergeladen, entpackt [3] und kompiliert [4] werden. Außerdem ist es auch hier ratsam, das neueste Archiv usb-modeswitch-data - meist neuer als die jeweilige Version von usb-modeswitch - herunterzuladen. Enthalten sind die aktuellen Geräte-Daten, udev-Regeln und Konfigurationsdateien. Auf der Projektseite ist vermerkt, mit welcher Programmversion es kompatibel ist.
Fremdsoftware kann das System gefährden.
Die Standard-Kompilierung ist die empfohlene Methode für bereits unterstützte Geräte. Installiert werden der Ordner mit den Konfigurationsdaten (/etc/usb-modeswitch.d), ein Wrapper-Skript, eine udev-Regel sowie das eigentliche Programm. Eine Liste der unterstützten Geräte, die bisher ohne weitere Vorarbeiten funktionieren, liegt geordnet nach USB-IDs im Verzeichnis usb_modeswitch.d vor. Aktualisierungen des usb-modeswitch-data-Paketes erfolgen meist in kürzeren Zeitabständen als das Programm selbst. Daher im Download-Abschnitt überprüfen, ob eine neuere Version vorliegt.
Versionen ab 1.1.x sind mit älteren Versionen ggf. nicht vollständig kompatibel, daher eine alte Version immer zuerst entfernen!
Wenn weitere Anpassungen für nicht unterstützte Geräte/Verbesserungen vorgenommen werden sollen, wird nur der Befehl make
verwendet. Danach müssen die entsprechenden Veränderungen an der /etc/usb_modeswitch.conf in einem Editor [5] mit Root-Rechten [6] vorgenommen werden. Das Programm muss dann mit Root-Rechten ausgeführt werden: "sudo usb-modeswitch
". Weitere Hinweise auf der troubleshooting-Sektion der Projektseite.
Für die automatische Erkennung werden folgende Bestandteile verwendet:
/usr/sbin/usb_modeswitch - Das eigentliche Programm
/lib/udev/usb_modeswitch - Ein Wrapper-Skript, welches das eigentliche Programm verwendet, um weitere ID-Prüfungen vorzunehmen und den Treiber zu laden
/lib/udev/rules.d/40-usb_modeswitch.rules - Die udev-Regel, die das Wrapper-Skript startet, wenn eine bekannte USB-ID erkannt wird
/etc/usb_modeswitch.conf - Globale Einstellungsdatei; hier kann das ausführliche Mitloggen des Umschaltvorganges aktiviert oder die Umschaltung komplett deaktiviert werden (falls man auf den Windows-Installationsspeicher zugreifen möchte).
/etc/usb_modeswitch.d und /usr/share/usb_modeswitch (ab Ubuntu 11.04) - Ein Verzeichnis, welches die spezifischen Setup-Informationen für die Geräte beinhaltet, jeweils nach den USB-IDs benannt, ggf. mit weiteren Merkmalen, wenn es zu bekannten Überschneidungen bei gleicher ID kommt. Wenn die USB-ID eines Gerätes in einem Namen dieser Liste auftaucht, bestehen gute Chancen, dass das Gerät unterstützt wird, selbst wenn dort ein anderer Hersteller/anderes Modell angegeben ist. Eine Zusammenstellung aller Konfigurationen wird unter dem Namen device_reference.txt auf der Projektseite zur Verfügung gestellt.
Die Bestandteile arbeiten folgendermaßen zusammen:
Wenn ein Gerät eingesteckt wird, sucht, und ggf. findet, das udev-System das Gerät in den Regeln der 40-usb_modeswitch.rules. Es startet das Wrapper-Skript über ein weiteres bash-Skript im Hintergrund. Dieses Wrapper-Skript extrahiert einige Parameter zur Beschreibung des Geräts aus udev und sammelt einige weitere Informationen, um sicherzustellen, dass das Gerät richtig erkannt wird. Leider reichen die USB-IDs alleine dafür nicht aus. Das Programm wird dann vom Wrapper-Skript mit dem (hoffentlich) richtigen Konfigurationsdateinamen als Parameter gestartet und führt den eigentlichen Modus-Wechsel durch. Bei Erfolg wird die (neue) Ziel-ID an das Wrapper-Skript übergeben, welches daraufhin überprüft, ob mit dem umgeschalteten Gerät Treiber/Module verbunden gewesen sind, indem es nach "ttyUSB
" oder "ttyACM
"-Einträgen in /dev sucht. Wenn keine solchen gefunden wurden, wird das "option
"-Modul mit "modprobe
" geladen (Fehler werden, weil sie hinein kompiliert sein könnten, ignoriert). Dann wird die USB-ID des umgeschalteten Geräts dem Treiber als "new_id
" übergeben.
Danach sollte das System das neue serielle Gerät automatisch erkennen. Nach Angaben des Entwicklers entsteht kein Schaden an der Hardware, wenn der Prozess fehlschlägt. Das Umschalten bzw. die Erkennung des umgeschalteten Gerätes kann allerdings einige Zeit (teilweise bis zu einer Minute) in Anspruch nehmen. Das ist alleine von der eingebauten Firmware abhängig.
Bei WLAN-Geräten kann es zu Problemen mit dem NetworkManager, insbesondere der ModemManager-Komponente kommen, die in Verbindung mit USB-Modems nicht sonderlich zuverlässig zu sein scheint. Vernünftige Resultate wurden mit dem Kommandozeilenprogramm wvdial und UMTSmon erzielt, sowie mit verschiedenen Anwendungen, die eine Benutzerschnittstelle über PPP (wie kppp) bereitstellen. Die Verwendung einiger der Programme erfordert allerdings etwas Vorwissen.
Die größte Hürde zur vollautomatischen Verwendung eines "umgeschalteten" Gerätes ist es, den richtigen Port für die Verbindung zu finden. Oft werden mehrere serielle Ports erstellt (teilweise bis zu fünf). Welches der richtige ist, lässt sich entweder über "Versuch und Irrtum" herausfinden, oder man findet den Port, der mit Interrupt-Transfer arbeitet. Das schafft der NetworkManager momentan leider noch nicht, und eine manuelle Wahl des Ports lässt er auch nicht zu.
Manche von USB_ModeSwitch unterstützte Geräte werden nicht umgeschaltet, weil sie nicht so initialisiert sind wie es USB_ModeSwitch erwartet. Hier fehlt meist die udev-Regel, die zusätzlich oder statt USB_ModeSwitch das Programm modem-modeswitch aus dem Paket udev verwendet. Dies kann bis Ubuntu Lucid Lynx 10.04 relativ einfach korrigiert werden. Mittels des Befehls
lsusb
sucht man bei eingestecktem Stick dessen sog. Vendor- und Product-IDs heraus, beispielsweise beim Huawei E160 (z.B. von O2, Tchibo und FONIC vertrieben):
ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Hier ist die Vendor-ID 12d1
und die Product-ID 1003
. Für diese trägt man dann eine Regel in die Datei /lib/udev/rules.d/61-option-modem-modeswitch.rules ein. Hierzu öffnet man sie in einem Editor [5] mit Root-Rechten [6] und fügt am Ende der Liste ähnlicher Regeln folgende Zeile ein (12d1
und 1003
durch die oben ermittelten IDs ersetzen):
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", RUN+="modem-modeswitch -v 0x%s{idVendor} -p 0x%s{idProduct} -t option-zerocd"
Ab Ubuntu 10.10 wird die Datei nicht automatisch bei der Installation erzeugt, wird aber weiterhin vom System erkannt, wenn sie von Hand angelegt wurde.
Nach einem Neustart sollte der betreffende Stick dann automatisch auf Modembetrieb umschalten. Im laufenden Betrieb kann dies in einem Terminal mit folgendem Befehl bewerkstelligt werden:
sudo service udev reload
Die weitergehende Verwendung von usb-modeswitch wird im Artikel XS Stick W14 beschrieben, um diese UMTS-Sticks in den Modem-Modus versetzen zu können.
Aktuelle Huawei-Sticks können im Terminal mit folgenden Befehl vom Datenträgermodus in den Modemmodus geschaltet werden:
sudo usb_modeswitch -v 12d1 -p 1c0b -M '55534243123456780000000000000011062000000100000000000000000000'
Die Product-ID 1c0b
ist dabei an die Product-ID des jeweiligen Huawei-Sticks im Datenträgermodus anzupassen. Nach dem manuellen Umschalten ist meist auch noch ein manuelles Laden des Treibers erforderlich:
sudo modprobe option echo "12d1 1c05" | sudo tee /sys/bus/usb-serial/drivers/option1/new_id
Die Product-ID 1c05
ist dabei durch die ProductID des Huawei-Sticks im Modemmodus zu ersetzen.
Eine Automatisierung dieser Befehle ist mittels udev möglich. Dazu legt man mit einem Editor [5] mit Root-Rechten [6] die Datei /etc/udev/rules.d/70-usb-modeswitch.rules mit folgendem Inhalt an:
# eigene udev-Regeln für UMTS-Sticks ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1c0b", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1c0b -M '55534243123456780000000000000011062000000100000000000000000000'" ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1c05", RUN+="/bin/bash -c 'modprobe option && echo 12d1 1c05 > /sys/bus/usb-serial/drivers/option1/new_id'"
Die Product-ID 1c0b
ist dabei durch die ID im Datenträgermodus, 1c05
durch die ID im Modemmodus zu ersetzen. Nach einem Neustart von udev oder des Systems sind die angelegten udev-Regeln dann aktiv.
Von USB_ModeSwitch unter Ubuntu unterstützte Geräte | ||||||
Handelsname | auch vertrieben als | USB-ID als Datenträger | USB-ID als Modem | Funktion | Anmerkungen | Ubuntu-Version |
Web'n'Walk Stick Fusion | ZTE MF637 | 19d2:2000 | 19d2:0037 | UMTS-Modem | Telekom-Beschreibung ![]() | 9.10 |
4G XS Stick W10/W14 | MobiData MBD-200HU | 1c9e:f000 | 1c9e:9603 | UMTS-Modem | Produktbeschreibung ![]() | 9.10 |
4G XS Stick P14 | - | 1c9e:f000 | 1c9e:9605 | UMTS-Modem | Produktbeschreibung ![]() | 10.04 |
Option iCON 210 | PROLiNK PHS100, Hyundai Mobile MB-810 | 1e0e:f000 | 1e0e:9000 | UMTS-Modem | Produktbeschreibung ![]() | 8.10, 9.04, 9.10 |
K3765-HV | K3765 | 12d1:1520 | 12d1:1465 | UMTS-Modem | Produktbeschreibung ![]() | 10.04 |
Huawei E620 / E1550 / E1552 / E1750 | BASE bzw. FONIC Surfstick / Medion S4012 / web'n'walk Stick Fusion II / wetter.com-Surfstick | 12d1:1446 | 12d1:1001/ 12d1:140c/ 12d1:1436/ 12d1:14ac | UMTS-Modem | Produktbeschreibung ![]() | 10.04, 10.10 |
Huawei E160 / E220 | O2 Stick / Tchibo Internet-Stick / FONIC SurfStick / Medion S4011 | 12d1:1003 | 12d1:1003 | UMTS-Modem | Produktbeschreibung ![]() | 10.04 |
Huawei E173 | Mobile Broadband USB Stick | 12d1:1446 | 12d1:1436 | UMTS-Modem | 11.04, davor s.Huawei-Sticks | |
Huawei E173s | Mobile Broadband USB Stick 615 | 12d1:1c0b | 12d1:1c05 | UMTS-Modem | Produktbeschreibung ![]() | 11.04, davor s.Huawei-Sticks |
Vodafone(Huawei) E173s-1 / K3770 | Pro7 Web Stick | 12d1:14d1 | 12d1:14c9 | UMTS-Modem | 11.10, davor s.Huawei-Sticks | |
Huawei E303 / E353Ws-2 | HiLink USB-Stick | 12d1:1f01 | 12d1:14db | UMTS-Modem | getestet ab 10.04, Anleitung im Forum | |
Huawei E352s-5 | Telekom web'n'walk Stick Fusion III | 12d1:14fe | 12d1:1506 | UMTS-Modem | Produktbeschreibung ![]() | 11.10, davor s.Huawei-Sticks |
Huawei K5005 | Vodafone Mobile Broadband LTE | 12d1:14c3 | 12d1:14c8 | UMTS-Modem | nach Eintrag in udev s.Huawei-Sticks | gestestet mit 10.04 und 11.10 |
Die Liste bitte um andere unter Ubuntu getestete Geräte erweitern! Auch der Entwickler von USB_ModeSwitch bittet darum, bisher nicht unterstützte Hardware zu melden. Er gibt außerdem Hilfestellung zur Ermittlung des Umschaltkommandos, wenn es noch nicht bekannt ist (siehe Link zum Support-Forum).
Vielleicht eine kleine Hilfe für zumindest Huawei-Stick Besitzer: Ist der eigene Stick nicht in obiger Liste aufgeführt, kann man sich die Modem-Modus Productid "selbst erarbeiten". Man schaltet bei laufenden tail -f /var/log/messages in einem Fenster, in der 2. Console mit usb_modeswitch -H das betreffende Huawei-USB-Stickdevice um. Sofern der eigene Stick nicht automatisch erkannt wird, verbleibt er oft nicht dauerhaft im Modemmodus. Man kann allerdings, sofern man schnell genug nachschaut, sowohl in /var/log/messages als auch im usbview die umgeschaltete productid erkennen. Bsp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #Stick wird in USB Port eingesteckt: kernel: [ 2846.707268] usb 2-2: new high speed USB device using ehci_hcd and address 13 kernel: [ 2847.113626] usb 2-2: New USB device found, idVendor=12d1, idProduct=14fe #<==== Massenspeicher-ID des Sticks(hier Huawei e353s-5) kernel: [ 2847.113632] usb 2-2: New USB device strings: Mfr=2, Product=1, SerialNumber=0 kernel: [ 2847.113637] usb 2-2: Product: HUAWEI Mobile kernel: [ 2847.113641] usb 2-2: Manufacturer: HUAWEI mtp-probe: checking bus 2, device 13: "/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-2" kernel: [ 2847.117421] scsi26 : usb-storage 2-2:1.0 kernel: [ 2847.117720] scsi27 : usb-storage 2-2:1.1 mtp-probe: bus: 2, device: 13 was not an MTP device kernel: [ 2848.118171] scsi 26:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 kernel: [ 2848.118181] scsi 27:0:0:0: Direct-Access HUAWEI SD Storage 2.31 PQ: 0 ANSI: 2 kernel: [ 2848.118427] sd 27:0:0:0: Attached scsi generic sg2 type 0 kernel: [ 2848.123146] sd 27:0:0:0: [sdb] Attached SCSI removable disk kernel: [ 2848.124368] sr1: scsi-1 drive kernel: [ 2848.124505] sr 26:0:0:0: Attached scsi CD-ROM sr1 kernel: [ 2848.124603] sr 26:0:0:0: Attached scsi generic sg3 type 5 #Nun wird im benachbarten Consolenfenster der befehl abgesetzt: usb_modeswitch -H -v 12d1 -p 14fe #Ergebnis: kernel: [ 2859.871270] usb 2-2: usbfs: process 10290 (usb_modeswitch) did not claim interface 0 before use kernel: [ 2859.872408] usb 2-2: USB disconnect, address 13 kernel: [ 2868.300270] usb 2-2: new high speed USB device using ehci_hcd and address 14 kernel: [ 2868.712674] usb 2-2: New USB device found, idVendor=12d1, idProduct=1506 # <==== nun wird die Modemmodus ID angezeigt :) kernel: [ 2868.712681] usb 2-2: New USB device strings: Mfr=3, Product=2, SerialNumber=0 kernel: [ 2868.712685] usb 2-2: Product: HUAWEI Mobile kernel: [ 2868.712689] usb 2-2: Manufacturer: HUAWEI |
Somit hat man alle benötigten Infos gewonnen.
Mobiler Koala - UMTS-Sticks unter Ubuntu 9.10 - Artikel Ubuntu User 02/2010
sakis3g - vollautomatische Erkennung und Einbindung von Surf-Sticks etc.