Category Archives: Linux

Bessere Kamera für die Unterkirnacher Webcam

Wappen UnterkirnachJetzt über die Feiertage habe ich mir mal Zeit genommen und die Kamera der Webcam Unterkirnach ausgetauscht. Die Bildqualität ist jetzt sichtbar besser. 🙂

Statt einer USB Webcam, die durch den festen Fokus für Landschaftsaufnahmen denkbar ungeeignet war, kommt jetzt das offizielle Kameraboard für das RaspberryPi zum Einsatz.

Da die neue Kamera deutlich weniger Strom benötigt, konnte ich zudem auf den zusätzlichen USB-Hub verzichten und den Kabelsalat reduzieren:Raspberry Pi Cameraboard USB Webcam

Unter Archlinux ARM müssen folgende Zeilen an die /boot/config.txt angehängt werden, damit die Kamera verwendet werden kann:

start_file=start_x.elf
fixup_file=fixup_x.dat
disable_camera_led=1

Die notwendigen Programm, um Bilder oder Videos mit der Kamera aufzunehmen liegen beim ArchLinux Image unter /opt/vc/bin/. Um Bilder aufzunehmen kann beispielsweise raspistill verwendet werden. Um das Bild samt Datumsangabe zu generieren verwende ich raspistill in Verbindung mit ImageMagick:

#!/bin/sh
 IMAGE=/tmp/image.jpg
 THEDATE=$(date +"%Y-%m-%d %H:%M (%Z)")
 /opt/vc/bin/raspistill --width 920 --height 720 --quality 70 -o $IMAGE
 convert $IMAGE -pointsize 15 -font DejaVu-Sans -undercolor '#3371a3' \
 -fill '#FFFFFF' -draw "rectangle 0,699 920,720" \
 -fill '#3371a3' -draw "rectangle 0,700 920,720" \
 -draw "gravity SouthWest fill white text 10,2 'Wildpflanzenpark Unterkirnach'" \
 -draw "gravity SouthEast fill white text 0,2 '$THEDATE'" $IMAGE

Die Webcam ist wie gehabt über www.unterkirna.ch erreichbar!

Using mplayer with ATI UVD hardware acceleration to play h264 videos and the open source mesa driver under Linux

Since version 9.2.0-1 the open source Mesa driver supports ATIs UVD hardware video acceleration for h264 videos.

If it was enabled correctly your boot log should contain something like this:

Aug 31 18:55:22 main kernel: [drm] UVD initialized successfully.

You can easily check this with:

# journalctl -b | grep UVD

Now if you want to play a video with mplayer and make use of the new feature, you should append following parameter:

-vc ffh264vdpau

If everything went well you should see something like:

Starting playback...
[VD_FFMPEG] Trying pixfmt=0.
[VD_FFMPEG] XVMC-accelerated MPEG-2.
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [vdpau] 1280x720 => 1280x720 H.264 VDPAU acceleration

after mplayer has started.

And it’s really worth it! Without hardware acceleration the average CPU usage of mplayer was around 20% and it dropped to 1.7%!
This is how I watch dvb-c with mplayer:

mplayer dvb://Das\ Erste\ HD -vc ffh264vdpau -demuxer lavf -ao alsa:device=hw=1.0 -cache 8192

See a earlier post of mine about this subject: klick

Used source: klick

channels.conf für Kabel BW mit neuen Sendefrequenzen für mplayer DVB-C

Seit dem 4.6.2013 hat Kabel BW die Sendefrequenzen geändert, weshalb man die Sender neu suchen muss.

Erstellt habe ich die channels.conf folgendermaßen:

$ scan de-Kabel_BW > .mplayer/channels.conf

Wobei de-Kabel_BW aus /usr/share/dvb/dvb-c/de-Kabel_BW des Pakets linuxtv-dvb-apps stammt.
Diese Datei ist leider noch für die alten Sendefrequenzen gedachte, weshalb sie etwas erweitert werden muss, damit der Tuner eine Einstiegsfrequenz findet (glaube ich zumindest):

# freq sr fec mod
C 122000000 6900000 NONE QAM64
C 362000000 6900000 NONE QAM64
C 362000000 6900000 NONE QAM256

Hat man den Sendersuchlauf durchgeführt, kann man mit dem mplayer die HD-Sender folgendermaßen abspielen:

$ mplayer dvb://ZDF\ HD -demuxer lavf -ao alsa:device=hw=1.0 -cache 8192

Die Angabe des ALSA-Devices kann man natürlich weglassen.
Falls man das -demuxer lavf weglässt bleibt der mplayer einfach bei folgender Ausgabe stehen und es erscheint kein Bild:
TS file format detected.
VIDEO MPEG2(pid=6110) AUDIO MPA(pid=6120) NO SUBS (yet)! PROGRAM N. 0

Falls man den großen Cachewert weglässt, ist – zumindest bei mir – das Bild und der Ton nicht synchron und es entstehen Aussetzer.
Kleine Vorwarnung: Die HD-Wiedergabe erzeugt bei mir 25% Prozessorlast!

Hier jetzt meine channels.conf die man mit mplayer verwenden kann, aus den Sendernamen sollten man teilweise noch die * entfernen, falls sich jemand die Mühe macht einfach mir zukommen lassen, ich aktualisiere das hier dann:
Solltet ihr in eurer channels.conf in den Namen der Sender viele *-Zeichen haben, kann man das mit sed herausfiltern:

$ sed s/*//g .mplayer/channels.conf >> /tmp/channels.conf
$ mv /tmp/channels.conf .mplayer/channels.conf

Die Liste gib’s nach dem “More”
Continue reading channels.conf für Kabel BW mit neuen Sendefrequenzen für mplayer DVB-C

Webcam für Unterkirnach im Schwarzwald

Für meinen Raspberry Pi habe ich jetzt endlich eine sinnvolle Aufgabe als Webcam-Server gefunden.

Unter http://www.unterkirna.ch ist ab jetzt immer ein aktuelles Bild des Wildpflanzenparks samt Talsee zu sehen. 🙂

Systemaufbau ist wie folgt:

  • Auf dem Pi läuft Arch Linux ARM
  • Die Bilder werden mit dem kleinen c-Programm fswebcam in einer leicht angepassten Version gemacht
  • Webcam ist eine Logitech C270
  • Ein Cronjob schießt alle fünf Minuten ein Bild und schiebt es per scp auf den Server
  • Die Webcam wird über ein aktiven USB-Hub mit Strom versorgt, da der Pi maximal 150mA über die USB-Ports liefert
  • Zwischen 23.00Uhr und 4.00Uhr werden keine Bilder geschossen

Die Webcam könnte maximal Bilder mit einer Auflösung von 1280×960 Pixeln schießen, da hier der Traffic des Webservers etwas stark leiden würde, habe ich die Auflösung auf 960×720 verringert.

Adding a dotted zero to X11 core fonts (misc-fixed)

In this post I will show how one can edit bitmap fonts in pcf or bdf
format under GNU/Linux. The reason for writing this article was a wish
on mine part to edit the X11 core fonts in order to add a dotted or
slashed zero.

Motivation

I use urxvt with stock settings (except color) as terminal emulator.
If not defined to otherwise in the configfile urxvt uses the default fonts of
the X windowing system. The X default fonts are in fact a complete
collection of fonts which are called misc-fixed. They are available
in different sizes whereas urxvt uses 6×13 as a default.

The misc-fixed fonts are bitmap fonts.
This means that every character is defined pixel for pixel.
This leads to a few advantages over truetype or freetype fonts which are
constructed out of splines:

  • Faster to display: There is no need to convert the character to
    actual pixels before displaying it.
  • Pixel-perfect: As bitmap fonts are already stored in pixels they can
    be displayed exactly as defined beforehand. There is no need of
    anti-aliasing, the font is sharp as hell. This is the main reason why I
    use bitmap fonts.

The pixel perfection is the biggest downside of bitmap fonts at the same
time. As soon as a bitmap font should be scaled in any way, they start to
look blurry.

Dotted / slashed zero

A dotted or slashed zero is a typographic term and means, that the
number zero is crossed or has a small dot inside. This makes the zero
far more distinguishable from the capital letter O. There’s a nice
article on Wikipedia on that topic.
Unfortunately the misc-fixed fonts don’t have a dotted zero. 🙁

urxvt-misc-fixed-without-dotted-zero

But this is going to change…

Needed tools

Three tools are needed. It’s very likely that you must install the
first two.

  • pcf2bdf: This tool is used to convert the bitmap font from the
    binary pcf format into the ASCII-based bdf format (bitmap distribution
    format). On a modern Linux the bitmap fonts are stored in pcf
    format and additionally compressed with gzip. On archlinux this is only
    available in AUR: pcf2bdf.
  • gbdfed: The graphical bdf editor is used to edit bitmap fonts. On
    archlinux gbdfed is available only an AUR as well: gbdfed.
    The official site: gbdfed official site.
  • bdftopcf: This tool is used to convert the edited bdf file back
    into pcf format. It’s shipped with X, so theres a high possibility
    that you don’t have to install it. 😉

Editing the pcf font files

On most systems the font files will lay under

/usr/share/fonts/misc/

You can list all installed fonts with it corresponding name and path with the
fc-list utility:

$ fc-list

The next step is to copy the font file you want to edit and unzip it:

$ cp /usr/share/fonts/misc/6x13-ISO8859-1.pcf.gz /tmp/
$ cd /tmp/
$ gunzip 6x13-ISO8859-1.pcf.gz

After that we can convert the pcf file into bdf format:

$ pcf2bdf -o 6x13-ISO8859-1.bdf 6x13-ISO8859-1.pcf

Now we can edit the font with gbdfed:

$ gbdfed 6x13-ISO8859-1.bdf

gbdfed gbdfed

After that we convert the bdf file back into pcf format:

$ bdftopcf -o 6x13-ISO8859-1.pcf 6x13-ISO8859-1.bdf

Compress it and copy it back. Make sure to have a backup of your
original font…

$ gzip 6x13-ISO8859-1.pcf
# cp 6x13-ISO8859-1.pcf.gz /usr/share/fonts/misc/

Afterwards we force a rebuild of the fontcache:

$ fc-cache -f

You might have to restart the X server as well.

And we’re finished:

urxvt with misc-fixed in 6x13 and dotted zero

If you don’t want to overwrite your original font file you have to
rename the font inside of gbdfed, copy the modified font to
~/.fonts and run fc-cache -f ~/.fonts. After that you have to
specify the font inside of urxvts configfile / .Xresources:

URxvt.font: -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-1

Show default include directories of gcc and show default library search path of ld

To show the default include directories used when calling gcc you can manually invoke the preprocessor with -v option:
$ cpp -v
The output will contain something like:
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/include
/usr/local/include
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/include-fixed
/usr/include

To find out the used library search paths of ld (linker) just use:
$ ldconfig -v 2>/dev/null | grep -v ^$'\t'
If invoked as $ ldconfig -v the libraries in the used paths are printed out as well.

I found this quite helpfull as I had problems with unresolved includes.

sources: [1] and [2]

How To: 1080p Videos mit dem Raspberry Pi abspielen

In diesem Artikel wird erklärt, wie mit dem Raspberry Pi h264-codierte Videos mit einer Auflösung von 1920×1080 Pixeln (aka. FullHD / 1080p) abgespielt werden können.

“Installation” von Archlinux

Da ich inzwischen auf dem Laptop Archlinux einsetze und dort relativ zufrieden bin, habe ich mich gegen Debian entschieden und verwende stattdessen lieber die Archlinux Distribution für den Pi. Das Image kann man auf der offiziellen Downloadseite per Torrent oder http herunterladen. Anschließend kopiert man das Image einfach auf eine SD-Karte. Hierfür habe ich eine einfache 2GB SD-Karte verwendet. Kopiert wird mittels dd:

# dd if=archlinuxarm-29-04-2012.img of=/dev/sdX bs=4M oflag=sync

Wobei X der dem Buchstaben des Blockdevices unter dem die SD-Karte erreichbar ist entspricht. Falls man sich bezüglich des Buchstabens unsicher ist, kann nachdem die SD-Karte an den Computer angeschlosse wurde mit $ dmesg der Nachrichtenbuffer des Kernels ausgegeben werden. Hier sollte am Ende der Ausgabe etwas wie:
[ 2700.131623] sd 10:0:0:0: [sdf] 3862528 512-byte logical blocks: (1.97 GB/1.84 GiB)
[ 2700.132608] sd 10:0:0:0: [sdf] Assuming drive cache: write through
[ 2700.134458] sd 10:0:0:0: [sdf] Assuming drive cache: write through
[ 2700.134462] sdf: sdf1 sdf2
[ 2700.406247] EXT4-fs (sdf2): mounted filesystem with ordered data mode

zu finden sein. In diesem Falle wäre X also f. Zur weiteren Kontrolle kann mit $ mount noch kontrolliert werden, ob /dev/sdf1 wirklich der ersten Partition der SD-Karte entspricht. Bevor man mit dd das Image auf die Karte schiebt müssen alle gemounteten Partition der SD-Karte geunmounted werden (z.B. # umount /dev/sdf1), da sonst dd ansonsten mit einer Fehlermeldung beendet.
Auf die Option oflag=sync möchte ich hier noch mit einem Satz eingehen, da ich sie erst vor kurzem in einem von Gambarus tollen Beiträgen entdeckt habe: Sie bewirkt, dass jeder Block mit Nullen aufgefüllt wird, wenn er nicht komplett mit Daten beschrieben werden kann.
Nachdem das Image auf der SD-Karte ist, kann man die SD-Karte und alle notwendigen Kabel (HDMI, LAN, evtl. Maus und Tastatur und am Schluss Strom) in den Pi stecken, der daraufhin startet.
Anschließend kann entweder per SSH oder direkt am Pi gearbeitet werden.

Installation des omxplayers

Anstatt des mplayers oder vlc sollte man den omxplayer verwenden, da dieser die GPU des Pis ausnutzt! Der omxplayer wurde freundlicherweise von spenning aus dem Raspberry Pi Forum schon crosscompiliert, was die Sache relativ einfach macht. Wer selbst compiliert, kann sich unter Debian/Ubuntu das Paket gcc-arm-linux-gnueabi installieren, um den passenden Compiler zu bekommen. Dieses Paket ist für ältere Ubuntu/Debian-Versionen wie z.B. der letzten LTS Version 10.04 nur über ein separates PPA-Repository zu erhalten.

Folgende Befehle werden auf dem Pi ausgeführt:
Herunterladen:

# wget http://seyrsnys.myzen.co.uk/rpi/omxplayer-bin.tar.xz

Entpacken:

# tar -xf omxplayer-bin.tar.xz

Nach dem Entpacken sollte der Ordner usr aus dem entstandenen Verzeichnis omxplayer nach / kopiert werden. Hierdurch kopiert man die Binaries und Dokumentation an die richtige Stelle.

# cp -r omxplayer/usr/ /

Der omxplayer benötigt das Paket libva um richtig zu funktionieren. Um dies zu installieren reicht ein einfaches:

# pacman -S libva

Sollte die Installation fehlschlagen (wie bei mir), empfiehlt es sich erst ein Upgrade auszuführen:

# pacman -Syu

Wichtig: Falls man gefragt wird, ob zuerst pacman geupgraded werden soll, dies mit Nein beantworten, da ansonsten das Update nicht richtig durchläuft.

Wiedergabetest

Als Testfilm habe ich den freien Kurzfilm Big Buck Bunny verwendet, den man sich mit

# wget http://mirrorblender.top-ix.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_h264.mov

herunterladen kann (ca. 700MB).
Anschließen kann man den Film mit

# omxplayer -o hdmi big_buck_bunny_1080p_h264.mov

ruckelfrei und mit Ton über HDMI abspielen. Wird die Option -o hdmi nicht mit angegeben, wird der Ton über die 3,5mm Klinkenbuchse auf dem Board ausgegeben.
Der omxplayer besitzt zwar keine Man-Page aber eine kleine Dokumentation unter /usr/share/doc/omxplayer/README

Raspberry Pi angekommen

Raspberry Pi LogoHeute ist mein Raspberry Pi endlich angekommen 😀 Ich verfolge das Projekt schon relativ lange und freue mich schon darauf damit herumzuspielen. Als primärer Einsatzzweck ist der Raspberry Pi bei mir für Dinge geplant, für die ich – wegen dem Energieverbrauch und dem entstehenden Lärmpegel – bisher keine Lust hatte, einen normalen Rechner 24/7 angeschaltet zu lassen.

Geplant ist:

  • Eine Kamera anschließen, in kurzen Zeitabständen ein Bild auf den Server schieben und hier im Blog anzeigen
  • als kleiner privater Mailserver (weg von Gmail!)
  • CarPC

Raspberry Pi Top View Von Oben Close Up Raspberry Pi von Unten Bottom View Closeup Raspberry Pi Closeup

Java Runtime Plugin unter Firefox 11 Ubuntu/Debian wieder aktivieren installieren

UPDATE: Ich muss hier mal vor meinem eigenen Beitrag warnen. Die Deaktivierung des Java-Plugins ist nicht grundlos geschehen (siehe hier) . Eine Reaktivierung geschieht auf eigene Gefahr. Im Grunde ist es wieder mal ein Lizenzstreit. Oracle hat die “Operating System Distributor License for Java” (DLJ) gekündigt und das Oracle Java SDK darf jetzt nicht mehr von den Distributionen verteilt werden. Die letzte Version die noch unter der DLJ steht – also noch verteilt werden darf – enthält eine Sicherheitslücke, die sich über das Browser-Plugin ausnutzen lässt. Wegen der fehlenden Lizenz kann kein Sicherheitsupdate verteilt werden. 🙁 Deshalb wurde es von Canonical aus Ubuntu und vom Debian-Projekt aus Debian entfernt. Christoph hat allerdings einen tollen Artikel, wie man sich ein aus den aktuellen Java-Downloads von der Oracle Homepage ein installierbares Paket generieren kann.

firefox-java-logoBei einem der letzten Updates von Firefox Version 3.6 auf Version 11.0 aus den offiziellen Repositories ging bei mir irgendwie das Java Plugin verloren. 🙁 Dies hat zur Folge, dass Websites mit Java-Anteil (Post Portodruck, oder der online Foto-Dienst von DM) nicht mehr funktionieren.

Installation überprüfen

Ob das JRE-Plugin installiert ist, kann man folgendermaßen herausfinden:

about:plugins

in die Adresszeile des Browsers eingeben. Es erscheint eine Liste mit allen installierten Plugins. Falls hier kein Eintrag auftaucht, der “Java(TM) Plug-in 1.6.****” oder ähnlich heißt, ist das Java-Plugin nicht mehr richtig installiert.

Java Plugin für Firefox 11 wieder richtig installieren

Als erstes suchen wir uns die Plugin Datei:

$ locate libnpjp

Lustigerweise heißt das Browserplugin libpjp2.so und nicht sunjavaplugin.so oder libjavaplugin_jni.so was ich zuerst vermutete.
Als Ergebnis sollte euch der Pfad angezeigt werden, in welchem die Plugin-Datei zu finden ist. Bei mir ist das beispielsweise:

$ locate libnpjp
/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/libnpjp2.so

Falls ihr locate nicht installiert habt, erfüllt das gute alte find die Aufgabe natürlich ebenso (so zu suchen könnte etwas länger dauern :mrgreen:):

$ find / -iname "*libnpjp*" -type f 2> /dev/null

Wenn die Plugin-Datei gefunden wurde, muss eine symbolischer Link zur Plugin-Datei im Plugins-Verzeichnis von Firefox angelegt werden. Bei mir wäre das beispielsweise /usr/lib/mozilla/plugins. Hierzu werden root-Rechte benötigt, bei Ubuntu also ein sudo vorne anhängen:

# ln -s /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/libnpjp2.so /usr/lib/mozilla/plugins/

Dann noch Firefox neu starten und mit obiger Methode prüfen, ob das Plugin wieder in der Liste auftaucht.

Quellen: [1] und [2]

Unter Linux EXIF-Daten aus jpg-Dateien entfernen (verlustfrei / lossless)

Möchte man unter Linux aus einem jpg-Bild die EXIF-Daten entfernen, so kann man das mit Hilfe von mogrify aus dem ImageMagick-Paket tun:

mogrify -strip $BILD

Der Nachteil: mogrify überschreibt das Basisbild, was meistens nicht gewünscht ist. Abhilfe schafft hier – ebenfalls aus dem ImageMagick-Paket – das convert-Tool:
$ convert $BILD -strip $AUSGABE
Das wars! Ganz praktisch, wenn man sich die Bilder per Script für den Upload ins Web aufbereiten lässt.

Das Entfernen der EXIF-Daten mittels ImageMagick hat allerdings einen Nachteil: ImageMagick komprimiert das Bild neu. Die Entfernung der EXIF-Daten ist also nicht verlustfrei. Das hat laut einem Thread im ImageMagick-Forum folgenden Grund: ImageMagick versucht zu berechnen, welche Einstellungen für das jpg-Format bei der Erstellung des Bilder verwendet wurde. Da, zumindest in meinem Fall, die zu komprimierenden Bilder meistens von einer Digitalkamera erstellt wurden, ist das Ergebnis der Berechnung nicht exakt, sondern nur eine Annäherung an die proprietären Quantisierungstabellen der Kamerahersteller.

Abhilfe schafft hier das Tool jpegtran, das speziell für die verlustfreie Konvertierung von jpg-Dateien gedacht ist:

jpegtran -copy none $BILD.jpg > $AUSGABE.jpg
jpegtran -copy none -outfile $AUSGABE.jpg $BILD.jpg

Quelle: Stackoverflow
Mit ImageMagick kann man übrigens noch viele weitere tolle Dinge machen –> Man-page!