HTPC – Home Theater PC

Ich habe mit dem Bau eines HTPCs begonnen. Ein HTPC ist im Prinzip ein ganz normaler PC, der allerdings nicht mit einem Bildschirm sondern direkt am Fernseher betrieben wird.

Nachdem ich als alter Linux-User kein Windows auf dem HTPC haben wollte, kam natürlich nur Linux in Frage. Ich habe mich dabei für yaVDR als Distribution entschieden. yaVDR ist eine fertig konfigurierte Lösung, die einen PC in ein Mediacenter verwandelt. Der Kern ist dabei der VDR, erweitert um XBMC und andere Module.

Hier erstmal einige  Bilder, die ich beim Zusammenbau des Rechners gemacht habe:

Der Rechner besteht aus:

  • Motherboard:   ASUS AT5IONT-I
  • Speicher: 4 GB
  • Festplatte: 2 TG Samsung EcoGreen
  • Chieftec Gehäuse
  • Extra Lüfter 60mm
  • TeVii S470 DVB-S2 Karte
  • HAMA USB Fernbedienung

Die erste Hürde war, dass das Board nicht alle Speicher annimmt – meine 2GB Riegel schon gleich gar nicht. Zum Glück hatte ich noch 1GB Riegel da, mit dem das Board sich starten lies. Dan erstmal ein BIOS-Update gemacht – was bei dem Board erstaunlich einfach ging – und danach hat er dann auch die 2GB Riegel genommen.

Die Installation habe ich dann erst mal noch im fliegenden Aufbau gemacht – um ggfs. was umstauschen zu können, falls irgendwelche Teile überhaupt nicht wollen. Aber es war soweit alles OK und die Installation lief problemlos ab. Installiert habe ich den Rechner über ein externes USB CD-Laufwerk.

Nachdem der Rechner das erste Mal gebootet war, habe ich alles in das Gehäuse gebaut und ihn an seinen Platz zum Fernseher gebracht. Anschluss per HDMI kein Problem – sofort Bild da! Manchmal hat man also auch Glück… 😉

Doch damit begann das Frickeln erst – und seit dem nenne ich den Rechner nur noch „Frickelbox“…

Was erwarte ich von dem HTPC?

  • HD-Fernsehen
  • Ton über HDMI und Analog
  • Fernbedienung für alle Funktionen
  • Stromsparendes „Sleep“ (S3 oder S4)
  • Wakeup über Fernbedienung
  • Wakeup bei Timeraufnahme
  • XBMC: Wiedergabe von Filmen vom NAS
  • XBMC: Wiedergabe von Bildern vom NAS
  • XBMC: Wiedergabe von Musik vom NAS

Jeder dieser Punkte hat besondere Aufmerksamkeit verdient – weil nichts auf Anhieb funktioniert hat 🙁

HD-Fernsehen

Die TeVii S470 wird von Linux unterstützt – aber nicht mit den V4L-Treibern, die im yaVDR per default verwendet werden. Hier war zum Glück nur die Installation der liplianin-Treiber notwendig. Seit dem läuft die Karte problemlos und hat hervoragende Umschaltzeiten!

Ton über HDMI und Analog

Das war schon spannender. Im Prinzip liefert yaVDR den Ton schon fast automatisch über HDMI aus, wenn man das im Webinterface einstellt. Nur hat das AT5ION leider zwei Grafikchips on Board: einmal den aus dem Intel D525/NM10 Chipsatz, und dann den NVidia ION2. Und der Nvidia ist der, der auch das Bild macht. Also musste ich erstmal herausfinden, welcher Sound-Kanal der des ION-HDMI Anschlusses  ist und dann in der richtigen Config diese Werte hinterlegen.

Dazu macht man estmal ein

aplay -l

um die Devices zu bekommen und testet dann mit

speaker-test -Dplughw:$CARD,$DEVICE

die gelisteten Devices durch.

Bei Card=1 und Device=7 hat der Fernseher dann ein Rauschen von sich gegeben; also die Werte im yaVDR speichern:

 dbset system.hardware.alsa.hdmi.card=1
 dbset system.hardware.alsa.hdmi.device=7

Beim ersten Versuch kam da 1,9 raus – nach einem Reboot war es dann aber 1,7 – ich weiss noch nicht, warum sich das geändert hat.

Fernbedienung für alle Funktionen

Die HAMA Fernbedienung wird über einen USB-Anschluß mit dem Rechner verbunden und meldet sich dort einfach als Tastatur und Maus an. Der Rechner muss also eigentlich gar nichts besonderes machen, um die Signale zu verarbeiten, LIRC ist nicht notwendig. Nur sind die Keycodes leider teilweise etwas „strange“. Eine super Anleitung, wie es doch geht, ist hier.

Ich habe hier lediglich die aktuelle /etc/init/remoted.conf als Vorlage für das Template verwendet und dort nur die entsprechenden Anpassungen gemacht.

/etc/yavdr/templates_custom/etc/init/remoted.conf/30inputlirc:
 #################################################################################
 # #
 # The following configuration file is generated automatically by the yaVDR #
 # system. Don't change this file as every update of yaVDR will overwrite #
 # the local changes. Instead put your required customizations #
 # into /etc/yavdr/templates_custom/ based on the original templates #
 # under /usr/share/yavdr/templates. #
 # #
 # http://www.vdr-wiki.de/wiki/index.php/YaVDR-FAQ#Templating.2FCustomizing #
 # #
 # #
 #################################################################################
# Starts Inputlirc daemon.
 #
 # Inputlirc is used to control different
 # infrared receivers and transceivers.
description "Inputlirc Daemon"
 author "Gerald Dachs "
start on starting vdr
 stop on runlevel [016]
respawn
script
 [ -r /etc/default/inputlirc ] && . /etc/default/inputlirc
 test -f /usr/sbin/inputlircd || exit 0
until [ -e /dev/input/by-id/usb-05a4_9881-event-kbd ] ; do sleep 1 ; done
 exec /usr/sbin/inputlircd -f -c -m0 $OPTIONS $EVENTS /dev/input/by-id/usb-05a4_9881-event-*
 end script
und die /etc/vdr/remote.conf:
 LIRC.Up KEY_UP
 LIRC.Down KEY_DOWN
 LIRC.Menu ALT_META_KEY_ENTER
 LIRC.Ok KEY_ENTER
 LIRC.Back KEY_BACKSPACE
 LIRC.Left KEY_LEFT
 LIRC.Right KEY_RIGHT
 LIRC.Red CTRL_KEY_E
 LIRC.Green CTRL_KEY_I
 LIRC.Yellow CTRL_SHIFT_KEY_T
 LIRC.Blue CTRL_KEY_M
 LIRC.0 KEY_KP0
 LIRC.1 KEY_KP1
 LIRC.2 KEY_KP2
 LIRC.3 KEY_KP3
 LIRC.4 KEY_KP4
 LIRC.5 KEY_KP5
 LIRC.6 KEY_KP6
 LIRC.7 KEY_KP7
 LIRC.8 KEY_KP8
 LIRC.9 KEY_KP9
 LIRC.Info BTN_RIGHT
 LIRC.Play KEY_PLAYPAUSE
 LIRC.Pause CTRL_KEY_G
 LIRC.Stop KEY_STOPCD
 LIRC.Record CTRL_KEY_R
 LIRC.FastFwd CTRL_SHIFT_KEY_F
 LIRC.FastRew CTRL_SHIFT_KEY_B
 LIRC.Next KEY_NEXTSONG
 LIRC.Prev KEY_PREVIOUSSONG
 LIRC.Power KEY_SLEEP
 LIRC.Channel+ KEY_PAGEUP
 LIRC.Channel- KEY_PAGEDOWN
 LIRC.Volume+ KEY_VOLUMEUP
 LIRC.Volume- KEY_VOLUMEDOWN
 LIRC.Mute KEY_MUTE
 LIRC.Audio KEY_KPASTERISK
 LIRC.Subtitles ALT_KEY_KP5
 LIRC.Schedule CTRL_KEY_T
 LIRC.Channels CTRL_KEY_O
 LIRC.Timers BTN_MOUSE
 LIRC.Recordings CTRL_SHIFT_KEY_M
 LIRC.Setup KEY_ESC
 LIRC.Commands ALT_KEY_F4
 LIRC.User1 KEY_HOMEPAGE

Stromsparendes „Sleep“ (S3 oder S4)

Wenn der Rechner in den S3 oder S4 Stromsparmodus geschickt wird, ist er so gut wie aus – die CPU und die meiste Hardware ist gestoppt – und er verbraucht dann fast keinen Strom mehr. S3 hält dabei den Hauptspeicher noch unter Strom und kann innerhalb von Sekunden wieder loslaufen, S4 speichert alles auf die Platte und startet von dort wieder. yaVDR macht dabei im S4 Modus noch einen Trick: er bootet NICHT von der gesicherten Information auf der Platte, sondern macht einen ganz normalen Boot des Rechners, da das so schnell geht, dass sich das S4-Wakeup eigentlich nicht lohnt. Aber im S4 (und S3) kann der Rechner über USB aufgeweckt werden. Das geht z.B. auch über die Fernbedienung am USB-Anschluß. Aber dazu später mehr…

Im yaVDR ist das S2RAM und S2DISK Paket enthalten. Leider ist das ASUS-Board nicht in der Tabelle der unterstützten Boards… Aber es geht trotzdem – nach etwas gefrickel…

Das Board hat einen USB3 Anschluß. Dieser verhindert, warum auch immer, das Suspend. Also muss vor dem Suspend das xhci-Modul aus dem Kernel entladen werden. Dies erfolgt irgendwo – kann mich im Moment aber nicht mehr erinnern, wo ich das eingetragen habe 🙁

Weiterhin hat das Netzwerkmodul beim Wakeup ein Problem, daher muss in/etc/yavdr/force-reload-modules.list der Eintrag „r8169“ rein. Damit wird das Modul automatisch beim Wakeup ent- und wieder neu geladen.

Wakeup über Fernbedienung

Die USB-Ports waren aus Sicht des ACPI noch nicht für ein Wakeup aktiviert. Dies habe ich in /etc/rc.local eingetragen:

 #!/bin/sh -e
 #
 # rc.local
 #
 # This script is executed at the end of each multiuser runlevel.
 # Make sure that the script will "exit 0" on success or any other
 # value on error.
 #
 # In order to enable or disable this script just change the execution
 # bits.
 #
 # By default this script does nothing.
 echo  "USB0" > /proc/acpi/wakeup
 echo  "USB1" > /proc/acpi/wakeup
 echo  "USB2" > /proc/acpi/wakeup
 echo  "USB3" > /proc/acpi/wakeup
 exit 0

Damit werden alle USB-Ports beim Booten für das Wakeup freigegeben und ich kann, nachdem ich dafür im yaVDR Webinterface als Shutdown-Methode noch „suspend to RAM“ gewählt habe, den Rechner nun mit der HAMA Fernbedienung aus- und wieder einschalten.

Wakeup bei Timeraufnahme

noch nicht gemacht…

XBMC: Wiedergabe von Bildern, Filmen und Musik vom NAS

XBMC hat in der aktuell im yaVDR enthaltenen Version ein Problem mit SMB-Shares. Beim Hinzufügen einer neuen Quelle öffnet sich der Username/Passwort-Dialog nicht, und XBMC fällt in eine Endlosschleife. Ich habe daher die Einstellungen für die verschiedenen Quellen direkt in der XBMC-Konfiguration vorgenommen.

Fazit

Bisher funktioniert, nach vielen Stunden Arbeit, eigentlich alles, was soll. Nun muss ich noch die Suchtimer vom VDR-Live-Plugin testen und dann kann die Frickelbox in den Produktivbetrieb übergehen!

Edit: Hmm, zu früh gefreut – der Rechner ist zu LAUT! Das billige Netzteil macht einfach zu viel Lärm. Also wird da noch ein externes Netzteil mit DC-DC Wandler im Gehäuse und ohne weiteren Lüfter (bis auf den einen, der schon drin ist) her müssen…

Als Tastatur für den HTPC hab ich jetzt von Logitech die DiNovo Mini-Fernbedienung entdeckt – klein aber ziemlich teuer. Mal sehen, ob die noch drin ist…