Usb modeswitch Intex 3.5g
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:
- usb_modeswitch liefert für die UMTS-Sticks udev-Regeln
- Beim Einstecken greift die passende Regel und ruft usb_modeswitch auf
- 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.