Categories
Bits & Bytes

Das Kodi Media Center im Eigenbau

Finally Kodi!

Kodi Media Center
Nachdem nun die Basis-Installation steht, die Hardware verfügbar ist und VDR läuft können wir nun zum finalen Schritt kommen bei dem wir alles zusammen bringen. Zu Beginn wurden die Paketquellen um debian-multimedia erweitert, damit sind wir nun in der Lage die neuere Kodi Version Helix anstatt des alten XBMC, welches noch in den Standard-Repositories von Debian ist, zu verwenden. Zusätzlich installieren wir das Gegenstück zum VNSI Server PlugIn von VDR, das kodi-pvr-vdr-vnsi PlugIn welches es erlaubt VDR durch Kodi zu steuern.

Me@myHost:~# apt-get install \
kodi \
kodi-eventclients-common \
kodi-pvr-vdr-vnsi \
kodi-skin-confluence \
kodi-standalone

Zu beachten ist das wie bei VDR auch, Kodi in einem eigenen Benutzerkontext läuft. Das kann allerdings bei verschiedenen Distributionen unterschiedlich gehandhabt werden, unter Debian heißt dieser Benutzer i.d.R. kodi und entgegen dem Standard befinden sich die Konfigurationsdateien nicht unter /etc, sondern im home/kodi/.kodi Ordner. Eine typische Struktur für diesen Ordner sollte ungefähr so aussehen.

Me@myHost:/home/kodi/.kodi# ls -l
total 28K
drwxr-xr-x  3 kodi kodi 4.0K Feb 27  2015 addon_data
drwxr-xr-x 98 kodi kodi 4.0K Aug 23 10:31 addons
drwxr-xr-x  2 kodi kodi 4.0K Feb 27  2015 media
drwxr-xr-x  2 kodi kodi 4.0K Feb 27  2015 sounds
drwxr-xr-x  2 kodi kodi 4.0K Feb 27  2015 system
drwxr-xr-x  6 kodi kodi 4.0K Sep 23 17:32 temp
drwxr-xr-x 10 kodi kodi 4.0K Aug 23 10:03 userdata

Eine der wichtigsten Funktionen, ist die Möglichkeit die Maschine aus Kodi heraus runter zu fahren oder neu zu starten, dazu erweitert man ggfs. die /etc/sudoers Datei:

%kodi ALL=NOPASSWD: /usr/bin/xbmc, /usr/bin/kodi, /bin/mount, /bin/umount, /sbin/reboot, /sbin/shutdown, /bin/systemctl

um allen Benutzern die Mitglied der Gruppe kodi sind die Verwendung der besagten Befehle zu gestatten. Bei manchen Distributionen wird diese Zeile automatisch während der Installation gesetzt dann ist ein Eingriff nicht erforderlich.

Boot Up Preparations

Nun dürfte bei einer Standardinstallation von Debian immer noch der Desktop starten, das kann man für ein Gerät das als Entertainment Hub/Media Center fungieren soll natürlich nicht gebrauchen daher sind noch einige Handgriffe nötig.
Um nun etwaige Konsolen-Nachrichten beim Boot des System zu unterbinden kann man GRUB die Geschwätzigkeit und das nachfragen abgewöhnen indem man folgende Parameter setzt:

Me@myHost:~# cat /etc/default/grub 
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=0

[...]

GRUB_CMDLINE_LINUX_DEFAULT="quiet text"
GRUB_CMDLINE_LINUX="console=tty12"

[...]

# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL=console

[...]

Me@myHost:~# sudo update-grub

Der erste Parameter startet den ersten Booteintrag in der Liste, das ist für gewöhnlich der Standardkernel der Installation, der zweite Eintrag reduziert die Wartezeit bis zum Startprozess sodass dieser augenblicklich beginnt. Außerdem wird in den folgenden Parametern der Kernel angewiesen ‘quiet’ zu sein, was aber immer noch nicht alle Nachrichten abstellt. Final lenken wir alle weiteren Ausgaben auf eine andere Konsole (tty12) um. Die einzige Nachricht die dann noch übrig bleibt ist:

Leider ist diese Ausgabe in den tiefen von GRUB (/etc/grub.d/10_linux) verbuddelt, Änderungen sollten hier nur erfahrene Benutzer vornehmen, die Gefahr sich die Boot-Prozedur durch unbedachte Änderungen zu zerschießen ist recht groß. Eine Möglichkeit bestände noch darin einen Splash-Screen zu verwenden, das überlasse ich aber dem geneigten Leser.

Achtung!
Ein Hinweis für Leute die einen proprietären Treiber vorziehen. Die Verwendung eines Splash-Screen beim Startprozess ist insbesondere deshalb problembehaftet weil die Verwendung eines Framebuffers u.U. dafür sorgt das sich der proprietäre Grafiktreiber nicht mehr aktivieren läßt weil zuvor schon der Open-Source Treiber aktiviert wurde. Zwar kann man diesen ‘black-listen’ aber dann funktioniert in manchen Fällen die Ausgabe des Splash-Screens nicht mehr.

Damit beim Startprozess der X-Server nun direkt Kodi startet und nicht den Login-Greeter des Windowmanagers weist man lightdm an direkt die XSession der Benutzers kodi zu verwenden, dafür sollte das kodi-standalone Paket installiert sein welches die dafür benötigten Dateien mitbringt.
Als kleines Gimmick kann man sich die Anmeldung über den Desktop erhalten wenn man lightdm in sogenannte Seats unterteilt. Damit wird eine XSession (und damit Kodi) ganz gewöhnlich über den Display der lokalen Grafikkarte gestartet. Zusätzlich kann man sich im Netz aber immer noch per XDMCP Protokoll am XFCE Desktop anmelden. Dazu fügt man in die Datei /etc/lightdm/lightdm.conf folgendes ein:

[...]
#
# Seat configuration
#
# Each seat must start with "Seat:".
# Uses settings from [SeatDefaults], any of these can be overriden by setting them in this section.
#

# put greeter on seat 0 as a 'virtual' remote display
[Seat:0]
type=xremote
greeter-session=lightdm-gtk-greeter
xserver-allow-tcp=true
user-session=default

# start kodi xsession on seat 1 on the local display
[Seat:1]
xdg-seat=seat1
autologin-user=kodi
autologin-user-timeout=0
user-session=kodi
greeter-session=
minimum-vt=8

#
# XDMCP Server configuration
#
# enabled = True if XDMCP connections should be allowed
# port = UDP/IP port to listen for connections on
# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf)
#
# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn.  Alternatively
# it can be a word and the first 7 characters are used as the key.
#
[XDMCPServer]
enabled=true
port=177
key=

Durch die Zeile autologin-user=kodi startet lightdm direkt in die XSession des Benutzers kodi, in dessen Startskript wird wiederrum Kodi ohne Umwege gestartet, das hat den Vorteil das nirgendwo ein Windowmanager dazwischen sitzt.

Achtung!
Zu dieser Startmethode gibt es noch einige Alternativen je nach Distribution, manche bevorzugen Init-Skripts, manche verwenden systemd oder upstart, sogar Socket Activation ist möglich. Ich habe mich für diese entschieden weil sie zum einen den Desktop per XDMCP erhält und zum anderen als Konfiguration recht einfach zu realisieren ist. Manch andere Methode erfordert doch einiges mehr an Bash-KungFu.

Nach einem Neustart sollte nun direkt Kodi starten. Wer dazu seine Box bereits im Wohnzimmer platziert hat möchte evtl. eine Fernbedienung für die weitere Konfiguration benutzen um nicht umständlicherweise jedes Mal Tastatur und Maus anzuschließen, eine Anleitung wie man das Smartphone dafür verwendet findet man hier.

Basiseinstellungen zur Video- & Audioausgabe

Üblicherweise schließt man die Grafikkarte per HDMI an, eigentlich kann man hier mit den voreingestellten Standardwerten fortfahren, achten sollte man nur darauf das die native Auflösung des Display verwendet wird, i.d.R. ist das bei Fernsehern die 1920×1080 FullHD-Auflösung mit einer Wiederholrate (Refresh Rate) von 60 Hz außerdem sollte unter Display Mode die Einstellung Full Screen gewählt sein. Unter Preferred Mode sollte man evtl. “Same as movie” einstellen, das sorgt dafür das die Wiederholrate ggfs. an die Wiedergabe des Videos angepasst wird sollte das erforderlich sein.

Video Settings

Normalerweise wird für die Audio-Ausgabe der 3,5mm Klinken-Ausgang der Audio-Karte verwendet. Fast alle neueren Mainboards bieten aber auch eine Audio-Ausgabe per HDMI an um die Audio-Ausgabe des Fernsehers zu nutzen und um weitere Kabel einzusparen. Wer ein separates Boxen-System verwendet kann hier u.U. die Cinch-Ausgänge des Fernsehers verwenden, das hat den Vorteil das man sich zusätzliches Umschalten der Audioquelle auf einer separaten Fernbedienung einsparen kann, sollten mehrere Geräte an den Fernseher angeschlossen sein da jedes Gerät seine Audiospur per HDMI einspeist.

Select audio output device.

Konfiguration des kodi-pvr-vdr-vnsi PlugIn

Um jetzt zunächst einmal eine grundlegende Fernsehfunktionalität zu erhalten konfigurieren wir Kodi für die Benutzung mit VDR.

Um in die Einstellungen zu gelangen navigiert man zu:

Settings >>
Add-Ons >>
Disabled Add-ons >>
PVR Client >>
VDR VNSI Client >>
Configure

anschließend sollte man hier landen:

Kodi's VDR VNSI Client Settings

Das Erscheinungsbild dieses Konfigurationsdialogs weicht vom üblichen Look ab weil ich hier ein anderes Theme verwende aber die Felder als solche sollten zu identifizieren sein. Die entscheidende Einstellung hier ist der VDR Hostname or IP den wir, aufgrund unserer vorangegangenen Einstellung in VDR, auf localhost oder entsprechend auf 127.0.0.1 setzen. Der Port sollte auf 34890 eingestellt sein, i.d.R. sind diese Einstellung bereits so gesetzt in dem Fall kann man den Dialog einfach mit OK bestätigen und aktivieren indem man anschließend Enable auswählt. Abschließend muß man nun noch das TV Feature unter Settings >> TV >> General >> Enable aktivieren.

Nach einem weiteren Neustart fällt zunächst die Einblendung oben rechts ins Auge…

PVR manager is starting up...

… und anschließend findet ein Scan der EPG Programmdaten statt.

Loading EPG from database...

… welches im EPG Menü dann so aussieht

EPG menu

et voilà

Kodi's TV menu
Kodi's TV Feature

Quellen:
kodi.tv
Kodi Xsession with lightdm.
Autostart all LightDM seats and show one as default
Make the boot realy quiet

By вяоӣсо

I'm a computer kid of the 80', not born but raised in good old' germany, playin' games, makin' music & lovin' the blues. My career started at an age of 10 in a shopping mall where they sold computers too. It was the first time ever i've seen such an electronic monster and was fascinated instantly.
Later on i've learned my first programming skills (Basic) with a friend's Sinclair ZX 81. Yes, that one with the strange plastics keyboard. After that i got some experience with a Schneider CPC464 and the Commodore C64 until i fell in love with the Commodore Amiga, a machine with 4096 different colors which sounds nowadays to most like black'n'white tv's sounded to me at that time.
We played a lot of games like Decathlon, The Last V8, Impossible Mission, Elite, Mega'lo'Mania, Xenon, Speedball or Chaos Engine and ruined a lot of those Competition Pro Joysticks. My favourites were mostly games by Sensible Software, Bitmap Brothers or Rainbow Arts.
What i liked the most about that machine was it's AmigaOS, it's operating system was ahead of it's time. On this machine i learned my first assembler language (m68k) and the hardware internas.
I watched the decline of Commodore with a tear in my eye and at some point i went over to usual business and my first PC and learned it's beastly manners.