Skip to content

Twitter-Wall als Kiosk mit Raspberry-Pi im Eduroam

Linux Diese kleinen Himbeerkuchen-Boxen sind ja schon faszinierend. Preislich wie ein abendlicher Restaurantbesuch zu zweit und von der Größe eine Zigarettenschachtel können sie alles was ein kleiner PC so können muss. Natürlich läuft Linux, besser gesagt eine spezielle Version von Debian, darauf.

Für ein Event in der Universität wurde nun eine Twiiter-Wall gewünscht, damit man auf einer großen Glotze gucken kann was alles gerade so von den Besuchern gezwitschert wird. Der Raspi bringt alles was gebraucht wird dafür schon mit, also vor allem HDMI für die großen Displays und einen WLAN-Dongle für den Internet-Zugang, in diesem Fall zum Eduroam.

Für meine Erläuterung wie man so ein Setup konfiguriert setze ich mal voraus, dass man einen potenten Raspi (also mindestens Version 2) samt Speicherkarte (in meinem Fall eine von Samsung mit 8 GB aus der Grabbelkiste) hat und mit die einfache Installation des Rasbian-Images mit dem Win32-Disk-Imager-Tool hinter sich gebracht hat.

Anschließend kann man sich auf dem Raspi mit "pi" und "raspberry" einloggen und mit "sudo su" Root-Rechte holen um alles auf der Shell zu konfigurieren. Als erstes mache ich immer ein "apt-get update && apt-get upgrade" um das System auf den neuesten Stand zu bringen.

Um das WLAN für Eduroam zu konfigurieren stellt meine Uni die passenden Datein für Linux zur Verfügung. Die "wpa_supplicant.conf" kommt nach "/etc/wpa_supplicant/" und das Telekom-Root-Zertifikat kommt einfach nach "/home/pi/".

Danach muss man die Zugangsdaten anpassen und beim nächsten Start kann man beobachten wie das WLAN verbindet. Wenn man kein Eduroam verwendet ist alles viel einfacher und kann mit dem Dialog auf der grafischen Oberfläche von Rasbian Jessie erledigt werden.

Als Browser für den Kiosk-Mode (also Fullscreen ohne Bedienelemente) habe ich Midora gewählt und mit "apt-get install midora" nachinstalliert. Gestartet wird der Browser dann mit einem kleinen Skript das bei mir "kiosk.sh" heisst und so aussieht:
#!/bin/sh
sleep 20
midori -e Fullscreen -a http://dkg2015.tweetwally.com/projection


Tweetwally ist eine Website von vielen die eine soganannte Tweet-Wall bereitstellt, also Tweet zu einem bestimmten Hashtag sammelt, die angegebene Seite aktualisiert sich dann automatisch. Das ist soweit also sehr einfach, die 20 Sekunden Pause sind dafür da um abzuwarten dass die Internetverbindung auch aufgebaut ist.

Etwas trickreicher ist dann schon die Änderung der grafischen Oberfläche, hier daher der Inhalt meine Datei "/home/pi/.config/lxsession/LXDE-pi/autostart":
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@sh ${HOME}/.config/lxsession/LXDE-pi/autokey.sh
@xset s off
@xset -dpms
@xset s noblank
@sh /home/pi/kiosk.sh


Dabei wird auch der Bildschirmschoner abgeschaltet, denn niemand wird an einer Raspi-Box ohne Tastatur und Maus mehr eine Taste drücken oder die Maus bewegen können. Nach dem nächsten Start sollte sich die Internet-Verbindung aufbauen (kann man durch die Visualisierung erkennen) und der Brower mit der Tweetwall gestartet.

FTP-Server für GeoNetwork

Linux GeoNetwork ist ein Server für Metadaten von Geodaten. Also Daten die beschreiben was in Geodaten drin ist, wo die Informationen her kommen, was man damit machen darf und vielleicht auch noch wie gut sie sind.

Vor allem natürlich, auf welches Gebiet sie sich beziehen, denn man will ja später mit dem GeoNetwork räumlich suchen können. Also ein Gebiet auf der Karte auswählen und nicht nur nach einen Stichwort suchen müssen.

Um die Daten anzubieten bringt GeoNetwork den GeoServer mit, der zu ziemlich alle gängigen Formate an Geodaten von Shape bis GeoTIFF verwerten und einheitlich als WMS und WFS in allen Karten-Projektionen ausliefern kann, damit man sich die Daten komfortabel in das GIS-Programm eigener Wahl als Layer ziehen kann.

Für die eingetragenen Benutzer des GeoNetwork-Knoten ist es aber auch praktisch, die Geodaten selbst auf den Server hochladen zu können. Dafür bietet sich FTP an, ein Protokoll fast so alt wie das Internet selbst und älter als die meisten seiner Benutzer.

Ich stand vor der Aufgabenstellung, nun dem GeoNetwork noch einen FTP-Server zur Seite zu stellen. So ein FTP-Server ist schnell installiert, die Benutzer des GeoNetwork sollten sich auch dort mit dem selben Namen und Passwort einloggen können.

Glücklicherweise ist der proftpd so flexibel, dass er sich auch gegenüber einem SQL-Server authentifizieren kann. Dazu werden Benutzer und Gruppen in zwei Tabellen gehalten. Die Gruppen hab ich mir erspart und die Tabelle nur entsprechend dem Howto angelegt und leer gelassen:

CREATE TABLE ftpgroups (
groupname character varying(30) NOT NULL,
gid integer NOT NULL,
members character varying(255)
)


Für die Benutzer war der erste Plan, die Tabelle anzulegen und einen Trigger zu definieren, der bei Insert/Update auch die Tabelle ftpusers aktualisiert. Mit einer Abfrage gehts aber noch einfacher und vor allem klappt das auch bei einfachen Datenbank-Systemen:

CREATE OR REPLACE VIEW ftpusers AS
SELECT users.id AS pkid, users.username AS userid, users.password AS passwd, 10000+users.id AS uid, NULL::integer AS gid, NULL::text AS homedir, NULL::text AS shell
FROM users;


Wie man leicht erkennen kann wird das SHA1-verschlüsselte Passwort aus der Benutzertabelle des Geonetwork in die Tabelle der FTP-Benutzer gespiegelt, die Benutzer-ID ist der Primärschlüssel plus 10000 (möglicherweise will man hier auch NULL angeben um die Vorgabe der Konfiguration verwenden zu lassen).

Eine passende Konfigurationsdatei für den proftpd lädt nun nur noch die notwendigen Module und weist den FTP-Server an nur noch den Daten aus den Tabellen zu glauben. Die Defaults für UID und GID sind meiner Installation openSUSE 12.1 entnommen und müssen bei Bedarf angepasst werden.

ServerName "CarBioCial FTP Server"
ServerType standalone
DefaultServer on
Port 21
PassivePorts 49152 65534
DebugLevel 0
SystemLog /var/log/proftpd/proftpd.log
UseIPv6 off
Umask 022
MaxInstances 30
User ftp
Group ftp
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
LoadModule mod_sql.c
LoadModule mod_sql_postgres.c
LoadModule mod_sql_passwd.c
AuthOrder mod_sql.c
RootLogin off
AuthPAM off
DefaultRoot ~
RequireValidShell off
SQLBackend postgres
SQLAuthenticate on
SQLEngine on
SQLAuthenticate users*
SQLPasswordEngine on
SQLPasswordEncoding hex
SQLAuthTypes SHA1
SQLConnectInfo geonetwork@localhost geonetwork geopasswd
SQLDefaultUID 40
SQLDefaultGID 49
SQLDefaultHomedir /data/ftp
SQLUserInfo ftpusers userid passwd uid NULL NULL NULL
SQLGroupInfo ftpgroups groupname gid members
SQLUserWhereClause true
SQLNegativeCache off
SQLLogFile /var/log/proftpd/proftpd-sql.log


Danach noch den FTP-Server neu starten und die Benutzer können sich mit ihrem universellen GDI-Passwort einloggen und dies auch im GeoNetwork selbst ändern. Diese wäre mit LDAP nicht möglich gewesen, denn GeoNetwork kann sich nicht an den LDAP-Server binden, sondern nur die Anmeldung darüber durchführen lassen.

Noch ein letzter Tipp: Was hier gebaut wurde geht auch mit so ziemlich jeder Web-Anwendung, die Benutzer in einer SQL-Datenbank speichert. Man kann also genau so einfach ein Forum oder ein Blog mit einem FTP-Server erweitern.

YouTube-Filme auf Video-CD

Linux Das Video-CD-Format ist schon ziemlich alt und von der Qualität her so wie ein guter alter VHS-Videorecorder. Aber diese Scheiben haben einen großen Vorteil: Sie laufen auf jedem DVD-Player, den man sich an die Glotze anschließen kann. Die besseren Formate wie DivX oder H264 können meist nur die 50-Euro-Dinger aus dem Kaufhaus.

Ich hatte grad mal Bedarf ein YouTube-Video für jemand ohne Internet (das gibts auch noch) auf eine CD zu brennen, so dass es ohne viel Knöpfchendrücken abspielbar ist. Da kam mir diese nicht mehr ganz zeitgemäße Video-CD gerade recht. Keine Menüs auswählen, einfach CD rein und spielt ab, so wie man das von Audio-CDs auch kennt.

Als zertifizierter Linuxer natürlich Oldschool Commandline, und das geht erstaunlich einfach musste ich feststellen. Ich hatte mit umfangreichen Parameter-Orgien gerechnet, aber das ist nur bei der Formatkonvertierung erforderlich wenn man dem mencoder verwendet. Der hat dafür den Vorteil alles konvertieren zu können was der mplayer abspielt und das dürfte bei korrekter Installation so wirklich jedes Video sein, das man sich irgendwo runterladen kann.

Das bedeutet auch, dass man mit dem Weg, den ich hier in diesem Artikel notiere damit ich bei Bedarf noch mal drauf zurückgreifen kann so ziemlich jedes Filmchen auf Video-CD brennen kann. Das hätte ich bei meiner alten Digitalkamera auch schon gebrauchen können, die nämlich relativ exotisches (die Mac-User mögen es mir nachsehen) Quicktime-Video erzeugte. Eine Alternative für die Konvertierung wäre noch der ffmpeg, der einfach eine Option target=vcd hat, aber bei einigen Video-Formaten auch gern mal zickt.

Natürlich braucht man die bei YouTube übliche FLV-Datei auf der Platte, es kann auch die bessere MP4-Datei sein, dafür gibts schon diverse Tools um sich den Film von YouTube oder ähnlichen Video-Portalen herunterzuladen. Einige Portale bieten den Download sogar direkt an.

Die eigentliche Umwandlung macht ein etwas unhandlicher Aufruf von mencoder, den ich mir aus der mplayer-Doku kopiert habe:
mencoder -oac lavc -ovc lavc -of mpeg
-mpegopts format=xvcd -vf scale=352:288,harddup
-srate 44100 -af lavcresample=44100
-lavcopts vcodec=mpeg1video:keyint=15:vrc_buf_size=327:
vrc_minrate=1152:vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224
-ofps 25 -o videocd.mpg hirschhausen.flv

Damit (alles in eine Zeile natürlich!) wird eine Datei mit dem phantasielosen Namen videocd.mpg erzeugt. Wer kreativer ist oder mehrere Dateien konvertieren möchte sieht auch hier sofort was zu tun ist. Die Optionen stehen vorne um über die History der Shell schnell andere Dateien zu verarbeiten.

Danach wird ein Image für die Video-CD gebacken:
vcdimager videocd.mpg

Man kann dem vcdimager auch mehrere Videodateien im passenden Format vorwerfen. Bei den aktuellen Preisen für leere CDs mach ich das aber nicht. Die Defaults passen und weitere Optionen sind nicht erforderlich.

Das erstellte Image kann man dann mit cdrdao auf eine CD brennen:
cdrdao write videocd.cue

Auch hier sind in meinem Fall keine Optionen erforderlich, weil es einen symbolischen Link /dev/cdrecorder bei mir gibt, der korrekt auf /dev/sr0 zeigt.

Das wars schon. Die Dateien lassen sich danach mit rm videocd* einfach alle wegräumen. Ich hab mir die Schritte in ein Skript flv2vcd.sh geschrieben das auch im Downloadbereich bereitliegt. Nun hab ich von der Qualität eines YouTube-Videos auf dem Pantoffelkino keine Wunder erwartet, aber die Qualität ist für mich als aus der Generation Videorecorder sogar noch akzeptabel.
tweetbackcheck