Page tree
Skip to end of metadata
Go to start of metadata

Inhaltsverzeichnis

Hinweise

Diese Anleitung beschreibt die Installation von XBMC aus dem Git-Branch (monatliche Updates) unter Ubuntu 64-Bit Minimal. Das bedeutet, es wird ein minimales Ubuntu Linux mit schlanken Desktopmanager und XBMC als einzige Anwendung installiert, um so die Bootzeiten so gering  und die Performance so hoch wie möglich zu halten. Wer es noch schlanker und schneller mag, sollte sich mal OpenELEC anschauen, was einen jedoch in der Flexibilität einschränkt.

Hardware

  • Mobo/CPU/GPU: Asus E45M1-M Pro A50M
  • RAM: Crucial DIMM Kit 4GB PC3-10667U CL9 (CT2KIT25664BA1339)
  • SSD: Samsung SSD 830 Series 64GB
  • Netzteil: PicoPSU 90W
  • Gehäuse: Silverstone Milo ML03

Installation von Ubuntu Minimal

Ich werde hier nicht die komplette Ubuntu-Installation beschreiben. Ich setze voraus, dass man in der Lage ist, sich durch den Konsolen-Installer durchzuklicken. 

Dann die Installation per SSH fortfahren. Zunächst benötigte Pakete wie z.B. Xorg, ein minimalen Desktop-Manager etc. installieren:
sudo apt-get update
sudo apt-get install python-software-properties udisks upower xserver-xorg-core xinit alsa-utils vim mesa-utils git-core librtmp0 libmad0 lm-sensors acpi-support
sudo reboot

User htpc zu Audio und Video-Gruppe hinzufügen:

sudo usermod -a -G audio,video,fuse,cdrom,plugdev htpc

Dann muss der FGLRX Treiber für die ATI APU installiert und initial konfiguriert werden:

sudo apt-get install fglrx
sudo aticonfig --initial -f
sudo aticonfig --sync-vsync=on

Optional: Damit bei HDTV über eine DVB-S2 Karte keine schwarzen Balken links/rechts angezeigt werden, muss noch folgender Befehl ausgeführt werden:

sudo aticonfig --set-pcs-val=MCIL,DigitalHDTVDefaultUnderscan,0

Danach ist ein Reboot nötig:

sudo reboot

XBMC

Installation

Das XBMC-XVBA Repo hinzufügen (getestete monatliche Git-Builds) und XBMC installieren:

sudo add-apt-repository ppa:wsnipex/xbmc-xvba
sudo apt-get update
sudo apt-get install xbmc xbmc-bin

Autostart

X11 rekonfigurieren, damit nicht-root User den XServer starten können:

sudo dpkg-reconfigure x11-common

"Anyone" auswählen.

Danach Autostart von XBMC ermöglichen. Init-Skript anlegen:

/etc/init.d/xbmc
#! /bin/sh
### BEGIN INIT INFO
# Provides:          xbmc
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of XBMC
# Description:       starts instance of XBMC using start-stop-daemon and xinit
### END INIT INFO
############### EDIT ME ##################
# path to xinit exec
DAEMON=/usr/bin/xinit
# startup args
DAEMON_OPTS=" /usr/bin/xbmc --standalone -- :0"
# script name
NAME=xbmc
# app name
DESC=XBMC
# user
RUN_AS=htpc
# Path of the PID file
PID_FILE=/var/run/xbmc.pid
############### END EDIT ME ##################
test -x $DAEMON || exit 0
set -e
case "$1" in
  start)
        echo "Starting $DESC"
        start-stop-daemon --start -c $RUN_AS --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  stop)
        echo "Stopping $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        ;;
  restart|force-reload)
        echo "Restarting $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        sleep 5
        start-stop-daemon --start -c $RUN_AS --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0 

Ausführbar machen und zu den Standard-Runleveln hinzufügen:

sudo chmod +x /etc/init.d/xbmc
sudo update-rc.d xbmc defaults

Powermanagement / Control

Erlaube XBMC, sein nice-Level anzupassen:

echo "htpc	-	nice	-1" >> /etc/security/limits.conf

Damit aus dem XBMC-Menü heraus der HTPC auch heruntergefahren werden kann, muss folgende Konfig angelegt werden:

/etc/polkit-1/localauthority/50-local.d/custom-actions.pkla
[Actions for xbmc user]
Identity=unix-user:htpc
Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*;org.freedesktop.udisks.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Damit man den HTPC auch über eine Fernbedienung und einen IR-Empfänger schlafen legen / aufwecken kann, muss zum einen eine udev-Regel angelegt werden:

/etc/udev/rules.d/90-mcewakeup.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="147a", ATTRS{idProduct}=="e03e" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup'" 

Die Attribute für idVendor und idProduct kann man mit lsbusb ermitteln:

htpc@htpc:~$ lsusb | grep -i infrared
Bus 001 Device 003: ID 147a:e03e Formosa Industrial Computing, Inc. Infrared Receiver [IR605A/Q]

Dort die nach der ID folgenden Angaben entsprechen der Vendor-ID und Product-ID (s.o.)

Zum Anderen muss folgende Zeile in /etc/rc.local eingefügt werden:

/etc/rc.local
echo enabled > /sys/bus/usb/devices/1-1.5/power/wakeup 

Welches USB-Device an welchem Bus-Element tatsächlich angegeben werden muss (/sys/bus/usb/devices/XXXX/power/wakeup), kann man wie folgt identifizieren (wenn man einen MCE-kompatiblen IR-Empfänger besitzt):

htpc@htpc:~$ dmesg | grep mceusb
[    1.813782] input: MCE IR Keyboard/Mouse (mceusb) as /devices/virtual/input/input3
[    1.813846] rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0
[    1.813992] mceusb 1-1.5:1.0: Registered Formosa21 eHome Infrared Transceiver on usb1:3
[    1.814017] usbcore: registered new interface driver mceusb

Dort in der dritten Zeile der Ausgabe (1-1.5).

Dirty Region Rendering aktivieren, dass die CPU-Last beim XBMC-Idle reduziert. Als User htpc folgende Konfig anlegen:

~/.xbmc/userdata/advancedsettings.xml
<advancedsettings>
   <loglevel hide="false">0</loglevel>
  <gui>    
    <algorithmdirtyregions>1</algorithmdirtyregions>
    <visualizedirtyregions>false</visualizedirtyregions>
    <nofliptimeout>0</nofliptimeout>
  </gui>    
  <cputempcommand>sensors|sed -ne "s/temp1: \+[-+]\([0-9]\+\).*/\1 C/p"</cputempcommand>
  <gputempcommand>/usr/bin/aticonfig --od-gettemperature | grep Temperature | cut -f 2 -d "-" | cut -f 1 -d "." | sed -e "s, ,," | sed 's/$/ C/'</gputempcommand>
</advancedsettings> 

Video

Einstellungen in XBMC

WoWasEinstellung
System > Einstellungen > System > Video-HardwareVertical Blank SynchronisationImmer aktiviert
Bildwiederholrate50.00
System > Einstellungen > Video > WiedergabeAllow hardware acceleration (XVBA)

an

 Bildwiederholfrequenz anpassenan
Synchronisiere Wiedergabe zur Anzeigean
A/V Sync MethodeVideo Takt (Verwerfe/Dupliziere Audio)

Audio

Den ALSA-Mixer starten:

sudo alsamixer

HDMI/SPDIF unmuten (MM bedeutet muted, OO entspricht an), mit der Taste "m" kann getoggelt werden (an/aus).

Wenn der Sound aktiviert ist, Einstellung permanent speichern:

sudo alsactl store

Dann muss man das Audio-Gerät identifizieren, dass den Ton ausgibt. Mittels aplay -l kann man sich die Ausgabegerät anzeigen lassen. Für die Ausgabe über HDMI auf meinem HTPC sieht das wie folgt aus:

**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Dann kann man mit speaker-test -c2 -Dplughw:0,3 (Karte 0, Gerät 3) und speaker-test -c2 -Dplughw:0,7 (Karte 0, Gerät 7) überprüfen, welches der Gerät einen Ton ausgibt. Entsprechendes trägt man dann in die globale ALSA-Konfig ein. In meinem Fall war es Karte 0, Gerät 3:

/etc/asound.conf
pcm.snd_card {
        type hw
        card 0
        device 3
}
ctl.snd_card {
        type hw
        card 0
        device 3
}
pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave.pcm "snd_card"
    slave {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
        channels 6
    }
    bindings {
        0 0
        1 1
        2 2
        3 3
        4 4
        5 5
    }
}
pcm.dsnooper {
    type dsnoop
    ipc_key 2048
    ipc_perm 0666 
    slave.pcm "snd_card"
    slave 
    {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
        channels 2
    }
    bindings {
        0 0
        1 1
    }
}
pcm.duplex {
    type asym
    # Wenn man nur Stereo-Signale hat, so kann man alle upmixen lassen:
    # playback.pcm "upmix"
    # Falls nicht, so wählt man den normalen Weg
    playback.pcm "dmixer"
    # und spricht den upmix direkt an; zB "aplay -D upmix sound.wav"
    # In den allermeisten Fällen wird die Aufnahme nur Stereo sein:
    capture.pcm "dsnooper"
}
pcm.!default {
    type plug
    slave.pcm "duplex"
}
pcm.upmix {
     type route
     slave.pcm dmixer
     slave.channels 6
     ttable.0.0 1
     ttable.1.1 1
     ttable.0.2 1
     ttable.1.3 1
     ttable.0.4 0.5
     ttable.1.4 0.5
     ttable.0.5 0.5
     ttable.1.5 0.5
}

Einstellungen in XBMC

WoWasEinstellung
System > Einstellungen > System > Audio-HardwareAudioausgabeHDMI
 Audio Ausgabegerät:Benutzerdefiniert (plug:dmixer)
Digitales Ausgabegerät für PassthroughBenutzerdefiniert (plughw:0,3)

Advanced Settings

~./xbmc/userdata/advancedsettings.xml
<advancedsettings>
<tvshowmatching append="no">
    <regexp>\[[Ss]([0-9]+)\]_\[[Ee]([0-9]+)\]?([^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
    <regexp>[\._ \[\-\\/]([0-9]+)x([0-9]+)([^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
    <regexp>[Ss]([0-9]+)[\.\-]?[Ee]([0-9]+)([^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
    <regexp>[\._ \-\\/]([0-9]+)([0-9][0-9])([\._ \-][^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
</tvshowmatching>
</advancedsettings>

USB Automounting

Dazu muss eine udev-Regel erstellt werden:

/etc/udev/rules.d/11-media-by-label-auto-mount.rules
# Start at sdb to avoid system harddrive. 
KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"

Tweaks

TTYs reduzieren

Im Console-Setup die maximale Anzahl auf 2 reduzieren:

/etc/default/console-setup
ACTIVE_CONSOLES="/dev/tty[1-2]" 

Alle anderen Inits der TTYs entfernen:

sudo rm -Rf /etc/init/tty3.conf /etc/init/tty4.conf /etc/init/tty5.conf /etc/init/tty6.conf

SSD entlasten

In /etc/fstab für die Root-Partition die Mount-Options noatime,nodiratime hinzufügen, sowie RAM-Disks für temp anlegen:

UUID=44dd91f1-0c9d-405c-b9e0-d37bc992c7c2 /               ext4    errors=remount-ro,noatime,nodiratime 0       1
# Ramdisk for /tmp
tmpfs	/tmp	tmpfs	defaults	0	0
# Ramdisk for /var/tmp
tmpfs	/var/tmp	tmpfs	defaults	0	0

Dienste abschalten

Wer es nicht braucht, kann noch folgende Dienste entfernen:

cd /etc/init
sudo mv cron.conf cron.conf.disabled
sudo mv atd.conf atd.conf.disabled
sudo mv ureadahead.conf ureadahead.conf.disabled
sudo mv ureadahead-other.conf ureadahead-other.conf.disabled
  • No labels

5 Comments

  1. Anonymous

    Hallo,

    auf der Hersteller Seite steht , dass das Mainboard 5 sata Ports haben soll (http://www.asus.com/Motherboards/AMD_CPU_on_Board/E45M1M_PRO/#specifications). Aber irgendwie erkenne ich auf keinem Bild des Manboards 5 Ports, sehe nur einen Sata GB/s Port.

     

    Vllt jemand eine Idee?

     

    Würde das Board gerne als xbmc und nas betreiben.

    1. Anonymous

      Hallo,

      das Board hat 5 Sata Ports. Der eine ist bei der Draufsicht leicht zu erkennen. Die anderen 4 sind direkt darunter, allerdings sind diese seitlich rausgeführt und nicht nach oben. Auf dem Bild ist es nur als weißes Rechteck zu erkennen, jedes Rechteck hat 2 Ports übereinander.

      1. Anonymous

        Hi,

        alles klar (smile). Leider auf keinem Bild des Mainboards wirklich zu erkennen. Danke für den Hinweis. Werde mir das Board mal für meinen kleinen Homeserver holen und berichten.

         

        Cu.

  2. Anonymous

    Klasse Anteilung, vielen Dank. Habe damit mein Asrock E350 zum Laufen gebracht, was vorher nur mit openelec möglich war.

  3. Anonymous

    Danke für die Anleitung. So habe ich endlich wieder eine eierlegende Wollmichsau mit meinem Ati-Board!

Write a comment…