
Nachdem wir nun lcd4linux das Image Widget ja erfolgreich eingetrichtert haben und mein zweites Display auch was zu tun möchte, will ich daraus eine kleine Slideshow machen. Natürlich kann der kleine DPF das schon, aber er hängt eh am USB, dann kann die Dockstar das auch gleich steuern.
Erstmal die Dokumentation des Widget_Image von lcd4linux hier lesen. Um das Ziel zu erreichen gibt es prinzipiell 2 Wege.
Voraussetzung ist immer ein Ordner voller 320×240(!) PNG(!!) Bilder.
Weg 1: Das Image Widget von lcd4linux kann auf Dateiänderungen reagieren, wir erzeugen nun ein Skript (Python?) und dieses Skript sucht zufällig eine Datei aus dem Bilderordner und kopiert sie immer an die gleiche Stelle. Diese Datei, die immer wieder überschrieben werden soll, nehmen wir als Bild in unserer lcd4linux.conf und setzen reload=1 und update=5000 (alle 5 sek. wird also geprüft ob sich was geändert hat). Danach erzeugen wir einen Cronjob, der das Skript alle 30 Sekunden ausführt und damit die Bilddatei alle 30 Sekunden aktualisiert mit einem zufälligen Bild.
Weg 2: Wir wählen die Python Funktion von lcd4linux, was für uns 2 Nachteile bedeutet erstmal: Erstens müssen wir uns im PYTHONPATH rumschlagen oder das Skript in einen Ordner, in dem Python es direkt findet, kopieren. Zweitens: Wir müssen lcd4linux mit dem python flag neu kompilieren. Dafür sparen wir uns aber cron und hässliches kopieren alle 30 Sekunden.
Was nehmen wir nur? Natürlich Weg 2.
Ich gehe davon aus, dass ihr Python usw. alles installiert habt. Wenn nicht, googelt einfach danach.
Schritt 1) Kompilieren lcd4linux
Zuerst installieren wir libpython2.6:
sudo apt-get install libpython2.6
Nun kompilieren wir lcd4linux genau gleich wie in meinem anderen Artikel, nur bauen wir die configure Zeile in build-dpf-lcd4linux.sh wie folgt um:
./configure --with-drivers='DPF' --with-plugins='all,!dbus,!mpris_dbus' --with-python
Danach ganz normal wie dort geschrieben weiter machen.
Ich hab hier (md5:771b71903f6b67d07d258b87c2e579cf) auch mein python-enabled lcd4linux hochgeladen, falls jemand nicht so auf kompilieren steht.
Jetzt wählen wir 2 Ordner, einer mit Bildern und einer, in dem das Skript liegt. Wir nehmen für die Bilder /home/user/pics und fürs Skript /home/user.
Danach öffnen wir als Root die Datei /etc/profile und fügen ganz unten folgende Zeilen hinzu:
PYTHONPATH="/home/user/"
export PYTHONPATH
Das ist ganz wichtig, damit root unseren Home Ordner auch für Pythonskripte durchsucht. Damit das klappt, rebooten wir nun einmal die Dockstar.
Jetzt erstellen wir die Datei /home/user/slideshow.py und kopieren folgendes hinein:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import random
img_folder="/home/user/pics" # Anpassen, Ordner mit Pics darin
# AM ENDE KEIN /
walker = os.walk(img_folder,True,None)
pics = [] # leer lassen
def give_random_pic(self):
for i in walker:
if len(i[2]) > 0:
for j in i[2]:
if j.split(".")[-1] == "png": # Pruefe ob die Endung .png ist
pics.append(i[0]+"/"+j)
rn = random.randrange(0,len(pics),1)
return pics[rn]
Danach noch folgende Befehle ausführen:
sudo chown root:root slideshow.py
sudo chmod 700 slideshow.py
Was fehlt ist die passende /etc/lcd4linux.conf:
Display dpf {
Driver 'DPF'
Port 'usb0'
Font '6x8'
Foreground 'ffffff'
Background '000000'
Basecolor '000066'
}
Widget FIRST {
class 'Text'
expression 'www.Geekparadise.de'
width 54
align 'L'
update 0
Background 'ffffff'
Foreground '000000'
}
Widget IMAGE {
class 'Image'
file python::exec('slideshow', 'give_random_pic', '')
update 30000
reload 1
visible 1
inverted 0
}
Display 'DPF'
Layout Dockstar{
Row01.Col01 'FIRST'
Layer 2 {
X1.Y1 'IMAGE'
}
}
Layout 'Dockstar'
Einmal lcd4linux neugestartet und schwupps ist euere Slideshow fertig. Toll oder?
Achja, das python Skript prüft nur ziemlich rudimentär ob es png Dateien sind .. selber schuld wer jpegs mit Endung .png reinkopiert…
Am Schluss – wie immer – :
Warnung: Dabei kann man seinen digitalen Bilderrahmen durchaus unbrauchbar machen. Ich übernehme keine Verantwortung für gebrickte Digitale Bilderrahmen oder sonstige Schäden die durch diese Anleitung verursacht werden. Jeder muss selbst wissen was er tut.