Cela fait un moment que je cherche une solution multimédia pour lire les vidéos et la musique stockée sur mon serveur. Après beaucoup de solutions essayées (mediaportal, serveur Upnp et lecture depuis la freebox ou xbox, …), mon choix s’est arrêté sur XBMC. Pour les profanes, XBMC est un centre de média libre et multiplateforme permettant la gestion de la musique, des photos, et des vidéos. Il dispose d’une interface conviviale et personnalisable, gère énormément de formats de fichiers multimédias (je n’ose pas dire tous, mais je n’en ai pas encore rencontré qui ne fonctionne). Des add-ons peuvent être ajoutés afin d’augmenter les fonctionnalités, et la communauté autour du projet semble très active.
Une fois le tout monté, installé, configuré et quelques petits bugs corrigé, on peut s’installer tranquillement sur le canapé un sirop de pêche dans une main, la télécommande dans l’autre et le contrôle de toute sa médiathèque au bout des doigts… Un vieux rêve. C’est un moment parmi tant d’autre ou l’on se sent fier d’être geek !
Le choix du matériel
Afin que le matériel se fonde dans le décore, il faut quelque chose de discret, sobre et de petite taille. Fervent utilisateur d’ASUS, mon choix s’était d’abord posé sur la gamme eeebox. Mais devant l’impossibilité de trouver une version livrée sans OS (Windows 7 en l’occurrence), j’ai abandonné cette idée. En effet, je voulais absolument qu’XBMC soit installé sur un GNU/Linux et cela m’ennuyai profondément de payer une licence que je n’utiliserais pas avec le matériel. Je me suis donc dirigé vers la marque Shuttle, et plus particulièrement le modèle XS35GT v2. Il ressemble à ça :
Ce modèle dispose d’un refroidissement passif faisant grâce des ventilateurs bruyants, une sortie vidéo/audio HDMI idéale pour la connexion à un téléviseur, et vendu sans OS (ni RAM ou disque dur dans mon cas). Le seul inconvénient pour moi et qu’il doit, si l’on en croit le manuel, être posé à la vertical afin de ne pas obturer les surfaces ajourées et limiter la dissipation de chaleur. Mais soyons honnête, son design s’intègre bien dans le décor, même debout. Et après plusieurs mois d’utilisation, le fait qu’il trône debout à côté de l’écran n’est ni choquant pour l’œil, ni même désagréable.
Installation de XBMC 10.0 Live (Dharma)
J’ai opté pour l’installation par le live CD XBMC. Il s’agit d’une distribution Debian/Ubuntu Lucid Lynx (10.04 LTS) sur laquelle XBMC et les composants essentiels à son fonctionnement sont déjà intégrés. La distribution est la dernière release stable à l’écriture de ces lignes : XBMC 10.0 Dharma.
La première contrainte lors de l’installation est l’absence de lecteur optique dans le XS35GTV2. Si aucun lecteur optique (optionnel sur ce modèle) n’a été installé, il faut passer par une installation via une clé USB. Pour cela, s’assurer dans un premier temps que la clé est formatée en FAT32. Utiliser ensuite le logiciel UNetBootin afin de générer une clé USB d’installation, puis installez l’OS XBMC Live.
…
Avant d’attaquer la configuration, il y a quelques paramètres à modifier. En effet, le compte logué et un compte utilisateur avec peu de droits, et le clavier et en QWERTY. C’est une question de choix personnel, mais sudo à chaque commande me gonfle, donc je passe en root :
# sudo -i
Puis l’on charge le français pour le mapping du clavier :
$ loadkeys fr
Activer l’interface réseau Ethernet
A près l’installation d’XBMC, aucune interface réseau (hors mis la boucle locale) n’est disponible, la carte réseau ethernet n’est pas détectée correctement. Le pilote étant déjà connu, cela peut être résolu facilement. Effectuer la combinaison de touches CTRL+ALT+F1 pour entrer dans une console si votre écran est connecté via la sortie HDMI (si vous êtes connecté avec la sortie VGA, la console est déjà affichée). A l’affichage du prompt d’authentification, entrer le login et le mot de passe (xbmc par défaut).
Entrer ensuite les commandes suivantes :
$ cd /lib/modules/2.6.32-26-generic/kernel/drivers/net/ $ sudo modprobe jme
Si toutefois le pilote n’était pas correctement intégré, voici la méthode pour l’installer.
Télécharger le pilote sur le site de l’éditeur
ftp://driver.jmicron.com.tw/Ethernet/Linux/
Copier l’archive sur une clé USB et connectez la au Shuttle (bah oui, y’a pas de réseau !!).
Monter la clé USB
$ mount /dev/sdb1 /mnt
Installez le pilote
$ cp -r /mnt/jme-1.0.6.1 /usr/local/src/ $ cd /usr/local/src/jme-1.0.6.1 $ sudo make install
Testez que le pilote est correctement installé
$ sudo modprobe jme
Maintenant que le pilote est chargé, passons à la configuration du réseau. Dans mon cas, un serveur DHCP est présent sur le réseau, la configuration réseau ne sera donc pas statique.
Editer le fichier /etc/network/interfaces
$ sudo vi /etc/network/interfaces
Le VI natif étant peut être déroutant pour la plupart, utilisez l’éditeur nano si vous n’êtes pas joueur (mais que les choses soient claires, on utilise VI quand on est un homme !!).
Donc,
$ sudo nano /etc/network/interfaces auto eth0 iface eth0 inet dhcp
Sauvegardez le fichier et redémarrer le réseau
$ /etc/init.d/networking restart
L’interface réseau eth0 devrait maintenant avoir une adresse IP attribuée. Vous pouvez le vérifier par un petit :
$ ifconfig –a
Activer l’interface réseau wifi
Dans l’hypothèse ou votre infrastructure est mal conçu, vous ne disposez pas d’une prise ethernet proche de l’écran. Dans ce cas le wifi peut être une alternative.
Le pilote de la carte wifi (RTL8192SE) est disponible sur le site de l’éditeur :
http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=48&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true
Pour installer les pilotes, il va falloir compiler cette fois.
$ cp -r /mnt/rtl8192se_linux_2.6.0017.0705.2010/ /usr/local/src/ $ cd /usr/local/src/rtl8192se_linux_2.6.0017.0705.2010/ $ make $ make install
Redémarrez ensuite la machine.
Note: vous aurez peut être besoin d’installer les paquets suivant pour compiler les pilotes wifi :
$ apt-get install build-essential subversion module-assistant module-assistant prepare
Editez le fichier /etc/network/interfaces ajoutez la configuration wifi
auto wlan0 iface wlan0 inet dhcp wpa-ssid “wlan network name” wpa-psk “clé wifi”
Redémarrez le réseau
$ /etc/init.d/networking restart
Activer l’audio via HDMI
L’étape suivante consiste à activer l’audio via HDMI.En effet, à ce stade, aucun son n’est perceptible par l’HDMI à la lecture d’une vidéo ou d’un fichier audio. Le X35GTv2 dispose de 2 cartes audios, et chacune dispose de son propre « device number ». Nous aurons besoin d’obtenir le « card number » et le « device number ». Pour ce faire, procédez comme suit :
$ aplay -l (that’s a small ‘L’) **** List of PLAYBACK Hardware Devices **** card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog] Subdevices: 0/1 Subdevice #0: subdevice #0 card 1: NVidia [HDA NVidia], device 3: NVIDIA HDMI [NVIDIA HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0
Nous utiliserons le ‘HDA NVidia’ card et device number 3. Donc card #1 et device #3. Ces numerous peuvent être différents selon les configurations.
Ensuite, assurez vous que l’interface HDMI n’est pas paramétrée en “MUTE”. Pour cela, lancer la commande :
$ /usr/bin/alsamixer
Appuyez ensuite sur F6 pour sélectionner la carte audio HDA NVIDIA. Sélectionnez ensuite l’interface SDIF et appuyez sur la touche ‘m’ afin de « démuter » l’interface (le symbole OO doit apparaitre à la place de MM. MM indique que l’interface est paramétrée à « MUTE ».
La dernière étape est de configurer la sortie son dans les paramètres systèmes d’XBMC. Nous aborderons cela dans la dernière partie de l’article : paramétrage d’XBMC.
Autoriser l’USB à sortir de la mise en veille
Imaginons le scénario suivant : Vous ne souhaitez pas éteindre totalement le Shuttle, mais profiter de la mise en veille afin de permettre le « redémarrage » via la télécommande, dont le récepteur est connecté en USB. Outre le fait de surconsommer un peu d’énergie inutilement, et que faire quelques pas jusqu’au Shuttle pour l’allumer ne peut être que bénéfique d’un point de vue médical, un autre problème vient se greffer à l’équation : la mise en veille désactive l’alimentation des ports USB. Pour que les ports restent alimentés durant la mise en veille, effectuez les modifications suivantes :
Vous souhaité par exemple que le port USB0 échape à la mise en veille: USB0 est le port placé directement à côté du port VGA.
$ echo USB0 > /proc/acpi/wakeup
Pour vérifier que le port USB0 sera bien actif durant la mise en veille :
$ cat /proc/acpi/wakeup Device S-state Status Sysfs node P0P1 S4 disabled pci:0000:00:1e.0 AZAL S3 disabled pci:0000:00:1b.0 P0P4 S4 disabled pci:0000:00:1c.0 P0P5 S4 disabled pci:0000:00:1c.1 JLAN S3 disabled pci:0000:02:00.5 P0P6 S4 disabled P0P7 S4 disabled pci:0000:00:1c.3 P0P8 S4 disabled P0P9 S4 disabled USB0 S3 enabled pci:0000:00:1d.0 USB1 S3 enabled pci:0000:00:1d.1 USB2 S3 enabled pci:0000:00:1d.2 USB3 S3 enabled pci:0000:00:1d.3 EUSB S3 enabled pci:0000:00:1d.7
Le mapping des ports USB pour le Shuttle XS35GTv2 est:
EUSB = front
USB0 = back usb port next to the capped vga
USB1 = next to USB1
USB2 = back usb port next to the vga
UBS3 = back usb port next to the lan
Afin de rendre les changements permanents, procéder comme suit :
$ sudo nano /etc/rc.local
Ajouter les lignes suivantes
echo USB0 > /proc/acpi/wakeup echo EUSB > /proc/acpi/wakeup echo USB1 > /proc/acpi/wakeup echo USB2 > /proc/acpi/wakeup echo USB3 > /proc/acpi/wakeup exit 0
Assurez vous que la dernière ligne est bien ‘exit 0’ puis sauvegardez le fichier.
Les périphériques LIRC peuvent s’incrémenter. Nous allons donc devoir exécuter un script pour palier à ce défaut et permettre aux périphériques concernés de sortir de la mise en veille.
$ sudo nano /etc/pm/sleep.d/90_lirc
Ajoutez ces lignes au fichier
# Script to disable lirc before suspend and restart after wake. case “${1}” in suspend|hibernate) if [ "$(pidof xbmc.bin)" ] ; then wget -q -b -O /dev/null -o /dev/null “http://127.0.0.1:8080/xbmcCmds/xbmcHttp?command=ExecBuilt&Inparameter=LIRC.Stop” fi /etc/init.d/lirc stop ;; resume|thaw) # If remote still does not work after suspend, uncomment the lines below. # Note you may need to change “lirc_mceusb”. See output from ’sudo lsmod | grep lirc’ for module name. rmmod lirc_mceusb modprobe lirc_mceusb /etc/init.d/lirc start if [ "$(pidof xbmc.bin)" ] ; then wget -q -b -O /dev/null -o /dev/null “http://127.0.0.1:8080/xbmcCmds/xbmcHttp?command=ExecBuiltIn&parameter=LIRC.Start” fi ;; esac |
Sauvegardez le fichier et quittez.
Donnez les permissions adequate au script
$ sudo chmod 755 /etc/pm/sleep.d/90_lirc
Vous devez ensuite paramétrer XBMC. Le script faisant appel à l’API JSON d’XBMC, il est nécessaire d’autoriser la prise de contrôle d’XBMC via http.
Dans System →Network, configurez les paramètres suivant:
Allow control of XBMC via HTTP: activé
– Port: 8080
– Username: xbmc
– Password: ****
Web interface: default
Allow programs on this system to control XBMC: active
Dans System→System→Power Saving, configurez les paramètres suivant:
Shutdown function: Suspend
Dans certains cas, un écran noir est affiché après la sortie de veille. Cela est semble-t’il du au pilote réseau ‘jme’. Pour corriger cela, créez le fichier :
$ sudo nano /etc/pm/config.d/00sleep_module
Ajoutez les lignes suivantes:
SUSPEND_MODULES=”$SUSPEND_MODULES jme”
Sauvegarder et quittez, puis donnez les permissions au script:
$ sudo chmod 755 /etc/pm/config.d/00sleep_module
A présent le XS35GTv2 est mis en veille lorsque vous appuyez sur le bouton « Power » de la télécommande. Une seconde pression le sort de la veille, et XBMC est à nouveau fonctionnel.
Changer la résolution du Splash screen
Après l’installation, le splash screen de démarrage de la machine à une résolution basse (800×600). Ce qui donne un résultat très décevant. Ce n’est qu’un petit détail esthétique, mais ça me turlupine. J’aime bien quand tout fonctionne! Donc pour changer la résolution, nous pourrions directement éditer le fichier de configuration GRUB, mais je pense qu’il est préférable d’éditer le fichier de valeurs par défaut de GRUB. Déjà parce qu’il est fait pour ça, et il permet d’éviter les erreurs graves. Donc:
$ vi /etc/default/grub
remplacer le paramètre #GRUB_GFXMODE=640x480
par GRUB_GFXMODE=1280x720
.
La nouvelle résolution dépend de votre écran et de la capacité du chipset graphique. Cette valeur est donc à adapter selon votre configuration.
Paramétrage d’XBMC
Il est temps de paramétrer XBMC. Redémarrez le XS35GT puis, depuis l’écran XBMC, sélectionnez le menu System.
Configurer l’audio HDMI
Rendez vous dans le menu System→Audio, puis paramétrez comme suit:
Audio Output: HDMI
Speaker configuration: 5.1 (Si vous disposez d’un home cinéma 5.1. Sinon adaptez à votre configuration)
Audio Output Device: Custom
Custom Audio Device: plughw:1,3 (card #1 (HDA NVidia), et device #3)
Passthrough Audio Device: Custom
Custom Passthrough Device: plughw:1,3 (card #1 (HDA NVidia), et device #3)
Dolby Digital (AC3) Capable Receiver: activé
DTS Capable Receiver: activé
L’audio via le câble HDMI doit maintenant fonctionner.
Configurer VDPAU
VDPAU=Video Decode and Presentation API for Unix. Il s’agit d’un protocole libre développé par NVIDIA et permettant l’accélération matérielle.
Afin d’activer le VDPAU, allez dans System→System→Video→Playback et activez le bouton “Allow hardware acceleration (VDPAU)”.
Cloner le son sur les sortie HDMI et headphone
L’idée saugrenue m’est venu de vouloir brancher le Shutlle sur mon ampli via la prise Jack. Et là surprise, uniquement les sons de navigation des menus ne sont audibles depuis l’ampli (sons qui ne sont d’ailleur pas reproduit via le connecteur HDMI). C’est un peu génant car je ne recent pas nécessairement le besoin de laisser la télé allumée pendant que j’écoute de la musique, et il faut avouer que c’est un peu frustrant de ne pouvoir écouter la médiathèque sur l’ampli qui est là pour çà. Après beaucoup de recherches et de tests infructueux, voici une solution qui fonctionne. Il y en a certainement d’autres, et celle-ci ne permet que la stéréo sur 2 canaux, mais ça suffit pour mon installation (la HIFI c’est bien, le home cinéma c’est pour les noobs!).
Vérifiez les numéros de périphériques audio avec la commande aplay -l. Dans mon cas, les interfaces sont détectées comme suit:
- HDMI: card 1, subdevice 3
- Jack: card 0, subdevice 0
créez un fichier de configuration ALSA /etc/asound.conf, et ajoutez les lignes suivantes:
pcm.!default { type plug slave { pcm both } } pcm.both { type route slave { pcm multi channels 4 } ttable.0.0 1.0 ttable.1.1 1.0 ttable.0.2 1.0 ttable.1.3 1.0 } pcm.multi { type multi slaves.a { pcm hdmi channels 2 } slaves.b { pcm jack channels 2 } bindings.0.slave a bindings.0.channel 0 bindings.1.slave a bindings.1.channel 1 bindings.2.slave b bindings.2.channel 0 bindings.3.slave b bindings.3.channel 1 } pcm.jack { type hw card 0 device 0 channels 2 } pcm.hdmi { type hw card 1 device 3 channels 2 }
ALSA prendra ce fichier de configuration par défaut, mais il faut ensuite configurer XBMC pour qu’il utilise le bon périphérique. Dans l’interface XBMC, rendez vous dans le menu System→Audio, puis réglez les paramètres:
Audio Output Device: Custom
Custom Audio Device: pcm.both
Redémarrez XBMC, et le son devrait maintenant sortir par les deux cartes simultanément. Je conseil quand même de désactiver les sons de navigation qui deviennent insupportables au fil du temps.
Afficher les températures CPU et GPU
Si vous faites un petit tour dans le menu System→System infos, vous vous apercevrez certainement que les menus sont prévus pour afficher les températures CPU et GPU, mais qu’aucune valeur n’est retournée. Cela est du au fait que les commandes par défaut pour récupérer ces infos ne fonctionnent pas. Pour corriger cela, éditez le fichier /home/xbmc/.xbmc/userdata/advancedsettings.xml
ajoutez les deux lignes suivantes entre les balises principales <advancedsettings>:
<gputempcommand> echo "$(nvidia-smi -q -a | grep Temperature | awk '{print $3}') C" </gputempcommand> <cputempcommand> sed -e 's/\([0-9]*\)[0-9]\{3\}.*/\1 C/' /sys/class/thermal/thermal_zone0/temp </cputempcommand> |