IR-Blinkenlights ... und es geht doch!

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

From: Raphael H. Becker (Raphael.Becker_at_gmx.de)
Date: 10. Jan 2002


Hallo,

als kleine Nachlese fuer das Treffen von gestern will ich mal kurz
zusammenfassen, was Michael Sommer und ich experimentiert haben:
Infrarot-Schnittstellen fuer serielle Kommunikation auf Laptops unter
Linux.

Nunja, der Plan war ganz einfach, der Teufel steckte wie immer im
Detail: 2 Laptops, beide mit Infrarot-Schnittstelle irgendie dazu
bringen, sich gegenseitig zu erreichen. Unter Linux gibt es Support fuer
IrDA und darauf basierend einer Reihe von Treibern, zB irlan
(Ethernet-over-IRDA) oder irtty (teletype-over-IrDA). Wir haben
beschlossen zunaechst die "einfachste" Variante auszuprobieren: Eine
Terminalverbindung mit 9600 Bps (das ist so zielich ueberall der
naechstbeste Defaultwert und erste Rateversuch)

Das funktioniert softwareseitig genauso, wie bspw. eine
Terminalverbindung ueber ein Nullmodemkabel: Ein Rechner laesst ein
getty laufen (ein Tool, was einen Login-Prompt zB auf eine Serielle
Schnittstelle ausgibt) und ein an dieser Schnittstelle angeschlossenes
Terminal (oder Terminal-Emulation) bekommt zeigt den Login an
("Textmodus-Login" fuer die, die SuSE haben und nix anderes kennen).

Wir haben kurzerhand meinen Rechner als "Host" genommen (also da, wo das
getty laeuft) und Michaels als Terminal. Wir benoetigen eine
Terminalemulation, die ueber die serielle Schnittstelle kommuniziert, zB
minicom. Da mir minicom(1) unsympatisch ist, haben wir cu(1) verwendet,
was Bestandteil vom UUCP-Package ist.

Und hier begann dann das Uebel: als User "cu -l /dev/ttyS1 -s 9600"
aufgerufen => Permission denied.
"Na gut, dann halt als root" ==> Permission denied. *Wunder*

Die Permission von /dev/ttyS1 standen auf 640 fuer root.dialout, also
sollte root (egal wie!) lesen und schreiben koennen. Gegencheck: mit
cat(1) direkt Zeichen auf die Schnittstelle geschrieben ==> es hat
geblinkt, es geht also [1]!

Diverse Versuche, die bis hin zum "LILO> linux init=/bin/bash" [2]
gegangen sind, um nur ja wirklich alle distributions-abhaengigen
Verwirrungen zu umgehen (wer weiss schon wirklich , was in so einem
Debian wirklich passiert *g*), ... als root ==> "Permission denied, Line
in use". *wunder*

Ausser dem Kernel und der bash, die als init gelaufen ist und sonst
nichts anderem "Line in use". Was bitte soll also die Serielle
Schnittstelle belegen, wenn selbst der Kernel ohne jegliche MOdule
geladen wurde und ausser der bash genau kein anderer Prozess gelaufen
ist?

Des Raetsels Loesung: cu(1) wechselt nach dem Start offenbar seinen User
auf irgendwas unprivilegiertes und hat auf einmal keine root-Rechte mehr
(so machts zB auch der Apache) und oeffnet danach die Serielle
Schnittstelle, was dann natuerlich(!) nicht geht, weil diese ja zu
mindest Gruppenrechte von "dialout" benoetigt. Ich bin dem nicht weiter
auf den Grund gegangen, steht wohl was in der manpage von cu oder uucp.

Aber imerhin, nach einem "chmod 666 /dev/ttyS1" konnte dann auch der
noch so unprivilegierteste User auf COM2 lesen und schreiben und siehe
da, sogar cu erreicht via IR den anderen Rechner und bekommt das getty.
Login => klappt!

Damit war der Abend auch schon rum und ich um ein paar Erkenntnisse
reicher.

Das naechste Mal (in Heidelberg) werden wir es mit hoeheren BPS-Raten
(zB 56k oder 115k2) testen und dann zB slip (Serieal Line IP), PPP
(Point-to-Point Protocol... wird ueblicherweise fuer die
Internet-Einwahl verwendet) basierend auf dem irtty-Treiber oder auch
Ethernet basierend auf dem irlan-Treiber testen. Mal sehen, wie weit wir
kommen, es waere immerhin eine schoene Moeglichkeit, zwischen
mitgebrachten Laptops kabellos mal schnell Datenverbindungen aufzubauen.

Gruss
Raphael Becker

PS [1] "Es hat geblinkt" ... wie bitte sieht man ein Blinkedes
Infrarot-Interface? Ganz einfach, zB mit Hilfe einer Digital-Kamera mit
CCD-Chip und Mini-Display: der CCD "sieht" IR wie normales (helles)
Licht und das Display zeigt es dann eben auch so an ... hell und
blinkend.

[2] LILO kann dem Kernel beim Booten Parameter mitgeben und alle
Parameter, die der Kernel nicht bekommt, die reicht dieser 1:1 an init
weiter.
Ein Kernel-Parameter ist "init=" und verweist sandardmaessig auf
/sbin/init, was der Kernel dann als ersten Prozess startet. Da kann man
dann genauso auch eine /bin/bash hernehmen, allerdings arbeitet die bash
keinerlei Bootscripten ab, weswegen man dann alle benoetigten Geschichen
von Hand eingeben muss (zB / rw remounten: mount -o remount,rw /), damit
man ueberhaupt schreiben kann.
Das ist uebrigens einer der wenigen Wege, wie man bei den meisten
Rechnern ein root-Passwort aendern kann, wenn man es vergessen hat, denn
"passwd" als root fragt nicht nach dem alten Passwort.

PPS: Eine praktische Anwendung fuer serielle Kommunikation ueber
IR-Schnittsllen ist zB durch Glas hindurch oder wenn aus irgednwelchen
Gruenden unbedingt eine galvanische Trennung mit sehr hoher
Durchschlagsfestigkeit gebraucht wird. Vielleicht kann man so auch mit
Hilfe geeigneter IR-Dioden und Glasfaser-Fassungen ein
Billig-Glasfaser-Netz aufbauen ... ich fuerchte nur, dass Michael es
nicht gutfinden wird, wenn ich seinem "Web-Boy" mit einem Lotkolben zu
nahe komme.

PPPS: Die Reichweite ist leider auf ca 1m begrenzt, mal schaun, was sich
so an Mini-IR-LASERn bei Conrad auftreiben laesst :)

4PS: Der Wirt meinte beim Gehen noch, dass manche seiner Gaeste etwas
verwirrt ob unserer Anwesenheit waren ... ich meine, ich gebe ja zu,
dass wenn 10 oder mehr, teilweise recht unkonventionell wirkende
Gestalten mit Laptops im Nebenzimmer einer Hafen-Kneipe sitzen, dabei
wohl offensichtlich zwar deutsch, aber in einer fuer normale Menschen
nicht nachvollziehbaren Sprache kommunizieren, dass dies nicht gerade
ein vertrautes Bild ist fuer die anderen Gaeste ist. Da wir aber einen
guten Stand bei den Wirtsleuten haben, sind wir nach wie vor
hochwillkommen:
Das naechste Treffen ist turnusgemaess am Aschermittwoch und der Wirt
hat mir schon jetzt sein "Heringsessen" empfohlen ... dabei esse ich
Fisch nur, wenn er weder danach schmeckt noch danach aussieht. Mal
sehen.

-- 
#!/bin/sh
if [ -n "$1" ];then lynx -dump http://rfc.fh-koeln.de/rfc/html_gz/rfc\
$(echo 000$1|rev|cut -c 1-4|rev).html.gz; else echo "rfc number"; fi
# by rhb


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET