Entries tagged hdmi

Raspberry Pi als Kiosk mit resourcenschonendem Browser und VESA Mount

Posted on 22. März 2013 Comments

Auf der Arbeit sollte ich einen Raspberry Pi zu einem reinen Service-PC im Kiosk-Modus umwandeln. Dafür habe ich ein VESA kompatibles Gehäuse auf ebay gekauft, das man hinten an den Monitor schrauben kann. Über einen DVI-HDMI Adapter wird das Bild ausgeliefert, dazu noch eine Maus und Tastatur über USB und ein Netzwerkkabel. Anleitungen wie man Raspbian installiert gibt es schon genügend, also überspringe ich mal den ganzen Installations- und Konfigurationspart. An Browsern habe ich Chromium aufgrund des eingebauten Kiosk Modus ausprobiert und dann noch Midori, weil der vorinstalliert ist. Chromium hat schlicht zu viele Resourcen gefressen und Midori hat nicht das geboten, was ich wollte. Ich wollte einen Browser, der absolut idiotensicher nur diese eine Seite anzeigt, kein Adressfeld, kein Quelltext ansehen o.ä.Ich stieß dann irgendwann auf den kiosk-browser von Peter Schultz auf github. Im Grunde sind es nurIMG_20130322_155429

ein paar Zeilen C-Code, die ein Fenster mit GTK+ öffnet und darin ein WebKit-Widget lädt. Das ist übrigens dasselbe Framwork, das auch Chromium benutzt. Zusätzlich hat er noch 2 Signale auf Tasten auf dem Keyboard gemappt, eins für Aktualisieren(F5) und eins um den Vollbildmodus zu verlassenn(F11). Das Aktualisieren habe ich drin behalten, aber da ich keine Notwendigkeit sehe, den Vollbildmodus zu verlassen, diese Zeile Code einfach auskommentiert.
Dann habe ich natürlich noch die Standardwebsite geändert. Mit nodm(s.u.) machte er trotzdem Proleme also habe ich noch folgende Zeilen hinzugefügt um das Bild immer mittig zu halten und in der Größe meines Bildschirms darzustellen:

gtk_window_set_default_size(GTK_WINDOW(window), 1280, 1024);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);

Den vollen Quelltext findet ihr hier: browser-repat.c und aktuelle Versionen zuerst auf GitHub.

Auch die Makedatei hat bei mir nicht funktioniert, ich habe ein Haufen Fehler nach diesem Schema bekommen:

undefined reference to `gtk_XXX

Stattdessen funktionierte bei mir dieser Befehl:

gcc -o browser browser.c $(pkg-config --libs --cflags gtk+-2.0 webkit-1.0)

Schlussendlich habe ich noch xorg und nodm installiert um lightdm bzw. lxde (wegen den ganzen Tastenkombinationen) los zu werden. Dabei habe ich diese Anleitung von nexxylove befolgt.

Die browser-Datei wandert in /usr/local/bin und in ~/.xsession steht nur:

#!/bin/bash
/usr/local/bin/browser

Dann wird noch in /etc/X11/default-display-manager statt /usr/sbin/lightdm einfach /usr/sbin/nodm  eingetragen und in /etc/default/nodm der Wert NODM_ENABLED auf true gesetzt.

Bildschirm in den Standby-Modus fahren über CEC via HDMI

Posted on 2. November 2012 Comments

Das mit dem Bildschirm verdunkeln und das HDMI Signal kappen war ja schon eine nette Sache aber Bildschirme haben ja auch nicht umsonst eine Standby Funktion. Diese wird normalerweise aktiviert, wenn man auf den Power-Off Knopf auf der Fernbedienung drückt. Manche Bildschirme können das auch zeitgesteuert oder beim Rausziehen eines Kabels (sollte hier auch aktiviert sein). Wenn man einen Bildschirm über HDMI angeschlossen hat und beide Geräte es unterstützen, kann man über das Kabel ein paar Steuersignale über die CEC-Schnittstelle senden. Die Implementierung von CEC heißt bei den Herstellern unterschiedlich, man findet es also ggf. im Monitor Menü nicht unter diesem Namen. Jetzt wollte ich ja wie gesagt mit einem Raspberry Pi den Bildschirm ein- und ausschalten. Dafür kann man den cec-client benutzen. Ich habe dafür die neuste Version(1.9.0) von Christoph vom Blog selfprogramming als .deb runtergeladen und installiert. Eventuelle Versionen, die über apt-get installiert wurden, müssen vorher deinstalliert werden, ebenso solche, die über github installiert wurden. Zusätzlich braucht man noch ein paar packages, sonst bekommt man folgende Meldung:

libcec.so.1: cannot open shared object file: No such file or directory

Also die folgenden packages installieren:

sudo apt-get install libraspberrypi-dev libplist1 libmicrohttpd10 libtinyxml2.6.2 libyajl2 libssh-4  libmysqlclient18 liblzo2-2 libfribidi0 libcurl3-gnutls liblockdev1

Eine Auflistung der CEC-fähigen devices ergibt folgendes:

pi@raspberrypi$ cec-client -l
Found devices: 1
device: 1
com port: RPI
firmware version: 1
type: Raspberry Pi

Ausschalten bzw. Standby funktioniert folgendermaßen:

echo "standby 0" | cec-client -s

Dabei steht der -s für single, also einfache Ausführung, damit der Client danach nicht weiter verbunden bleibt.

Anschalten funktioniert jetzt wie man sich es schon fast denken könnte:

echo "on 0" | cec-client -s

Bildschirmsignal über HDMI kappen

Posted on 19. Oktober 2012 Comments

Auf meiner Suche nach einer Möglichkeit Bildschirme Remote in den Standby Modus zu bringen habe ich die folgende Zwischenlösung gefunden. Diese Befehle beenden das HDMI Signal und die meisten Bildschirme bekommen dann eine Meldung à la „Kein Signal, Überprüfuen Sie die Stromversorgung des angeschlossenen Geräts sowie die Kabelverbindung und gewählte Signalquelle“(Samsung). Nach einer bestimmten Zeit fahren dann die meisten Monitore automatisch in den Standby Modus. Benutzen kann man hierfür das Programm tvservice.

Ausschalten war relativ einfach herauszufinden:

$ tvservice -o

Anschalten mit dem -p Parameter jedoch funktioniert zwar; also der Monitor erkennt, dass es ein HDMI Signal gibt, jedoch findet er den X-Server nicht. Normalerweise müsste man diesen entweder neustarten oder einfach direkt mit einem reboot das ganze Gerät. Stattdessen habe allerdings einen kleinen Workaround gefunden:

$tvservice -p

$sudo chvt 6

$sudo chvt 7

Mit chvt wechselt man die virtuellen Konsolen durch, standardmässig läuft auf 7 der X-Server. Man muss allerdings einmal vorher zu einem anderen, z.B. 6, wechseln.

Credits gehen an XavM und vor allem svelev vom raspberry-pi.org forum, sowie sysstem.at.