« Selbstgemacht   


Media Indexer Entwicklung Status 1Donnerstag, 28 Juli, 2011 2:24

Es gibt ja bereits ein, zwei Media Kataloge für KDE und GTK, die mir aber zu aufgebläht sind und und für meinen Zweck "auf welchem USB Stick befindet sich die Datei xyz?" einfach zuviele Abhängigkeiten mitinstallieren, die ich gar nicht haben will.

Ausserdem will ich mehr C Programmieren und nachdem Perl mit Sqlite3 und zip und unzip Funktionalität gar nichts anfangen konnte, habe ich also mein zweites C Projekt angefangen, das mich sehr beansprucht hat und deswegen gab es auch lange nichts Neues hier zu lesen.

Inzwischen bin ich mit meinem persönlichen Media Indexer aber weit fortgeschritten und möchte an dieser Stelle bereits einmal ein paar Schnipsel Screenshots zeigen. Ich habe wirklich viel C Programmierungstechnik dazugelernt, dazu gleich mehr.

Ich stelle hier nur kurz mal dar, was ich gerne hätte:

Ein Programm, dass gemountetet Datenträger in /media liest, die Informationen in eine Datenbank schreibt, die ich einfach mal abfragen kann und die mir dann schnell Ergebnisse auswirft. Ich hätte ja auch einfach ein "ls -lR > USB-Stick.inhalt" pumpen können und anschliessend ein "grep" draufwerfen können. Das ist schnell erzeugt, das mit schnell ausgelesen irgendwann aber nicht mehr.

Ausserdem sollte dieses Programm kein Konsolenprogramm werden, sondern grafisch für den Desktop sein. Erste positve Erfahrungen hatte ich mit Zenity  schon gesammelt und das sollte auch meinen Ansprüchen genügen.

Dazu sollte eine Datenbank gehören, auch meinetwegen gerne verteilt auf verschiedene Dateien wie eine Datei pro Datenträger und starke Abhängigkeiten wie Server/Client Datenbanken wollte ich auch nicht haben dafür, sondern etwas wie eine Berkely Datenbank.

Meine Wahl fiel jedoch auf Sqlite, das auch in aktuellen Produkten wie Firefox und I-Phone Verwendung findet.

Bisher habe ich Einlesen fertig, hier sind die Screenshots:

Auswahl des/der Datenträger:

Datenträger Auswahl, auch mehrere  

Einlesen der Dateien, hier ist die Dauer ungewiss und durch einen pulsierenden Fortschrittsbalkens dargestellt:

Dateien einlesen

Schreiben der Datenbank mit den zuvor ermittelten Daten, hier ist der Verlauf eindeutig und es kann ein echter Fortschrittsbalken angezeigt werden:

Datenbank schreiben

Fertig:

Ende Hinweis

Ich bin mächtig stolz auf mich, ich kann jetzt nämlich in C Programmen dynamisch Speicher aloziieren, was auch dringend notwendig ist, denn die Menge an Daten von vorher nicht bestimmten Datenträgern kann man nicht fest einprogrammieren.

Ausserdem habe ich gelernt, wie ich mit C nicht nur Sqlite3 Dateien reinpumpe, sondern auch wie ich Pragmas zur Geschwindigkeitsoptimierung verwende und Unterprogramme zum Un-/Komprimieren anmelde.

Eine wahre Wucht und ich freue mich schon auf das Gestalten der Ausgabe...

[Update 01.08.2011]

Meine Vorstellung, für jedes Medium je eine Datenbank zu schreiben und bei Abfragen die Funktion SQLITE_ATTACH zu verwenden, wodurch ich alle Datenbanken über ein Datenbankhandle ansprechen kann und alle Datenbanken wie eine erscheinen, schien ja das voll geile komfortable feature zu sein.

Jedoch bin ich beim Hinsehen auf die Grenzen gestoßen, z. Z. sind da nicht mehr als 62 Datenbanken  drin. Das erscheint mir doch ein bißchen wenig, sodass ich mich beim Datenbank Design kalt erwischt fühle und das wohl ändern muss. Also ist in etwa doch nur eine Datei für alles oder so angesagt, schließlich kann eine Datenbank 2^64 Reihen haben, eine Grenze die man eigentlich gar nicht haben können soll und dann wäre die Datei 14 TB groß. Das Datenbankdesign muss ich mir also nochmal überdenken.

Categories: Hardware, Linux, Programmierung, Selbstgemacht, Software

[ [1] Kommentar ]

rtl2832u neues build aus neuer Quelle Dienstag, 14 Juni, 2011 10:45

Für meinen "MSI Digi Vox mini Deluxe DVB-T USB Stick" sind die im Mai verwendeten Quellen alt geworden wenn ich neueste Kernel verwenden möchte. In den Kernelquellen sind linux/autoconf.h und linux/smp_lock.h verschwunden (so seit 2.6.37-39) und dann bricht kompilieren natürlich mit Fehler ab.

Aber ich habe eine neue Quelle gefunden und jetzt kompiliert es wieder: http://www.spinics.net/lists/linux-media/msg24890.html 

Diesmal gibt es nicht viel zu tun:

    
mkdir /tmp/dvbt
cd /tmp/dvbt
git clone git://linuxtv.org/mchehab/new_build.git
cd new_build/
wget http://goo.gl/CnJJu -O rtl2832u_v2.0.1-new_build-set.tar.gz
tar -xf rtl2832u_v2.0.1-new_build-set.tar.gz
./build-rtl2832u.sh

sha1sum:
c023031f3cc2cc22a1f40dc5d9fa64968af7307e  rtl2832u_v2.0.1.tar.gz

3aca8850fe118473f25b034239b3bf5648d4a08e rtl2832u_v2.0.1-new_build-set.tar.gz


All credit goes to Realtek, Antti Palosaari, Afatech and V4L/DVB developers.

Nice :-)

Categories: Hardware, Linux, Software

[ [0] Kommentare ]

MSI Digi Vox mini Deluxe DVB-T USB Stick Version 3Sonntag, 08 Mai, 2011 22:41

Für 15€ habe ich den "MSI Digi Vox mini Deluxe DVB-T USB Stick" der mit einer Stummelantenne und einer Fernbedienung, sowie viel Werbematerial von MSI, dafür aber ohne USB-Verlängerung ausgeliefert wurde ergattert, der sogar HDTV 1080i ready ist.

Nun, leider gibt es für diese Gerät mit der USB ID 1d19:1101 keine Kernelunterstützung. Ein Tag Internet Recherche hat mich erst hierhin: http://www.linuxtv.org/wiki/index.php/MSI_DigiVox_mini_II_V3.0  und dann zu dieser Seite mit der Lösung geführt: http://www.turnovfree.net/~stybla/linux/v4l-dvb/lv5tdlx/ 

Bei dem z. Z. aktuellsten Paket 20101102_linux_install_package-Dongle.rar handelt sich um ein für den Chipsatz rtl2832u gepatchtes v4l (in gentoo maskiert: media-tv/v4l-dvb-hg von http://www.linuxtv.org ) samt Install Script. Zum Verständnis: Hier werden ausserhalb der Kernelquellen Module gebaut und ins System installiert.

Und hier ist die Anleitung: http://wiki.ubuntuusers.de/MSI_DigiVox_mini_II . Ich habe jedoch nur ein Blick in das Script geworfen selbst ein "make distclean" ausgeführt und anschliessend mit "make menuconfig" alles überflügsige rausgehaun, denn sonst wird alles und jedes gebaut. Hier ist die die .config Datei aus linux_install_package/v4l_rtl2832_install/v4l-dvb-abd3aac6644e/v4l/.config zum Anschauen, wer die verwenden will, muss ein "make oldconfig" oder ein "make menuconfig" ausführen, bevor kompliliert werden kann. Naja, und dann ein "make" und "make install" wie im Script eben. Dann habe ich nur die Module, die ich wirklich brauche.

Und wirklich, Stick eingesteckt, Module geladen und läuft. Damit es läuft, war noch ein bisschen für die Programme, die ich verwenden möchte notwendig. Vlc und mplayer brauchen eine channels.conf, siehe z. B. hier: http://wiki.ubuntuusers.de/dvb-utils#channels-conf . Der Befehl scan übrigens heißt jetzt dvbscan und ist im Paket media-tv/linuxtv-dvb-apps enthalten.

meine de-BRAUNSCHWEIG sieht so aus:

  
# DVB-T DBraunschweig # Mai 2011 # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 490000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE T 498000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE T 658000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE T 682000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE T 768000000 8MHz 2/3 NONE QAM16 8k 1/8 NONE

und die habe ich mir mit der besagten Vorlage und http://dvb-t.the-media-channel.com/nord/dvb-t-braunschweig.html zusammengebastelt und stimmt dann im Detail mit der Realtität überein und unterscheidet sich damit von der /usr/share/dvb/zap/dvb-t/de-Braunschweig (auch aus dem Paket media-tv/linuxtv-dvb-apps enthalten). Die damit erzeugte channels.conf habe ich ein bisschen umsortiert und kann hier angesehen werden: channels.conf .

Sie gehört in das Verzeichnis ~/.mplayer und dann kann man mplayer mit "dvb://XY" (wobei XY dann der Sendername ist) zum TV-Programm anzeigen anweisen.

Vlc kann z. B. mit der Angabe "~/.mplayer/channsels.conf" sofort im TV-Modus gestartet werden, hier fünktioniert auch Programm auf und ab (n und p). Für mplayer habe ich mir auch soetwas gebastelt: dvb.playlist . "mplayer -playlist .mplayer/dvb.playlist" startet dann im TV-Modus und auch hier kann man im Programm auf und ab (> und <).

So, damit bin ich erstmal vollstens zufrieden, EPG Basteleien kommen später.

Categories: Hardware, Linux, Selbstgemacht, Software

[ [0] Kommentare ]

udev Regel für cryptsetup luks verschlüsselte USB DatenträgerFreitag, 29 April, 2011 1:12

In Linux nehme ich gerne andere Windowmanager als KDE oder Gnome, nämlich solche, die wenig Speicher brauchen und die CPU kaum beanspruchen - wie z. B. jwm oder fluxbox. Die kennen keinen Fortschrittsbalken, sondern poppen einfach auf und sind dann da und es kann losgehen. Sie sind winzig und auch klein im Funktionumfang und bringen nicht alles mit, wofür es schon Spezialisten gibt - in jwm bekomme ich Desktop Icons mit rox desktop. Der Lautstärkeregler? gvolwheel. Und so weiter.

Nun gab es aber schon immer das Problem, daß solchen smarten Windowmanagern wirklich etwas völlig und seit ewig fehlte: Ein grafisches Poppup zum Eingeben des Schlüssels, wenn man einen cryptsetup luks verschlüsselten USB Stick angeschlossen hatte.

Im Gentoo Forum habe ich eine schöne Vorlage gefunden für eine udev Regel die in arch Linux funktionierte, nicht aber in Gentoo. Das habe ich untersucht und mit der ersten selbst erstellten udev Regel für mich experimentiert, was man in der udev Regel machen kann und was ein externes Script braucht. Das Problem hatte ich schnell gefunden und es lag hier verborgen: "Running external programs upon certain events ... udev does not run these programs on any active terminal, and it does not execute them under the context of a shell. Be sure to ensure your program is marked executable, if it is a shell script ensure it starts with an appropriate shebang (e.g. #!/bin/sh), and do not expect any standard output to appear on your terminal. (http://reactivated.net/writing_udev_rules.html#external-run )

Was dabei herausgekommen ist, kann man hier sehen:

Leerer Desktop vor dem Einstecken des USB-Sticks 

USB Stick gesteckt, das Fenster poppt auf 

Eingabe des Schlüssels 

Desktop Notify poppt auf 

Der geöffnete /media Ordner 

Der Inhalt des gemounteten Ordners 

Wieder eine Ebene zurück 

Umounten mittels pumount des Ordners mit der Maus 

Der Ordner nun nicht mehr gemountet 

Der USB-Stick wieder herausgezogen 

Download /etc/udev/rules.d/99-crypt.mount.rules weil es hier sonst den Rahmen sprengt :-)

/etc/udev/scripts/crypt.open.sh

 
#!/bin/sh WHAT=$1 WHERE=$2 while [ "$LOOP" != "done" ] do export DISPLAY=":0.0" PASS=`/usr/bin/sudo -u sascha /usr/bin/zenity --entry --hide-text=LUKS \ --text="LUKS open $WHAT at $WHERE" --title "Luks Passphrase" --width 500` if [ $? = 0 ];then # This is the ok button LOOP="run" echo $PASS | /sbin/cryptsetup -t 15 luksOpen $WHAT $WHERE if [ $? = 0 ]; then # Password success LOOP="done" fi else # this catches the cancel button LOOP="done" fi

done

Damit das im Windowmanager mit dem umounten funktioniert, muss der auf pumount eingestellt werden und sys-apps/pmount installiert sein.

Super, was habe ich lange vergeblich nach soetwas gesucht und jetzt konnte ich es sogar selbst fertigstellen.

Categories: Hardware, Linux, Programmierung, Selbstgemacht, Software

[ [1] Kommentar ]

Hacking Samsung SPF-87H - Linux demon v0.0.2Sonntag, 27 Februar, 2011 14:57

Der Deamon ist nicht länger auf /proc/bus/usb/devices angewiesen, wenn diese Pseudodatei nicht existiert, wird in /sys/bus/usb/devices hinabgestiegen und dort nach dem Gerät gesucht.

Hiermit kommt also die v0.0.2 an der sich sonst nichts geändert hat.

Download spf87hd_v0.0.2.tar.gz 

Categories: Hardware, Linux, Programmierung, Selbstgemacht, Software

[ [9] Kommentare ]

Hacking Samsung SPF-87H - Linux demonMittwoch, 02 Februar, 2011 13:34

Meinen Wunsch, wie ich den Samsung SPF-87H digitalen Bilderrahmen als Zweit-Monitor verwenden möchte, habe ich fertig programmiert. Da Samsung für dieses Gerät leider nur Windowsen unterstützt, guckt man als Linux User diesbezüglich in die Röhre. Das ist nicht (mehr) modern, aber leider Fakt. Nun ja, wenn du etwas gemacht haben willst, mach' es selbst! Und so habe ich mir einen Demon geschrieben.

Der Demon läuft im Hintergrund, schläft überwiegend und guckt dann immer nach einer Sekunde nach, ob das Gerät angeschlossen und im Monitormodus ist - dann schlägt er zu. Die Systemlast läuft gegen Null. Die einfache Lösung erschien mir am Anfang platt, es hat sich aber herausgestellt, daß sie auch die nervenschonenste und auch die Last schonenste ist, jedenfalls ist es nun so, dass ich die Pseudodatei des Kernels /proc/bus/usb/devices nach "Vendor=04e8 ProdID=2034" greppe. Das ist ja auch nicht wirklich eine echte Dateioperation und findet ohne Plattenzugriff allein im Hauptspeicher statt.

Es wird dann der permanente Monitormodus eingeschaltet und, sofern man es angegeben hat, das Kommando für diesen Fall ausgeführt. Da starte ich das Script, dass mir meine Conkys, die auf dem Hauptmonitor laufen, beendet und mir dann mit Xvfb, scrot und jpeg2spf87h, siehe unten, die Bilder auf den SPF-87H pumpt, die ich da sehen möchte.

Der demon kann noch was, denn wenn ich den SPF-87H dann wieder ausschalte, wird das Kommando für diesen Fall gestartet und dann startet er per Script wieder meine Conkys für den Hauptbildschirm.

Im Syslog sieht das so aus:

    
Feb  2 00:09:52 localhost spf87hd[16354]: SPF87H device in monitor mode found.
Feb  2 00:09:53 localhost spf87hd[16354]: claimed device.
Feb  2 00:09:53 localhost spf87hd[16354]: Permanent monitor mode enabled.
Feb  2 00:09:54 localhost spf87hd[16354]: Monitor cmd started.
...
Feb  2 00:11:27 localhost spf87hd[16354]: SPF-87H monitor device gone.
Feb  2 00:11:27 localhost spf87hd[16354]: No-Monitor cmd started.

Im Top:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                   
16354 root      20   0 18692  784  584 S    0  0.0   0:00.95 spf87hd

Na, damit kann man doch zufrieden sein, oder nicht?

Der Demon läuft auch im Vordergrund und kann auch ohne jede Option ausgeführt werden, dann schaltet er nur den permanenten Monitormodus auf dem Gerät ein.

Als demon muss er als root laufen, damit er in /var/run/ auch seine pid Datei schreiben und wieder löschen kann. Als user Prozess kann er auch betrieben werden, dann jedoch nur als Vordergrund Prozeß.

    
  $ ./spf87hd -h
Initializes the SAMSUNG SPF-87H for Linux Monitor Mode when it is set to it.

spf87hd has these Options:

-f, --foreground          Don't deamonize, stay at console.
-n, --nomonitor 'command' Command (unchecked) to be executed after Mini-
  Monitor function has been stopped.
-m, --monitor 'command'   Command (unchecked) to be executed after Mini-
  Monitor function has been started.
-u, --user [name]         Username (must exist) the commands are run by.
-h, --help                This text.
 

Für das Rüberschieben von JPEG Dateien habe ich auch ein eigenes Programm geschrieben, naja, abgeschrieben, wie im Großen und Ganzen eigentlich alles abgeschrieben, angepaßt und modifiziert ist. Dafür hat es aber auch sehr wenig Systemlast und produziert keine Beschwerden des Kernels mehr, "...process 24676 (jpeg2spf87h) did not claim interface 0 before use". Und ich verwende da libusb_bulk_transfer, genau wie der Windows Treiber auch bulk transfer verwendet.

Fehler passieren, die ich nicht verhindern kann. Bei hoher Systemlast ist es so, dass hier bei mir das Bilder rübersenden nicht immer funktioniert. Das ist aber kein Fehler von jpeg2spf87h, sondern eine Folge der Arbeit des Kernels in so einer Situation, jpeg2spf87h ist eben userland. Ausserdem gerät das Gerät manchmal aus dem Monitormodus hinein in den Datenträgermodus, das ist aber selten und kann durch einen Neustart des SPF-87H behoben werden. Ich merke das an der Bildschirmmeldung die dann kommt, sinngemäß steht dann da, der Datenspeicher sei fast voll und ich solle Dateien löschen wenn ich da Platz brauche. Diese Meldung fehlt vermutlich wenn Platz ist, dann merkt man es wohl nur daran, dass das Bild nicht mehr aktualisiert wird. Vermutlich ist das ein Bug in der Firmware, nur habe ich wenig Lust die neue Firmware einzuspielen die diesen Bug behebt, mir aber meine ganze Arbeit vielleicht wieder zunichte macht. Wer weiß? Never change a running sytem, you know? Aber vielleicht kann mir ja ein Leser mit der neuesten Firmware da mal was berichten...

Für die Realisation dieses kleinen aber anstrengenden Projektes habe ich also vielen Leuten zu danken, sie sind alle in den Quellen aufgeführt. Ja, opensource ist eine tolle Sache, ohne hätte ich meinen Samsung SPF-87H wohl wieder verkauft, oder nein, zum Kauf wäre es gar nicht erst gekommen. So wird mein Dank noch größer und geht auch an Samsung, denn ohne diese Versorgungslücke hätte ich mich gar nicht in diese Arbeit gestürzt. Da aber auch ohne Opensource ohne Hintergrund und Basis dieses Projekt gar nicht möglich gewesen wäre, ist es sogar so, daß ich gar nicht allen danken kann. Was ich aber tun kann, ist, das was ich gemacht habe, wieder zu veröffentlichen.

Wer also Lust hat, den Code einmal zu begutachten oder als Vorlage für sein eigenes Projekt nehmen möchte, oder wenn Du sogar selbst einen Samsung SPF-87H mit dieser bescheuerten, broken by design Firmware hast, dann hättest du ja sogar selbst dafür Verwendung.

Downloads:

spf87hd_v0.0.1.tar.gz 

jpeg2spf87h_v0.0.1.tar.gz 

Categories: Hardware, Linux, Programmierung, Selbstgemacht, Software

[ [16] Kommentare ]

Hacking Samsung SPF-87HMontag, 17 Januar, 2011 2:52

Der Digitale Bilderrahmen Samsung SPF-87H  kann unter Windows als Zusatzbildschirm verwendet werden. Auf http://vdrportal.de/board/thread.php?postid=947900   zeichnete sich ab, dass es auch mit Linux läuft.

Nun, da es mir keiner programmiert hat, musste ich es selbst tun und ein verschnupftes Wochenende weiter mit viel Internetsuche und viel Code kopieren und zusammenwürfeln und vor allem einem USB Verkehr Mitschnitt durch Wireshark war es schließlich soweit:

spf87h-tool , mein erstes C-Programm, das die ermittelte Codesequenz zum Bildschirm schickt, damit der im Monitormodus bleibt, ist fertig (UPDATE: Ich arbeite gerade an einem Deamon, damit man den Bildschirm nur "anschalten" muss und der rest automagisch funktioniert).

Der Samsung SPF-87H Digitale Bilderrahmen ist nun nicht länger nur ein Windows Werkzeug, sondern mir auch in Gentoo Linux zu Diensten und ich habe jetzt einen Zweitbildschirm, auf den ich meine Conkies auslagere, so habe ich auch in Vollbilddarstellung auf dem Hauptmonitor schnell mal auf den kleinen Samsung erblickt, was mein System so macht und wie das Wetter wird.

Nun kann ich den Monitor einschalten, Mini Monitor Modus auswählen, das Programm spf87h-tool starten, dann geht es los :

SPF-87H.sh

#!/bin/sh
killall conky 2>&1 >/dev/null
killall Xvfb 2>&1 >/dev/null
rm /tmp/.X13-lock 2>&1 >/dev/null
Xvfb :13 -screen 0 480x800x16 &
sleep 5
/home/sascha/SPF-87H/playusb/playusb -j /tmp/ram/xwud.jpg
export DISPLAY=:13.0
conky -p 0 -c /home/sascha/SPF-87H/conky/.conkyWeather &
conky -p 4 -c /home/sascha/SPF-87H/conky/.conkySystem &
conky -p 6 -c /home/sascha/SPF-87H/conky/.conkyCal &
conky -p 8 -c /home/sascha/SPF-87H/conky/nixie_clock.conkyrc &
while `grep -q 'Vendor=04e8 ProdID=2034' /proc/bus/usb/devices`
do
scrot /tmp/ram/xwud.jpg -q 100
jpegtran -rotate 90 -trim -outfile /tmp/ram/xwud.jpg /tmp/ram/xwud.jpg
/home/sascha/SPF-87H/playusb/playusb -j /tmp/ram/xwud.jpg
done
killall conky 2>&1 >/dev/null
killall Xvfb 2>&1 >/dev/null
sudo rm /tmp/.X13-lock 2>&1 >/dev/null
exit 0

Ach ja, /tmp/ram, das mounte ich per

/etc/fstab

  none /tmp/ram tmpfs mode=1777,size=512M 0 0

Durch tmpfs kann ich Dateien im RAM ablegen und verarbeiten, das verschnellert den Prozess enorm. Sogar meine nixie Röhren Digital Uhr mit Sekunden läuft im Zweitbildschirm dann ganz aktzeptabel.

Categories: Hardware, Linux, Programmierung, Selbstgemacht, Software

[ [0] Kommentare ]

« Selbstgemacht