User Tools

Site Tools


doc:appunti:linux:tux:xbmc

XBMC Media Center

Si è installata la versione Live scaricata da http://xbmc.org/download/. Si tratta di una Ubuntu 10.04 LTS, con gli opportuni pacchetti XBMC versione 10.1 Dharma.

Dopo l'installazione è possibile eseguire tutte le operazioni apt-get per aggiornare l'installazione e aggiungere il software necessario. I repository Ubuntu e XBMC sono già configurati.

Installare un plugin video

Come installare un plugin video da un repository non ufficiale (quindi non compreso nell'elenco):

  1. Aggiungere il repo installando l'opportuno file *-repo.zip.
  2. Aggiungere il plugin

Modificare una skin

Le skin predefinite si trovano nelle directory /usr/share/xbmc/addons/skin.*, quelle scaricate dal repository ufficiale oppure installate da file .zip vengono installate in $HOME/.xbmc/addons/skin.*.

Per aggiungere una skin all'elenco di quelle disponibili non è sufficiente creare la directory $HOME/.xbmc/addons/skin.*, la strada più semplice è creare un file .zip e scegliere dal menu Sistema, Add-ons, Installa da un file zip.

Ad esempio il file si può chiamare skin.conflu-hf-1.1.0.1.zip e deve contenere la directory skin.conflu-hf con tutta la gerarchia propria di una skin. Il file .zip può essere copiato in un punto qualunque del filesystem, che sia sfogliabile dalla funzione Installa da un file zip.

L'installazione provvede a copiare il file zip in $HOME/.xbmc/addons/packages/, a scompattare il file .zip in $HOME/.xbmc/addons/ e ad aggiungere la skin all'elenco di quelle disponibili.

Modificare la dimensione dei font

Anzitutto verificare qual'è la risoluzione predefinita della skin: nel file addon.xml cercare addon, extension e vedere il valore dell'attributo defaultresolution. Se ad esempio è 720p dovrebbe esistere una directory con lo stesso nome, quella contiene i file che vogliamo modificare.

720p/Font.xml

Si crea una nuova sezione <fontset>, con un id ed un idloc univoci.

<fontset id="Huge" idloc="31393" unicode="true">
...
</fontset>

language/English/strings.xml

Si dà un nome al fontset aggiungendo una <string> con id opportuno:

<string id="31393">Huge fonts</string>

720p/Home.xml

Miniature

Se si vuole fornire una miniatura per un file video basta preparare un file .jpg con lo stesso nome del file video e modificare l'estensione da .jpg a .tbn. È possibile con lo stesso metodo anche assegnare una miniatura ad una directory.

Sorgenti e repository ufficiali

Il codice sorgente è navigabile su github: https://github.com/xbmc/xbmc, si può clonare in locale con:

git clone git://github.com/xbmc/xbmc.git

L'Official Add-on Repository è clonabile con:

git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/plugins
git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/scrapers
git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/screensavers
git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/scripts
git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/skins
git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/visualizations
git clone git://xbmc.git.sourceforge.net/gitroot/xbmc/webinterfaces

Installazione XBMC 11.0 su Debian Squeeze (era Wheezy)

ATTENZIONE: ad oggi (2012-08-18) su Debian Wheezy viene installato XBMC da Git - cioè la futura versione 12 - sia utilizzando il repository ufficiale Debian che il repository www.deb-multimedia.org. Purtroppo la versione Git 12 di XBMC non appare ancora matura, abbiamo riscontrato i seguenti problemi: impossibile utilizzare il driver Alsa per l'audio, impossibile aggiungere directory dal menu Video → Files, impossibile eseguire il plugin Youtube. Quanto basta per tornare indietro di corsa a Debian Squeeze!

Un problema con il kernel 2.6.x di Squeeze è l'assenza di supporto ai sensori lm-sensors della scheda madre ASUSTeK E35M1-I DELUXE.

Vedere questi ottimi tutorial:

Si aggiunge il repository deb-multimedia a /etc/apt/sources.list:

deb http://ftp.it.debian.org/debian    squeeze main non-free contrib
deb http://www.deb-multimedia.org      squeeze  main non-free

Quindi si installa il pacchetto xbmc. Non è necessario installare un ambiente desktop completo, è sufficiente il pacchetto xinit.

Driver video accelerato

È necessario installare il driver grafico accelerato per X, altrimenti l'interfaccia di XBMC risponde lentissima, quasi inusabile. Nel nostro caso (scheda video AMD nee ATI Wrestler Radeon HD 6310) significa configurare /etc/X11/xorg.conf con il driver fglrx e caricare il modulo kernel fglrx. Il modulo kernel deve essere compilato ripsetto al kernel in uso, per fortuna il sistema Debian fa tutto in automatico, basta seguire i passaggi:

  • Installare i pacchetti fglrx-driver e fglrx-modules-dkms da Debian non-free.
  • Verificare che vengano installati i pacchetti linux-headers-* relativi ai kernel installati.
  • Il pacchetto build-essential dovrebbe essere installato per dipendenza, e con questo il compilatore, ecc.

In teoria l'infrastruttura DKMS (Dynamic Kernel Module Support) di Debian dovrebbe provvedere tramite gli script di postinst a compilare e installare il modulo kernel. Se qualcosa dovesse andare storto i passaggi per compilare il modulo kernel sono i seguenti (dove 12-3 è la versione del driver fglrx, 3.0.0-1-686-pae è la versione del kernel e i686 è l'architettura):

dkms build   -m fglrx -v 12-3 -k 3.0.0-1-686-pae -a i686
dkms install -m fglrx -v 12-3 -k 3.0.0-1-686-pae -a i686
dkms status  -m fglrx -v 12-3 -k 3.0.0-1-686-pae -a i686

Questo è il file di configurazione /etc/X11/xorg.cong (vedere eventualmente il comando aticonfig(1x)):

Section "ServerLayout"
        Identifier      "aticonfig Layout"
        Screen          0  "aticonfig-Screen[0]-0" 0 0
EndSection
Section "Module"
EndSection
Section "Monitor"
        Identifier      "aticonfig-Monitor[0]-0"
        Option          "VendorName" "ATI Proprietary Driver"
        Option          "ModelName" "Generic Autodetecting Monitor"
        Option          "DPMS" "true"
EndSection
Section "Device"
        Identifier      "aticonfig-Device[0]-0"
        Driver          "fglrx"
        BusID           "PCI:0:1:0"
EndSection
Section "Screen"
        Identifier      "aticonfig-Screen[0]-0"
        Device          "aticonfig-Device[0]-0"
        Monitor         "aticonfig-Monitor[0]-0"
        DefaultDepth    24
        SubSection "Display"
                Viewport        0 0
                Depth           24
        EndSubSection
EndSection

Watermark Logo Unsupported Hardware

Purtroppo il driver fornito dal pacchetto fglrx-driver (Debian Squeeze) non riconosce la scheda video integrata nella scheda madre E35M1-I, sebbene ne supporti il chip e quindi le funzionalità accelerate. Pertanto nell'angolo in basso a sinistra dello schermo X.org compare un logo sovraimpresso che indica “Unsupported Hardware”.

Si è trovata questa ricetta per patchare il driver binario e rimuovere il logo: Unsupported Hardware watermark.

Output audio via HDMI

Vedere i seguenti riferimenti:

Ottenere l'audio via HDMI non è immediato. Dopo aver installato i pacchetti alsa-base e alsa-utils verifichiamo con aplay che sia stata riconosciuta una periferica audio HDMI:

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

si vede che il device 3 della scheda audio 0 è quello che ci interessa. Per far sì che le librerie audio ALSA utilizzino questa periferica come canale PCM di default è sufficiente creare il seguente file /etc/asound.conf:

pcm.!default {
    type plug
    slave.pcm "dmixer"
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:0,3"
     }
}

Questa configurazione unisce le funzioni del plugin plug con quelle del plugin dmix; il primo effettua il resample dell'audio on-the-fly se necessario (ad esempio per suonare un brano mono sul device stereo), il secondo permette il downmixing di diverse tracce audio. Il downmix è fondamentale in XBMC se si vogliono eseguire altri programmi che fanno uso dell'audio (ad esempio con il plugin Advanced Launcher), altrimenti il device ALSA risulterebbe in uso esclusivo da parte di XBMC.

Vedere Advanced Linux Sound Architecture per alcune note sul downmixing.

Con alsamixer verifichiamo che il canale non sia muto: tramite il tasto F6 assicuriamoci di aver selezionato la scheda audio 0 Generic [HD-Audio Generic], il canale viene mostrato come controllo S/PDIF con la sola impostazione on/off.

:!: ATTENZIONE! Deve essere in esecuzione il server X e non deve essere attivo il salva-schermo, altrimenti non si avrà alcun suono!

Verificare che ELD (EDID like Data) riporti un monitor attivo, altrimenti l'audio non funzionerà:

cat /proc/asound/card0/eld#0.0 
monitor_present         1

Con i driver liberi Debian GNU/Linux è possibile che all'avvio il kernel non attivi l'audio su porta HDMI, questo il log per una AMD nee ATI Wrestler HDMI Audio (Radeon HD 6250/6310):

HDMI status: Codec=0 Pin=3 Presence_Detect=0 ELD_Valid=0

In questo caso basta aggiungere radeon.audio=1 alla command line del kernel per avere:

HDMI status: Codec=0 Pin=3 Presence_Detect=1 ELD_Valid=1

Quando l'hardware viene riconosciuto e attivati si prova ad ascoltare un suono:

aplay /usr/share/sounds/alsa/Front_Center.wav

Per verificare la funzione di downmixing si prova a suonare due brani contemporaneamente.

Dopo che il device ALSA default funziona, nel menu SystemSettings → System → Audio output di XBM si imposta come segue:

Audio output HDMI
Speaker Configuration 2.0
Dolby Digital (AC3) capable receiver No
DTP capable receiver No
Audio output device Defaults (ALSA)

in alternativa si potrebbe indicare:

Audio output device Custom
Custom audio device ALSA:default

Se si volesse scegliere come dispositivo di output direttamente il device PCM, senza passare per il plugin plug (resampling, downmixing, ecc.), bisognerebbe indicare come dispositivo custom ALSA:hw:0,3.

Nel nostro caso l'audio viene passato al televisore via HDMI, XBMC provvede all'eventualde decodifica e downmixing dei segnali AC3 o DTS, ecc. Per questo motivo sono state disabilitate le opzioni Dolby Digital (AC3) capable receiver e DTS capable receiver. Nel caso in cui il dispositivo di output fosse capace di tale decodifica bisogna indicare il canale con il quale si comunica con esso Passthrough output device.

Altre impostazioni

Si crea l'utente xbmc che verrà usato per eseguire il programma al bootstrap. Come minimo l'utente deve appartenere al gruppo audio.

Per l'audio che non funzionava? Basta creare il file ~/.asoundrc per l'utente? Vedere meglio le istruzioni di cui sopra, forse c'è la soluzione.

Per far partire XBMC al bootstrab si crea un file /etc/init.d/xbmc e si modifica la riga in /etc/X11/Xwrapper.config:

#allowed_users=console
allowed_users=anybody

Per consentire lo spengimento della macchina dal menu di XBMC si installano i pacchetti:

  • upower
  • acpi-support

e si edita il file /var/lib/polkit-1/localauthority/50-local.d/custom-actions.pkla:

[Actions for xbmc user]
Identity=unix-user:xbmc
Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*;org.freedesktop.udisks.*
ResultAny=yes
ResultInactive=no
ResultActive=yes

Problema audio suoni di sistema

Problema su Debian Wheezy con kernel 3.2.0-2-686-pae: non funzionano i suoni di sistema (tasti freccia, ecc.). Tutto funziona regolare con il kernel 3.0.0-1-686-pae oppure con i kernel della serie 2.6.x di Debian Squeeze.

Problema tastiera non US

Con una Debian Squeeze e una tastiera italiana correttamente configurata, XBMC eredita le impostazioni corrette. La tastiera è stata configurata in fase di installazione installando i pacchetti keyboard-configuration e console-setup.

Con Debian Wheezy invece XBMC non riconosce la tastiera italiana; il problema si presenta nonostante che da sistema operativo si sia selezionata la tastiera it, eseguendo il comando dpkg-reconfigure console-data. Dalla console testuale la tastiera funziona correttamente.

Il server X pare interpretare correttamente l'impostazione, infatti da una finestra xterm il comando setxkbmap risponde:

setxkbmap -query
rules:      evdev
model:      pc104
layout:     it

tuttavia per rendere effettiva la mappa italiana è necessario eseguire:

setxkbmap it

Probabilmente lo script di avvio /etc/init.d/xbmc - eseguendo direttamente xinit - salta qualunque impostazione Debian relativa alla tastiera. Per la verità non abbiamo proprio installato né un login manager né un display o window manager e di conseguenza neanche Xsession viene eseguito.

Per ovviare al problema abbiamo creato lo script /usr/local/bin/xbmc-setxkbmap che contiene:

#!/bin/sh -e
# Test if the program can run ($DISPLAY, permission, etc).
setxkbmap -query > /dev/null
# Get current X keyboard layout.
layout="$(setxkbmap -query | awk '/^layout:/ {print $2}')"
test -n "$layout" || layout=us
# Set keyboard layout.
setxkbmap "$layout" || setxkbmap us

quindi si è modificato /etc/init.d/xbmc in modo che al posto di /usr/bin/xbmc esegua lo script /usr/local/bin/xbmc-xbmc:

#!/bin/sh
/usr/local/bin/xbmc-setxkbmap
exec /usr/bin/xbmc $@

Lanciare xterm

Anzitutto si è fatto in modo di poter lanciare xterm da root lanciando startx (ovviamente bisogna aver fermato il servizio xbmc). Basta predisporre il file /root/.xinitrc:

#!/bin/sh
# Set keyboard layout.
/usr/local/bin/xbmc-setxkbmap
# Start an xterm.
exec xterm -font 12x24 -geometry 113x31

Per lanciare xterm dal menu Programs di XBMC si è installato il plugin Advanced Launcher e quindi si è collegato lo script /usr/local/bin/xbmc-xterm:

#!/bin/sh
if [ -f /etc/default/locale ]; then
    source /etc/default/locale
else
    LANG=en_US.UTF-8
fi
export LANG
cd
exec xterm -font 12x24 -geometry 113x31 -e /bin/bash -l

Per avere come shell predefinita bash invece di dash si è eseguito:

dpkg-reconfigure dash

che usa il meccanismo Debian delle diversion.

Ottimizzazioni

Problema di timing: scorrimento testo e slideshow

Con le impostazioni predefinite (XBMC 11.0 su Debian Squeeze) si presentava un vistoso problema di timing che affliggeva lo scrolling del testo (ad esempio nel testo scorrevole del feed RSS) e nello slideshow delle immagini (particolarmente vistoso se si attiva l'effetto pan/zoom). In pratica il movimento non era fluido ma avanzava a scatti.

La richiesta di help sul forum non ha avuto molto seguito, per fortuna ho scoperto che basta modificare l'impostazione SystemSystemVideo outputVertical blank sync in Always enabled invece di Let driver choose.

Problema di fluidità nelle scene di pan veloce

Con le impostazioni predefinite si notava qualche artefatto nelle scene di pan veloce, come se la scheda video non riuscisse a stare dietro al refresh del video. In pratica si notavano degli scatti nel video che risultava come suddiviso in strisce orizzontali. Modificando alcune impostazioni il problema si è notevolmente ridotto.

In particolare queste sono le impostazioni di SystemVideoPlayback:

Render method Auto detect
Allow hardware acceleration (VDPAU) On
Allow hardware acceleration (VAAPI) On
Adjust display refresh rate to match video Off
Sync playback to display On
A/V sync method Video clock (Resample audio)
Allowed error in aspect ratio to minimize black bars None
Display 4:3 videos as Normal
VDPAU Studio level color conversion Off
Activate Teletext On
doc/appunti/linux/tux/xbmc.txt · Last modified: 2015/03/21 23:21 by niccolo