Hier wird eine Software-Lösung für eine Wordclock beschrieben sowie die Installation einer Kiosk-Umgebung.
Letztere dient dazu, den Raspberry nach dem booten eine Web-Seite aufrufen zu lassen.
In der ct -Hardware Hacks 3/2013 wurde die WordClock als Projekt beschrieben.
Diese Lösung gefällt mir sehr gut, aber die Kosten betragen immer noch ca 150,- EUR.
Die Alternative hier basiert auf folgenden Komponenten:
- Raspberry 30 EUR
Der existiert bei mir für eine 433MHz Steckdosen-Steuerung - 15 Zoll Monitor mit DVI-Eingang (gibt es bei ebay ab 1,- EUR + Versand)
- HTML -Code (s.u.)
- Kiosk Umgebung
Pro
- Billig
- Sehr schnell realisiert
Cons
- Design der ct Variante wesentlich besser
- Stromverbrauch höher (Raspberry + Monitor)
Live-Demo: hier.
Für den Kiosk wird ein abgespeckter X-Server mit einem einfachen Display Manager und dem schlanken webkit-Browser verwendet.
Installation
Step 1) Browser erzeugen & installieren
Die Wordclock benötigt einen browser, der webkit unterstützt
Chromium frisst zu viele Resourcen und Midori bietet nicht alle Funktionen.
Es gibt einen einfachen Browser: kiosk-browser von Peter Schultz auf github.
#include <stdio.h>
#include <signal.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <webkit/webkit.h>
gboolean on_key_press(GtkWidget*, GdkEventKey*, gpointer);
void reload_browser(int);
void toggle_fullscreen(int);
void maximize();
void unmaximize();
static WebKitWebView* web_view;
static GtkWidget *window;
gchar* default_url = "https://www.google.de";
int main(int argc, char** argv) {
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 1280, 1024);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);
g_signal_connect(window, "key-press-event", G_CALLBACK(on_key_press), NULL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
web_view = WEBKIT_WEB_VIEW(webkit_web_view_new());
signal(SIGHUP, reload_browser);
signal(SIGUSR1, toggle_fullscreen);
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(web_view));
if(argc > 1) {
webkit_web_view_load_uri(web_view, argv[1]);
}
else {
webkit_web_view_load_uri(web_view, default_url);
}
maximize();
gtk_widget_show_all(window);
gtk_main();
return 0;
}
gboolean on_key_press(GtkWidget* window, GdkEventKey* key, gpointer userdata) {
if(key->type == GDK_KEY_PRESS && key->keyval == GDK_F5) {
reload_browser(0);
}
else if(key->type == GDK_KEY_PRESS && key->keyval == GDK_F11) {
toggle_fullscreen(0);
}
return FALSE;
}
void reload_browser(int signum) {
webkit_web_view_reload_bypass_cache(web_view);
}
void toggle_fullscreen(int signum) {
if(gtk_window_get_decorated(GTK_WINDOW(window))) {
maximize();
}
else {
unmaximize();
}
}
void maximize() {
gtk_window_maximize(GTK_WINDOW(window));
gtk_window_fullscreen(GTK_WINDOW(window));
gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
}
void unmaximize() {
gtk_window_unmaximize(GTK_WINDOW(window));
gtk_window_unfullscreen(GTK_WINDOW(window));
gtk_window_set_decorated(GTK_WINDOW(window), TRUE);
gtk_window_resize(GTK_WINDOW(window), 1280, 768);
}
Alles anzeigen
Anmerkung: Die Auflösung ist im Browser hart verdrahtet - siehe die beiden folgenden Zeilen:
gtk_window_set_default_size(GTK_WINDOW(window), 1280, 1024);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);
gcc -o browser browser.c $(pkg-config --libs --cflags gtk+-2.0 webkit-1.0)
sudo cp browser /usr/local/bin
Step 2) Setup & install xorg und nodm; Siehe auch Anleitung von nexxylove
Step 3) Den Benutzer "kiosk" anlegen und in die relevanten Gruppen aufnehmen (www-data?).
sudo useradd -g www-data kiosk
sudo passwd kiosk
sudo usermod -a -G www-data kiosk
cd /home
sudo mkdir kiosk
sudo chown kiosk kiosk
Step 5) Als kiosk Benutzer anmelden.
Step 6) Folgende Datei anlegen: nano ~/.xsession
Nach dem Login des Benutzters "kiosk" wird eine X-Session gestarten, die den Browser "browser" aufruft.
Hier kann man auch eine beliebige web-Seite aufrufen
Step 7) Den display-manager konfigurieren: sudo nano /etc/default/nodm
Die Option "-s 0 dpms" schaltet den Screen-Saver aus.
Step sudo nano /etc/X11/default-display-manager
Dann wird noch in /etc/X11/default-display-manager statt /usr/sbin/lightdm einfach /usr/sbin/nodm eingetragen
Step 9) Auto login - hier wird der Benutzer "kiosk" automatisch nach dem botten eingeloggt - ohne Password-Abfrage
Das getty - Programm auskommentieren - d.h. folgende Zeile suchen:
1:2345:respawn:/sbin/getty 115200 tty1
Vorne ein '#' einfügen
#1:2345:respawn:/sbin/getty 115200 tty1Folgende Zeile darunter hinzufügen:
Step 10) Die HTML-Datei clock.html file nach /var/www/ kopieren.
Step 11) Den raspberry neu starten
Step 12) Die Systemzeit kann man aus dem Internet holen.
Dort die folgenden Zeilen anfügen: