Linux NetMag #1
Titel: ISDN - wer ruft mich an?
URL: http://www.linuxnetmag.de/issue1/m1isdn1.html

ISDN
Sie haben ISDN und eine ISDN-Karte in ihrem PC?
Immer wenn sie angerufen werden erscheint die Telefonnummer ihres Anrufers im Display des Telefons?
Wie wärs, wenn Linux Sie vorwarnt, wer da gerade anruft! 

(K)Ein Schwein ruft mich an

Eine ISDN-Karte zu installieren kann schon manche Probleme bereiten (aber damit beschäftigne wir uns (noch) nicht). Wenn sie dann funktioniert, will man sie auch so gut wie möglich ausnutzen. 
Zum Beispiel erscheint bei jedem Anruf in der /var/log/messages die Telefonnummer der Gegenstelle, wenn diese denn auch ISDN unterstützt. 
Nun sollte es doch möglich sein diese Information aszunutzen und sich anzeigen zu lassen wer sich hinter dieser Nummer befindet. Man könnte möglicherweise per Script jede neue Message auf eine Telefonnummer hin untersuchen und diese dann per Datenbank zu einem Namen aufschlüsseln.
Aber es geht auch viel leichter, denn die Programmierer von isdn4linux haben schon gleich an diese Möglichkeit gedacht, so daß man keine großartigen Programmierkünste aufwenden muß um etwas derartiges zu erhalten.

Die hier gezeigte Lösung ist rein programmiertechnisch nicht originell, jedoch schnell fertiggestellt und bedarf keinerlei Scriptkenntnisse. Ist also bestens für Einsteiger geeignet. 
Benachrichtigen lassen wir uns per JPEG-Bild, welches nicht zu groß sein sollte, damit es später schnell geladen werden kann.
(etwa 512x246, ca. 6KB) 
incoming call ...
(originellere Entwürfe sind willkommen)

Für jede Gegenstelle über die man informiert werden möchte, erstellt man nun ein jeweiliges Bild. Somit ist es auch möglich ein Foto der Person einzuscannen und sich bei einem Anruf zeigen zu lassen.
Diese Bilder sammeln wir dann im Verzeichnis /etc/isdn/jpeg

>> mkdir /etc/isdn/jpeg

Nun müssen wir isdn4linux noch beibringen, welches Bild er bei welcher Telefonnummer anzeigen soll. Dies geschieht in der Datei
/etc/isdn/callerid.conf .

Dort solle schon ein Eintrag stehen wie 

[MSN] 
NUMBER = 5551234 
ALIAS  = Ich 
ZONE   = 1 

Damit wird jeder Telefonnummer (NUMMER) ein Name (ALIAS) zugordnet. ZONE gibt an, in welcher Tarifzone die Gegenstelle liegt. (Die Telefonnummer ist ohne Vorwahl einzutragen!) 

Nun nehmen wir mal an, wir hätten einen Freund Thorsten S., der uns häufig anruft. Dann erstellen wir als erstes ein JPEG-Bild für diese Gegenstelle (s.o.), und speichern dieses in /etc/isdn/jpeg/ . Nun müssen wir seine Daten noch in die /etc/isdn/callerid.conf eintragen. Dies sieht dann folgendermaßen aus:


[MSN] 
NUMBER = 555333 
ALIAS  = ThorstenS 
Zone   = 1 
START  = { 
          [FLAG] 
           FLAGS = I|R 
           PROGRAM=/usr/X11R6/bin/xli -fit \ 
/etc/isdn/jpeg/callThorstenS.jpg\ 
- geometry 512x256-350+250 -display :0 & 
}

Das Neue und Wichtige an diesem Eintrag steht hinter der VariablenSTART. Hier steht geschrieben, was bei einem Anruf der genannten Nummer gemacht werden soll.
FLAG interessiert uns erstmal nicht. Stattdessen gehört unsere Aufmerksamkeit PROGRAM.
Zum Anzeigen des Bildes benutzen wir das Programm xli (sollte bei jeder Distribution dabei sein. Muß notfalls nachinstalliert werden.) Man könnte auch xv, oder ein andres Programm benutzen, allerdings ist xli sehr klein und läd die Bilder recht schnell.
Die Option -fit ist dafür gedacht, daß das Bild auch auf Servern mit 8 Bit Bildtiefe korrekt dargestellt wird. Der Zweite Pfad gib das Bild an, welches geladen werden soll. 512x256-350+250 gibt die Größe und Position an, wie das Bild angezeigt werden soll (Dieser wert ist an die jeweilige Bildschirmauflösung anzupassen, oder kann auch weggelassen werden, wenn man das Bild nicht in der Mitte des Monitors haben will).
-display :0 teilt dem Programm dann noch mit, auf welchem Bildschirm das Bild dargestellt werden soll. Ein derartiger Eintrag ist für jede bekannte Gegenstelle einzurichten, was schnell getan ist.
Mit diesen Einstellungen sollte eigentlich schon alles funktionieren (Der ISDN-Treiber muß allerdings erst neu gestartet werden, damit er die neue callerid.conf einliest).

Fvwm anpassen

Nun ist es allerdings läßtig, das das Bild immer mit Fensterrahmen geladen wird, und somit nicht wie eine Message, sondern eben wie ein geladenes Bild aussieht, was es ja auch ist. Um dies zu änder, muß man die Eigenschaften des Fensters beim Windowmanager anders anmelden (Die folgende Konfiguration bezieht sich auf fvwm2).
Dafür muß ein Eintrag in die Datei ~/.fvwm2rc geschrieben werden: 

Style "/etc/isdn/jpeg/*" NoTitle, Sticky, StaysOnTop (eine Zeile!) 

Dieser Eitrag kann irgendwo stehen, sollte allerdings der Übersicht halber bei den anderen Style Einträgen plaziert werden.
Diese Zeile macht es nun möglich, daß das geladene Bild keine Fensterleiste mehr besitzt, "sticky" ist, d.h. auf jeden virtuellen Desktop mitwandert und immer über allen anderen Fenstern plaziert ist (StaysOnTop). 

Damit wäre unsere Telefon-Vorwarnanlage fertig.


Links
ISDN http://www.muc.de/~hm/linux/linux-isdn.html
MailingList http://wws.mathematik.hu-berlin.de/ldr/ISDN/isdn4linux/
ISDN-Leafsite http://www.lrz-muenchen.de/%7Eui161ab/www/isdn/