Blog Image

Linux^2

What you may find here

In this blog you'll mainly find all things Linux - problems, solutions, reports, rants, tips & tricks etc. with the occasional off-topic entry thrown in. You never would have guessed looking at the URL, huh?
In diesem Blog findet ihr hauptsächlich Themen rund um Linux - Probleme, Lösungen, Berichte, Meinungen, Tips & Tricks und dazwischen ein paar überhaupt nicht dazu passende Einträge. Wärt ihr bei der URL nie drauf gekommen, ne?

Mailt mal! Email me!

Nur eine einfache Abfrage…

gsm-ussd Posted on Fr, Mai 07, 2010 14:26:20

Eine kleine Entstehungsgeschichte

Da ich jeden Arbeitstag eine gute Strecke im Zug pendele, ist mir mein Laptop zum ständigen Begleiter geworden. Spielen, lesen, lernen, programmieren, schreiben geht mir mit ein wenig Musik auf den Ohren leicht von der Hand. Fehlt eigentlich nur noch die Möglichkeit, ein wenig surfen zu können. So ein UMTS-Stick wäre da schon eine schöne Sache – ein paar textlastige Info-Websites kann man ja schon aushilfsweise per Handy besuchen, aber warum mit einem Briefmarkendisplay begnügen, wenn man dem Browser auch 1280×800 Pixel zur Verfügung stellen kann?

Als Aldi den „Medion S4011 Surfstick“ in ihr Sortiment aufnahm, dauerte es nur eine kleine Recherche lang (kein SIM-Lock, ist in Wirklichkeit ein Stick von Huawei und wird unter Linux unterstützt), bis ich meine Technikausstattung um ein UMTS-Modem erweiterte. Obwohl ich sonst mit dem Prepaid-Tarif von Aldi (Medion Talk, E-Plus-Reseller) zufrieden bin, kaufte ich mir eine Congstar SIM dazu. Warum? Auf einigen Streckenabschnitten ist die E-Plus-Netzabdeckung so schlecht, dass Telefonate zusammenbrechen. Da wollte ich mal testen, ob das D1-Netz auf der Strecke besser ausgebaut bzw. stabiler ist.

Wie das Leben so spielt, hatte ich nun zwar den Stick, aber aus verschiedenen Gründen erst mal keine Zeit, damit auch wirklich zu basteln. Letzten Endes war die Inbetriebnahme unter Linux aber auch kein Riesenproblem: Unter Kubuntu 9.10 wird der Stick beim Einstecken erkannt und im knetworkmanager angeboten. Die Einrichtung des Zugangs war bis auf den knetworkmanager-Hirnschaden, dass man als Einwahlnummer nur „*99“ eintragen darf („**1#“ ergänzt das Programm von alleine!), kein echtes Problem. So surfte ich denn ein wenig umher und war’s zufrieden – für 35¢ pro MB, abgerechnet in 10K-Paketen. Nicht gerade billig, aber sooo viel Traffic wird man ja schon nicht verursachen. Apropos, wie ist eigentlich noch mein Guthaben auf der Karte?

Auf dem Handy ist die Guthabenabfrage kein Problem: „*100#“ ist bei so ziemlich jedem Prepaid-Tarif die Abfrage für’s Restguthaben. Notfalls kann man ja auch die Servicenummer anrufen und sich durch die Menüs arbeiten, aber so viel Geduld bringe ich normalerweise nicht auf. Aber wie jetzt diese Abfrage mit dem UMTS-Stick stellen?

An dieser Stelle ergaben sich mehrere Möglichkeiten.

  1. Windows statt Linux auf dem Laptop installieren, denn die Software, die der Stick per ZeroCD mitbringt (Windows-Only natürlich), hat dafür eine Funktion.
  2. Nach Linux-Tools recherchieren für diesen Zweck recherchieren. Ich kann doch nicht der Erste mit diesem Problem sein!
  3. Die SIM-Karte aus dem Stick ziehen, in ein Handy packen, die Abfrage machen und den Ausgangszustand wieder herstellen.
  4. Forschen, wie der Stick funktioniert und dann sich selbst ein Tool dazu programmieren.

Selbstverständlich fiel „Lösung“ Nr. 1 sofort flach. Schließlich wollte ich ja nicht das Pferd von hinten aufzäumen.

Lösung Nummer 2 hat mich einige Zeit gekostet, nur um einsehen zu müssen, dass ich scheinbar doch der Erste war, der dieses Problem hatte. Das ansonsten sehr umfangreiche umtsmon hat Schwierigkeiten mit dem 64-Bit-Linux und scheinbar auch keine Funktion, um solche Abfragen zu stellen. Jedoch war die Zeit, die ich in die Recherche dieser Tools steckte, nicht ganz verloren, da sich jede Menge Informationen zu USB-UMTS-Modems im Allgemeinen und Huawei-Modems im Speziellen finden ließ. Die wichtigsten Hinweise waren die Erläuterung, dass Code wie „*100#“ USSD-Codes sind und dass ein UMTS-Modem genau das ist: Ein Modem wie anno dazumals und daher mittels AT-Befehlssatz zu steuern.

Lösung Nummer 3 habe ich exakt einmal ausprobiert. Abgesehen von der Tatsache, dass der Stick die SIM-Karte nur widerwillig hergegeben hat, musste ich sowohl den Stick als auch das Handy komplett zerlegen – für eine schnelle Guthabenabfrage im Zug vollkommen ausgeschlossen.

Seufz. Da war ja noch Lösung Numero 4…

Also erst mal etwas forschen. Steckt man den Stick an, schlägt sich das nach kurzer Zeit im Kernellog nieder:

usb 2-3: new high speed USB device using ehci_hcd and address 10
usb 2-3: configuration #1 chosen from 1 choice
option 2-3:1.0: GSM modem (1-port) converter detected
usb 2-3: GSM modem (1-port) converter now attached to ttyUSB0
option 2-3:1.1: GSM modem (1-port) converter detected
usb 2-3: GSM modem (1-port) converter now attached to ttyUSB1
scsi23 : SCSI emulation for USB Mass Storage devices
scsi24 : SCSI emulation for USB Mass Storage devices
scsi 24:0:0:0: Direct-Access HUAWEI MMC Storage 2.31 PQ: 0 ANSI: 2
sd 24:0:0:0: Attached scsi generic sg2 type 0
scsi 23:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
sd 24:0:0:0: [sdb] 15564800 512-byte logical blocks: (7.96 GB/7.42 GiB)
sd 24:0:0:0: [sdb] Write Protect is off
sdb: sdb1
sd 24:0:0:0: [sdb] Attached SCSI removable disk
sr1: scsi-1 drive
sr 23:0:0:0: Attached scsi generic sg3 type 5

CD-ROM? Ach ja, das ZeroCD-Verfahren, bei dem der Stick dem Rechner vorgaukelt, es wäre ein Laufwerk mit eingelegtem Medium, um direkt Treiber und Software für die eigentliche Funktion des Sticks zur Verfügung zu stellen. Der MMC-Storage entspricht der Micro-SDHC-Karte, die am Stick eingesteckt werden kann. Um an die eigentliche UMTS-Modem-Funktioninalität des Sticks zu gelangen, muss der Kernel diesen erst umschalten. Bei Kerneln vor Version 2.6.20(?) war dazu ein Programm wie usb_modeswitch, ozerocdoff oder huaweiAktBbo notwendig.

Wie man an den „GSM-Modem converter now attached to ttyUSB0/1“- Meldungen erkennen kann, hat der Kernel den Stick bereits als UMTS-Modem erkannt und aktiviert. Warum aber stellt ein Stick zwei serielle Schnittstellen bereit? /dev/ttyUSB0 stellt den PPP-Port dar; hierüber laufen bei stehender Verbindung die Daten. /dev/ttyUSB1 dagegen ist der AT- oder Control-Port, über den man dem Modem Anweisung erteilen kann oder davon Statusmeldung lesen kann. Was hier so simpel und einfach klingt, hat mich zu Beginn der Arbeit sicherlich zwei Stunden Zeit gekostet: Ein auf /dev/ttyUSB0 eingebenes Kommando gibt zwar noch das dazugehörige OK oder ERROR über den gleichen Port aus, aber das spätere Ergebnis einer Netzabfrage bekommt man nur auf /dev/ttyUSB1 zu sehen…

Um also mit dem Modem in Kontakt zu treten, muss man das passende Device öffnen und kann dann darüber im Dialog Kommandos absetzen und die Antworten dazu auslesen. Das Tool der Wahl dazu war picocom, da es den Vorteil hat, sich vollkommen aus der Kommunikation zwischen Programmierer und Modem herauszuhalten. Lediglich eine Log-Funktion habe ich mir manchmal gewünscht, aber mit Copy&Paste gibt es einen einfachen Workaround.

ALso frohen Mutes „picocom /dev/ttyUSB1“ eingeben und – Kontakt! Alle paar Sekunden laufen Meldungen wie

^BOOT:31610740,0,0,0,75

^RSSI:15

^BOOT:31610740,0,0,0,75

^BOOT:31610740,0,0,0,75

^RSSI:15

^MODE:5,5

durch’s Terminal. Ein zaghaftes „AT“ beantwortet das Modem auch mit „OK„, die Anfrage nach Modeminformationen („ATI„) beantwortet es mit

Manufacturer: huawei
Model: E160
Revision: 11.608.06.00.52
IMEI: 123456789012345
+GCAP: +CGSM,+DS,+ES

OK

Schön zu wissen: lsusb meldete das Modem als E220, da Huawei ein und dieselbe USB-ID für mehrere Modemserien verwendet… Na, denn mal die USSD-Abfrage stellen:

AT+CUSD=1,“*100#“,15
ERROR

Nanu? Laut Webrecherche und GSM-Standard hätte das klappen sollen. Den entscheidenden Hinweis brachte ein Thread im technischen Forum bei Huawei selbst: Die für’s Netzwerk nötige Umkodierung des Strings kann beispielsweise ein E169 in der Firmware vornehmen, ein E160 dagegen nicht. Weitere Infos aus dem mwconn-Forum und von nobbi.com liessen das Bild dann klar werden. Folgendes war zu programmieren:

  1. USSD-Code in anderen Zeichensatz überführen (GSM 03.38) und umkodieren
  2. Generell mit dem Modem sprechen können, dabei aber irrelevante Statusmeldungen unterdrücken
  3. Prüfen, ob überhaupt ein Modem angeschlossen ist
  4. Prüfen, ob es eine PIN benötigt, falls ja, diese setzen. Klappt das nicht, abbrechen!
  5. Abfrage stellen und das Ergebnis erwarten
  6. Das Ergebnis wieder dekodieren (entpacken, nach UTF-8 umsetzen)

Und wieder einmal zeigte sich, dass blinder Aktionismus weh tut. Perl bringt seit Version 5.8 das Modul Encoding mit, welches auch eine Konvertierung aus/zu dem Zeichensatz GSM03.38 beherrscht. Das habe ich aber erst herausgefunden (genauer gesagt – überhaupt danach gesucht), als ich eigene Routinen schon geschrieben hatte…

Die Kommunikation mit dem Modem erledigt das Modul Expect. Dieses Modul implementiert die Funktionalität des TCL-Tools expect in Perl; man kann es sich als ein ultimativ flexibles Mittel zur Programmierung von Chat-Skripten vorstellen.

Mit dieser Infrastruktur ist grundsätzlich schon eine gute Kommunikation mit dem Modem möglich, wenn da nicht noch das Umpacken der Daten in die Netzwerkrepräsentation wäre, die das E160 benötigt. Also noch ein wenig Bitschiebereien implementieren; das Packverfahren wird übrigens auf http://www.nobbi.com/sms_pdu.html unter „User Data:“ prima dargestellt.

Und dann kommen noch die äußeren Begleitumstände dazu: Da ich ja schon immer mal den Umgang mit git oder Mercurial lernen wollte, gab dieses Projekt dafür das Versuchskaninchen ab. Und wenn nun auch andere an so einem Tool Interesse haben, dann sollte man auch direkt eine Website dazu anlegen, bei github.com ein öffentliches Repository anlegen, die Dokumentation nicht nur auf Deutsch, sondern auch auf Englisch schreiben, dabei auch Ausgaben & Kommentare auf Englisch umstellen… Die Liste ließe sich problemfrei noch erweitern. Aber dazu werde ich später noch mehr schreiben.

Grüße,
Jochen



gsm-ussd 0.2.0! Now with GUI! (Almost.)

gsm-ussd Posted on Di, Mai 04, 2010 22:50:48

Hey, World!

Thanks to the friendly help of gsm-ussd users in this debianforum.de thread (Attention: German spoken there), there’s a new release of gsm-ussd: v0.2.0 is out.

A few modems were tested in addition to my crappy E160. As a result, other modems with a bit more brain than my retarded E160 should work for real this time. To be exact: Better modems don’t need to encode the USSD query as a Hexstring of packed seven bit values (and don’t need to decode teh answer out of several encodings…). If gsm-ussd recognizes a Non-E160, it will use cleartext. You can use the options „–cleartext“ or „–no-cleartext“ at your own risk.

If you prefer clicking to typing, xussd is for you. xussd is a shellscript which runs gsm-ussd, too, but beautifies its input and output with kdialog (if you’re running KDE) or zenity (if GNOME is your DE of choice). There are input boxes for USSD query and PIN, the modem device still has to be set by option „-m /dev/my-modem-ctrl-port“ at run time. Just create a desktop icon which runs xussd and specify your modem device there.

Here are the downloadable files:
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.2.0-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.2.0-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.2.0-0_all.deb

As usual the reminder that the real project is on github.com:
http://github.com/JochenHoch2/gsm-ussd.git
or
git://github.com/JochenHoch2/gsm-ussd.git

Good to see that there’s some interest in my little script!

Have fun,
Jochen



gsm-ussd 0.2.0! Jetzt auch mit GUI! (Beinahe.)

gsm-ussd Posted on Di, Mai 04, 2010 21:35:35

Hi, Welt!

Aufgrund der tatkräftigen Unterstützung von gsm-ussd Anwendern in diesem Thread auf debianforum.de gibt es eine neue Release von gsm-ussd: v0.2.0 ist raus.

Ein paar Modems wurden zusätzlich getestet. Als Ergebnis sollten diesmal wirklich
auch andere Modems als das E160 funktionieren. Um genau zu sein: Modems mit ein bisschen mehr Grips als das E160 benötigen keine Umkodierung der USSD-Abfrage in einen Hexstring aus gepackten 7-Bit-Werten (und auch keine Dekodierung der Antwort aus verschiedenen Kodierungen…). Erkennt gsm-ussd ein solches Nicht-E160, verwendet es direkt Klartext. Man kann die Erkennung auch auf eigene Gefahr über die Optionen „–cleartext“ bzw. „–no-cleartext“ übergehen.

Wer nicht so gerne tippt, sondern lieber klickt, für den gibt es jetzt zusätzlich xussd. Das ist ein Shellskript, welches letzten Endes auch nur wieder gsm-ussd aufruft, dies aber über kdialog (unter KDE) bzw. zenity (unter GNOME) anhübscht. USSD-Abfrage und PIN werden abgefragt, Modemgerät muss ggf. mit Parameter „-m /dev/mein-modem-ctrl-port“ beim Aufruf mitgegeben werden. So sollte es kein Problem sein, sich ein Icon auf den Desktop zu legen, über das man per Mausklick die Abfrage starten kann.

Hier die Dateien zum Download:
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.2.0-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.2.0-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.2.0-0_all.deb

Wie üblich liegt das eigentliche Projekt auf github.com:
http://github.com/JochenHoch2/gsm-ussd.git
bzw.
git://github.com/JochenHoch2/gsm-ussd.git

Schön, dass sich auch ein paar Leute für das interessieren, was ich mir so zusammenklöppel!.

Viel Spass damit,
Jochen



Impact of gsm-ussd 0.1.2!

gsm-ussd Posted on Sa, Mai 01, 2010 21:02:37

I hope you are having a great First of May!

Instead of a maypole I give you gsm-ussd 0.1.2. Nothing much happened with gsm-ussd in itself; if you already have it installed and use it, you probably won’t need version 0.1.2.

The real news are happening in the project infastructure: Running „make rpm“ in the top level directory of the project will create a RPM package in the „packages/“ subdirectory, just like „make tar“ and „make deb“! At this time the package was tested on Fedora Core 12. Please give feedback of success/failure on other RPM-based distributions, if you try it!

Thanks for the quick implementation of the RPM package creation go to Marcel, who wrote the highly useful comments to the 0.1.1 posting. 95% of the work was done by him!

Just as with the DEB package, the following is true too for the RPM package: The tar file contains a few files more than the RPM package, but if you’re not interested in developing gsm-ussd, the RPM package will be easier to install:

# rpm -ihv gsm-ussd-0.1.2-0.noarch.rpm

Here are the downloads:
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.2-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.1.2-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.2-0_all.deb

As a quick reminder: If you’re interested in contributing to gsm-ussd, have a look at the git repository:
http://github.com/JochenHoch2/gsm-ussd.git
or
git://github.com/JochenHoch2/gsm-ussd.git

Next will be a small GUI based on kdialog and zenity, which will become version 0.2.0.

Have fun,
Jochen



gsm-ussd 0.1.2 ist aufgeschlagen!

gsm-ussd Posted on Sa, Mai 01, 2010 20:39:41

Einen schönen 1. Mai wünsche ich!

Anstelle eines Maibaums setze ich Euch hiermit gsm-ussd 0.1.2. Weiterhin hat sich an der eigentlichen Funktionalität von gsm-ussd nicht viel getan; wer es schon erfolgreich bei sich installiert hat und nutzt, benötigt v0.1.2 nicht unbedingt.

Die eigentlichen Neuigkeiten liegen in der Infrastruktur des Projekts: Der Aufruf „make rpm“ im Top-Level-Verzeichnis des Projekts erstellt nun analog zu „make deb“ und „make tar“ im packages/-Unterverzeichnis ein RPM-Paket! Getestet wurde das Paket bisher in einer (virtuellen) Fedora Core 12 Installation. Feedback zu anderen Distributionen ist sehr willkommen!

Bedanken an der schnellen Umsetzung der RPM-Paketerzeugung müsst ihr Euch bei Marcel, der mir die nützlichen Kommentare zum 0.1.1er Posting geschrieben hat. 95% der Arbeit hat er erledigt!

Analog zum DEB Package gilt auch hier: Im tar-File sind ein paar Dateien mehr als im RPM-Paket, aber wenn Du nicht selbst an gsm-ussd weiterentwickeln möchtest, ist das RPM-File die einfachste Installation:

# rpm -ihv gsm-ussd-0.1.2-0.noarch.rpm

Hier die Dateien zum Download:
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.2-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.1.2-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.2-0_all.deb

Und zur Erinnerung: Wer an gsm-ussd mitbasteln will, der schaue sich das eigentliche Projekt an:
http://github.com/JochenHoch2/gsm-ussd.git
bzw.
git://github.com/JochenHoch2/gsm-ussd.git

Als nächstes kommt ein wenig GUI-Gebastel mit kdialog und zenity, das wird dann die Version 0.2.0 werden.

Viel Spass,
Jochen



gsm-ussd 0.1.1 (de)

gsm-ussd Posted on Mo, April 26, 2010 20:50:54

Hallo, da draußen,

gsm-ussd 0.1.1 jetzt verfügbar. Das Skript an und für sich hat sich nicht groß geändert, aber die Installation wurde einfacher: Wenn Deine Linux-Distribution Debian-basiert ist (Debian selbst, Ubuntu, …), dann installiert man einfach mittels

$ make deb
$ sudo dpkg -i packages/gsm-ussd*.deb

Im tar-File sind ein paar Dateien mehr als im Debian Package, aber wenn Du nicht selbst an gsm-ussd weiterentwickeln möchtest, ist das DEB-File die einfachste Installation.

Hier die Dateien zum Download:
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.1.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.1_all.deb

Jetzt muss ich nur noch rauskriegen, wie man ein RPM-Paket baut…

Viel Spass,
Jochen



gsm-ussd 0.1.1

gsm-ussd Posted on Mo, April 26, 2010 20:44:41

Hello, out there,

gsm-ussd 0.1.1 is now available. The script in itself didn’t change very much, but installing became easier: If your linux distribution is Debian based (Debian proper, Ubuntu, …), then you can now simply do a

$ make deb
$ sudo dpkg -i packages/gsm-ussd*.deb

The .tar file will contain a few files more, but if you’re not interested in developing gsm-ussd further, you’ll only need the Debian package.

Here are the files for download:
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.1.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.1.1_all.deb

Now I’ll have to figure out how to build a RPM package…

Have fun,
Jochen



gsm-ussd auf github.com!

gsm-ussd Posted on Sa, April 17, 2010 20:53:01

Hiermit möchte ich alle mit einladen, an der Entwicklung vom gsm-ussd mit zu arbeiten!

Der github-Link:
http://github.com/JochenHoch2/gsm-ussd bzw.
git://github.com/JochenHoch2/gsm-ussd.git

Zum jetzigen Zeitpunkt ist gsm-ussd vollkommen benutzbar – für mich. Natürlich habe ich versucht, mein Programm so wandlungsfähig und robust wie möglich zu machen. Testen konnte ich es aber nur mit meinem Huawei E160 (dem UMTS-Modem von Aldi). Wenn Du also andere UMTS-Hardware besitzt, würde ich mich freuen, wenn Du mir über Probleme und Erfolge mit gsm-ussd berichten würdest!

Jochen



« VorherigeWeiter »