Usb modeswitch Intex 3.5g

Aus Cowwwiki
Zur Navigation springen Zur Suche springen

Hintergrund

Vorgeschichte: Als ich letztes Jahr im Urlaub war, gab es bei einem örtlichen Discounter ein 3G USB Modem inklusive SIM-Karte für 9,99 € - gekauft.

Ich als alter Linuxer, will das Teil natürlich unter Linux verwenden (damals ein Ubuntu 14.04, heute eine aktuelle Manjaro Distribution). Da gab es allerdings einige Schwierigkeiten. Das Hauptproblem waren die zwei verschiedenen Modus, welche manche USB-Modems haben, nämlich der Massenspeichermodus und der Modemmodus. Der Massenspeichermodus dient dazu, um für Microsoft Windows gleich die passenden Treiber mitzuliefern. In diesem Modus verhält sich der UMTS-Stick wie ein USB-Stick. Mit einem Befehl kann dieser Modus verlassen und der Modem-Modus gestartet werden. Das geht unter Linux mit diesem Stick leider nicht auf Anhieb.

Manuelles Umschalten

Ein bisschen Stöbern brachte mich schnell auf ein OS-Projekt mit dem Namen usb_modeswitch. Es dürfte bei den gängigen Distributionen dabei sein oder in den Paketquellen verfügbar sein. Normalerweise sollte dieses Programm alles automatisch übernehmen, d. h. UMTS-Modem einstecken, kurz warten und los gehts. Bei meinem Intex (zugegebenermaßen ein Billigmodell) war das leider nicht der Fall.

Kurzfristig konnte ich mir jedoch mit folgendem Befehl helfen:

sudo  usb_modeswitch -K -v 20a6 -p f00e

Ich habe mir dafür einen Alias in der .bashrc erstellt, sodass ich lediglich umtsmodem eingeben muss:

# let's call this via umtsmodem
alias umtsmodem='sudo  usb_modeswitch -K -v 20a6 -p f00e'

Automatisches Umschalten

Da ich aber nicht zufrieden war mit der manuellen Lösung, habe ich geschaut, warum es automatisch nicht klappt. Dazu muss man erst verstehen, wie das ganze grob funktioniert:

  1. usb_modeswitch liefert für die UMTS-Sticks udev-Regeln
  2. Beim Einstecken greift die passende Regel und ruft usb_modeswitch auf
  3. usb_modeswitch schaltet das UMTS Modem vom Massenspeicherbetrieb auf Modembetrieb um

Bei mir hat das Umschalten aber nicht geklappt, obwohl usb_modeswitch korrekt aufgerufen wurde. Ich habe mir für Debuggingzwecke in der /etc/usb_modeswitch.conf das Logging eingeschaltet. Habe ich den dort aufgeführten Befehl manuell aufgerufen, wurde das Modem korrekt umgeschaltet. Das brachte mich darauf, dass evtl. bei den udev-Regeln etwas nicht stimmt.

Diese These konnte ich bestätigen, indem ich die udev-Regeln manuell getriggert habe. Das kann man z. B. wie folgt veranlassen:

udevadm trigger --action=add --subsystem-match=usb

Interessanterweise hat dieser Aufruf auch zu einem Umschalten des Modems geführt. Hier war ich mir fast sicher, dass es ein zeitlich bedingtes Problem ist. Da die udev-Regeln ein Wrapperscript unter /usr/bin/usb_modeswitch_dispatcher aufrufen, habe ich dort am Anfang einen Sleep eingebaut. Fortan wird das Modem beim Einstecken korrekt umgeschaltet. Folgende Ziele habe ich in der Datei hinzugefügt:

# sleep for 10 seconds in order to get usb device ready
after 3000

Hinweis: Es handelt sich bei dieser Datei um ein tclsh-Script. Im Gegensatz zu Bash existiert hier kein Sleep-Befehl. Stattdessen kommt 'after' zum Einsatz und die Zeit wird in Millisekunden angegeben.