Raspberry Pi : 1 - installation système pour retrogaming et mediacenter

La news d’introduction à cette série de tutoriels est disponible ici !

La liste des courses

  • Le Raspberry Pi
  • Un boitier
  • un cable ethernet (avec accès à votre réseau local et au net)
  • un cable HDMI
  • un écran (la TV)
  • une carte micro-SD (16 Go minimum, 32 ou plus si possible)
  • une alimentation (USB) 5V / 2.5A
  • une manette XBOX 360 filaire (ou deux)
  • votre ordinateur (mac ou pc)
  • un lecteur de carte SD pour votre ordinateur.

Au niveau logiciel

Quelques remarques :

La carte SD
Il s’agit du disque dur de votre Pi, on va poser dessus le système d’exploitation, les logiciels et la majorité des jeux. Autant dire que la qualité de la carte est primordiale pour la réactivité du Pi. On va privilégier une classe 10, et avant de l’acheter, on va vérifier sa compatibilité. Visez au minimum 32 Go, ça sera plus confortable. Une fois que votre système sera parfaitement installé, configuré et peuplé de jeux, prenez le temps d’en faire une image disque. Une carte SD, même d’excellente qualité, peut se corrompre. Et devoir tout réinstaller à cause d’une panne de courant peut être rageant.

L’alimentation
Par pitié pour votre Pi, pas d’alimentation no-name qui peineront à délivrer plus de 500 mA. La framboise a besoin de jus pour fonctionner et pour alimenter les éventuels périphériques USB que vous y ajouterez. En cas de mauvaise alimentation, de nombreux problèmes peuvent survenir : réduction de la vitesse d’horloge, corruption de la carte SD, et dans des cas extrêmes, destruction de la carte mère. Pour les mêmes raisons, on n’utilisera pas l’éventuel port USB présent sur les TV modernes. Notez que si votre Pi n’est pas content, il vous le dira. Si il n’est pas assez alimenté, il affichera une icone arc-en-ciel en haut à droite de l’écran. Et réduira sa vitesse d’horloge. Si il a trop chaud, l’icone sera orange. Et il réduira aussi sa vitesse d’horloge.

Réseau filaire ? Une manette xbox 360 filaire ?
Oui. On va cadrer le premier contact : c’est super facile de perdre pied au début. J’ajouterai des mini tutoriaux ensuite pour passer en wifi, utiliser d’autres manettes, exploiter le bluetooth. Mais on va commencer simplement.

Pédagogie, essais et erreurs
La vocation première du Pi est d’essayer et d’apprendre. N’hésitez pas à installer des distributions alternatives sur d’autres cartes et les tester, à faire des erreurs et même les rendre inutilisables. Le Pi est fait pour ça, profitez-en !

Ligne de commande, linux et disclaimer
On va travailler sur un système linux sans interface graphique (pas de bureau, de fenêtres ou de souris). Toutes nos interactions vont se faire à travers le réseau, via un terminal. Il va y avoir pas mal de texte à taper. Mais en vrai, ça va être super simple (et c’est pour ça que l’on va passer par un terminal et pas par un clavier relié au Pi).

Gardez ce tutoriel ouvert à l’écran, sélectionnez et copiez les commandes à l’intérieur des balises « code », puis retournez sur la fenêtre de votre terminal et effectuez un clic droit. Votre texte sera alors collé. Donc, oui, ça ira vite.

Deux trois notions rapides qui vont revenir tout le temps :

Des commandes commencent par sudo, pourquoi ?
Linux est un système multi-utilisateur. Par défaut nous interviendrons sur le PI avec l’identité de l’utilisateur « pi ». Cet utilisateur n’est pas le patron du système (l’utilisateur root) et n’a donc pas l’autorisation de faire certaines choses : édition de fichiers systèmes, installation, etc). La commande sudo va nous permettre d’escalader cette limitation.

Edition des fichiers texte
N’en déplaise aux amoureux de vi, nous utiliserons un programme nommé nano qui propose à mon avis l’expérience la moins traumatisante possible pour éditer du texte en ligne de commande.

  • créer un fichier non existant ou en éditer un
    (sudo) nano /le/chemin/fichier (sudo si on a besoin d’être administrateur)

  • Enregistrer le fichier
    Control + O (la lettre, pas le chiffre), à ce moment il faudra confirmer le fichier cible en appuyant sur Enter

  • Refermer le fichier
    Control + X

Les commentaires
Dans les commandes entre balise de code, il y a des lignes qui commencent par un #.
Il s’agit de commentaires et n’ont pas besoin d’être écrits.

# Je suis un commentaire, pas besoin de m'écrire

Sauf pour les lignes commençant par

#!/bin/bash

Ces lignes en début de fichier script indiquent que ce qui vient après doit être interprété (par le programme bash, présent dans le répertoire /bin). Celles-là ne doivent surtout pas être oubliées.

Et surtout
D’un point de vue technique, ce tutorial doit être blindé d’approximations ou de choses pas tout à fait justes. Mes excuses à mes camarades linuxiens et autres administrateurs systèmes. Le but est d’arriver à quelque chose qui fonctionne, en expliquant un tout petit peu les mécaniques et ce que j’en comprends :wink:

Quel raspberry, 1, 2 ou 3 ?

Dans tous les cas, le 1080 passera sans soucis majeurs.
Pour le reste (les jeux par exemple) la version du PI va logiquement influencer les limites d’émulation.

Pi 1 - B+
1 coeur @ 700 mHz (se monte facilement à 800), 512 Mo de ram

  • Lecture vidéo : (presque) parfaite, privilégier le passthrough pour le son, notamment en 5.1
  • Interface kodi : asmathique
  • Limite haute des émulateurs : SNES, Sega MD, NeoGeo (bref la 2D)

Pi 2 (modèle B)
4 coeurs @ 900 mHz (se montent facilement à 1000), 1024 Mo de ram

  • Lecture vidéo : parfaite
  • Interface kodi : parfaite
  • Limite haute des émulateurs : PS1, quelques jeux N64 (il va falloir tester)

Pi 3 (modèle B)
4 coeurs @ 1200 mHz (ne s’overclocke pas), 1024 Mo de ram

  • Lecture vidéo : parfaite
  • Interface kodi : parfaite
  • Limite haute des émulateurs : pas mal de jeux N64 carrément jouables.

Quatre-vingt. Quand même.

Bon à savoir pour le Pi3 : la température peut monter assez férocement. En lançant un script de scrapping sur ma bibliothèque musicale, j’ai eu la surprise de voir un carré orange en haut à droite de mon écran. Le CPU dépassait les 80°. Au delà de 84°, le processeur passe en throttling : il va réduire sa fréquence de fonctionnement de manière de plus en plus agressive pour redescendre en dessous des 80°. Ce n’est pas forcément un problème : le SoC peut encaisser des pointes exceptionnelles à 100°, et atteindre 125° avant de se consummer. A titre de comparaison, que ce soit sur le Pi1 ou le Pi2, tous deux overclockés, j’ai rarement frolé la barre des 60°. On comprend mieux pourquoi on a retiré au Pi3 la possibilité de s’overclocker. Bref, ça reste une très bonne idée de coller des radiateurs sur un Pi3.

Friture 2.0 dans la tête

Dans tous les cas, au niveau du son, on a :

  • une sortie jack odieusement mauvaise
  • un son nickel en passant par le circuit hdmi
  • rien d’autre

Ce dernier point est à garder en tête en fonction de votre configuration audiovisuelle. Si vous souhaitez vous servir de votre Pi (aussi) en mode headless (donc sans écran) pour écouter du son, soit votre ampli est compatible hdmi et tout va bien, soit vous devez garder votre TV allumée, ce qui est un peu crétin. Dans mon cas j’ai fini par craquer pour cette carte audio qui me permet de ne plus être dépendant de la TV pour la gestion du son, que ce soit pour profiter du 5.1 (mon - super - ampli ne gèrant pas le hdmi), ou utiliser le Pi en mode headless quand je veux juste écouter de la musique.

Attention aux cartes son USB ! information non vérifiée, elles vont grignoter à priori un peu (quelques pourcents) des ressources cpu du Pi, ne sont pas forcément bien (ou pas du tout) supportées sous kodi en multi-canal, et rendre l’alimentation plus sensible (ça, c’est logique).

Installation du système

On va commencer par installer Raspbian, la déclinaison de Debian pour le Raspberry.
Il en existe deux version, la normale qui contient le système d’exploitation et l’environnement graphique et la lite qui ne contient que le strict nécessaire (donc pas d’environnement graphique). Pour cette installation, nous utiliserons la version lite.

Le téléchargement de l’image se fait directement sur le site de la fondation puis on va chercher le logiciel qui va nous servir à écrire l’image sur notre carte micro-SD (en jetant un coup d’oeil au mode d’emploi si c’est la première fois).

Pour les possesseurs d’une carte hifiberry, vous pouvez utiliser l’installeur fourni par leurs soins qui va installer la même Raspbian, mais pré-configurée pour l’utilisation de la carte son (et on prend toujours la version lite).

Une fois l’image téléchargée et écrite sur la carte SD, on fini de monter le PI dans son boitier. On insère très délicatement la carte SD dans le lecteur du Pi, on branche le réseau, au moins une manette XBox, le cable HDMI (relié à un écran ou un TV).

Puis on branche la prise USB d’alimentation (c’est ce qui va démarrer le Pi, il n’y a pas d’interrupeur).

Premier boot, mise(s) à jour et configuration(s)

réseau

Les dernières moutures de debian configurent par défaut le réseau en dhcp, et utilisent avahi pour se présenter sur le réseau local.
Ce qui à la base est une très bonne idée peut très vite tourner au cauchemar : suivant l’environnement réseau, l’implémentation Microsoft pas toujours standard du .local, des bugs incompréhensibles et chronophages peuvent décider de nous pourrir l’expérience.

On va donc commencer par éditer notre tout premier fichier et fixer l’adresse IP.

Connexion depuis son ordinateur
On cherche sur l’écran relié au Pi une ligne perdue dans les dernières notifications commençant par ‹ My IP Address is ›. Et on lance son terminal pour se connecter à cette adresse, sur le port ssh (22).

Identifiants par défaut : utilisateur : pi mot de passe : raspberry.

On ouvre le fichier (en super user) /etc/dhcpcd.conf

pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf

Et on ajoute les lignes suivantes à la fin du fichier :

interface eth0
static ip_address=192.168.0.11/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

Il faut evidemment adapter les valeurs à votre réseau :

  • static ip_address : l’adresse IP du Pi
  • static routers : l’adresse IP de la passerelle internet (en général la box)
  • static domain_name_servers : l’adresse IP du serveur de nom (en général la box)

On sauve Ctrl+O puis enter pour confirmer le fichier de destination, et on referme Ctrl+X.

On peut profiter de ce premier contact pour changer le mot de passe par défaut :

sudo passwd pi

(le sudo permet de forcer un mot de passe court)
On le rentre deux fois, en aveugle.

A partir de maintenant, à partir du prochain démarrage, on se connectera - logiquement - sur l’adresse IP définie plus haut.

paramétrage, initialisation

Par défaut, l’installation se réalise sur un tout petit morceau de partition, on va commencer par l’aggrandir pour utiliser l’espace disponible sur la carte en lançant l’outil de configuration du Raspberry.

sudo raspi-config

On se positionne sur la première ligne (Expand Filesystem) et on appuie sur la touche enter.
Le programme propose de redémarrer, on accepte. Puis on se reconnecte (donc sur l’adresse IP définie plus haut).

On commence par mettre à jour la liste des packages (les briques logicielles)

sudo apt-get update

Puis on met à jour tous les logiciels présents sur le Pi (c’est une commande interactive, il faut appuyer sur y pour confirmer que l’on souhaite continuer). Cette étape peut prendre un certain temps.

sudo apt-get dist-upgrade

Puis on regarde si une mise à jour du firmware est disponible (et si oui, on l’installe, il faudra donc encore appuyer sur la touche y)

sudo rpi-update

Une fois les mises à jour effectuées, on peut redémarrer.

sudo reboot

Pour préparer la suite, on relance l’outil de configuration

sudo raspi-config

On va d’abord en profiter pour configurer les locales avec le Internationalisation Options (fuseau horaire et frappe clavier).

Le plus important à ne pas oublier, car on va profiter de cette mécanique :
(3) Boot Options, on sélectionne l’option B2 Console Autologin. Cela va nous permettre de faire un login automatique de l’utilisateur par défaut lors du démarrage du Pi.

On va maintenant faire connaissance avec le fichier le plus sensible du Pi : le fichier de configuration.

sudo nano /boot/config.txt

La description de toutes les options possibles du fichier config.txt se trouve sur la page officielle du site raspberry.

Dans mon cas précis j’utilise cette configuration

# on désactive l'overscan
disable_overscan=1

# on se rajoute une marge tournante
overscan_left=16
overscan_right=16
overscan_top=16
overscan_bottom=16

# je suis sur un écran HD Ready, je force la résolution en 1280x720
framebuffer_width=1280
framebuffer_height=720

# j'affecte 256 Mb pour la video, et donc le reste, soit 768 Mb pour le système
gpu_mem=256

# !! UNIQUEMENT sur le PI 2, un petit peu d'overclock !!
arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=2

On sauve Ctrl+O puis enter pour confirmer le fichier de destination, et on referme Ctrl+X.
Et on redémarre pour vérifier que tout va bien (en gros qu’il n’y ait pas de notifications en rouge pendant le démarrage).

Si vous êtes arrivés jusque là, bravo ! votre Pi est maintenant configuré et à jour. Par contre, il ne fait pas encore grand chose.

Installation des logiciels

Maintenant que l’on a fait connaissance avec son Pi, on va pouvoir commencer à installer des logiciels.

Gestion des manettes

On va utiliser un petit programme (un driver) qui s’appelle xboxdrv. Derrière ce nom pas si barbare se cache un utilitaire capable de comprendre que l’on appuie frénétiquement sur le bouton d’une manette et transformer cette information en signal utilisable par un émulateur ou par un media-center. Comme son nom ne l’indique pas, il sait communiquer avec pratiquement tous les modèles du marché (Playstation, Saitek, xbox…). Il sait, si besoin, récupérer une information analogique (exemple le joystick) et la transformer en information plus simple (directionnelle). Ou bien transformer une pression de bouton en frappe clavier. Pour cette première installation, on va partir du principe que vous utilisez une manette XBOX 360 filaire (pour les autres manettes, j’ajouterai des tutos complémentaires au fil de l’eau).

Pour les curieux, la liste - impressionante - de ce qu’il est possible de faire avec xboxdrv.

On l’installe :

sudo apt-get install xboxdrv

On installe aussi l’utilitaire joystick, qui nous servira éventuellement à débugger les pads et joysticks (surtout si l’on n’utilise pas de manette xBox)

sudo apt-get install joystick

Kodi

Historiquement présent sous le doux nom d’XBMC depuis plus de 10 ans, Kodi est l’illustration du logiciel libre par excellence. Il faut comprendre : développement chaotique partant dans tous les sens, avec son lot de drama, mais aussi une structure ouverte permettant
d’enrichir ad nauseam les fonctionnalités proposées via des extensions officielles ou officieuses. A noter que l’excellent plex, projet initié par le développeur en charge du portage mac, est aujourd’hui un produit indépendant, abouti et payant.

Disponible en version 16.1 avec pour nom de code Jarvis, kodi est pleinement utilisable, et peut même devenir agréable une fois que l’on aura pris le temps de le configurer. Il se positionne de toute façon à des années-lumières de ce que proposent les box internet.

Hop, on l’installe :

sudo apt-get install kodi

Et surprise ! On est toujours en version 15.2 sur le dépôt officiel raspbian…
Dans 95% des cas, ça n’est pas grave. On peut laisser l’installation en l’état. Si, par contre, vous êtes l’heureux possesseur d’une carte son type HifiBerry, elle sera uniquement reconnue comme étant une carte stéréo, donc dépourvue de son surround. Dans ce cas précis, on va chercher une version plus à jour sur un dépôt alternatif.

#on va éditer le fichier qui liste les sources de packages
sudo nano /etc/apt/sources.list

#on ajoute la ligne suivante à la fin du fichier
deb http://pipplware.pplware.pt/pipplware/dists/jessie/main/binary /
#on sauve, on referme (ctrl+O, enter, Ctrl+X)

#on enregistre la signature du dépot ajouté pour dire que l'on lui fait confiance
wget -O - http://pipplware.pplware.pt/pipplware/key.asc | sudo apt-key add -

#puis, on remet à jour la liste des dépots et on update tout
#le signe && permet d'exécuter plusieurs instructions les unes derrière les autres
sudo apt-get update && sudo apt-get dist-upgrade

Retropie

Retropie est un projet initié par petrockblock, un garçon allemand un peu fou de rétrogaming et de bricolage. Le résultat est une compilation des meilleurs émulateurs disponibles, d’un front digne de ce nom (emulationstation) et d’une configuration simplifiée et centralisée (libretro). On parle maintenant d’une cinquantaine d’émulateurs et de ports disponibles couvrant à peu près vingt ans de l’histoire vidéoludique. Le tout est maintenu sur la durée, les night-builds s’enchainant plus que régulièrement.

Normalement, la ligne de commande doit vous faire maintenant (un peu) moins peur.
On continue donc sur la lancée !

#On installe les outils git
sudo apt-get install git

#on revient dans notre maison
cd

#on télécharge la dernière version du script d'install Retropie
git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git

#on se déplace dans le dossier d'installation
cd RetroPie-Setup

#et on lance l'installeur (ça va commencer par recharger des trucs, c'est normal)
sudo ./retropie_setup.sh

Les choses sérieuses vont pouvoir commencer.

Vous prendrez, à priori, la première option, qui consiste à télécharger des programmes déjà compilés (des binaires). Ils ne sont pas forcément à jour, mais ils ont rarement plus d’une semaine. Si malgré tout vous êtes joueur, vous pouvez choisir la deuxième option : en gros, vous allez télécharger les sources de chaque émulateur, les compiler vous-même pour en faire de jolis programmes exécutables. En vrai, tout est automatisé et ne demande aucune intervention de votre part. Vous serez par contre récompensé par le fait d’avoir les toutes dernières versions de chaque émulateur. Pour information, la compilation de tous les émulateurs m’a pris 28 heures sur un Pi1 B+, 18 heures sur un Pi2 et une dizaine d’heures sur un Pi3.

Choisissez les émulateurs que vous souhaitez (tous, on est d’accord ?) et lancez l’installation ou la compilation.

Une fois les émulateurs installés, on va commencer à personnaliser tout ça.
On lance le menu setup, et on va s’intéresser à trois choses principales.

Audio Settings
Un petit tour pour vérifier que la bonne sortie son est utilisée (donc, dans 95% des cas, HDMI). Si vous utilisez une carte son, choisissez « Auto ».

Bash Welcome Tweak
Celui-là ne sert à rien, il est seulement indispensable.

Install Themes
L’embarras du choix, avec plus ou moins de bon goût. Attention, certains thèmes vont très mal se comporter si plus d’une dizaine d’émulateurs sont actifs. Mon préféré : le « simple ».

##On articule maintenant le tout##

Les logiciels sont maintenant installés. Si on devait s’en servir en l’état, on serait scotché à une ligne de commande, certe moins intimidante qu’au début de ce tutorial, mais absolument incompatible avec ce que devrait être une entertainment box.

Synopsis

Nous allons écrire quelques scripts qui vont permettre d’automatiser les fonctions principales :

  • lancement automatique de EmulationStation ou de Kodi au démarrage
  • switch de Kodi vers Emulationstation
  • switch de Emulationstation vers Kodi
  • redémarrage d’urgence

Problématiques du switch :

  • Une manette ne doit pas se comporter de la même manière en fonction de ce que l’on fait
  • Kodi et Emulationstation on tendance à utiliser les ressources matérielles du Pi de manière préemptoire
    • RAM
    • Accélération 2D / 3D
    • Couche son
  • Régulièrement, ils ne quittent pas « proprement » (comprendre : ils oublient de libérer la RAM et les ressources)
  • Si on les quitte de manière autoritaire, on peut de plus corrompre leurs réglages.

C’est pourquoi, soit des distributions proposent un multiboot, soit l’utilisateur va multiplier ses cartes.
Et passer de l’un à l’autre prend une petite minute en cas de multiboot, et plus en cas de cartes différentes.

Problématique supplémentaire : un émulateur, une lecture vidéo peuvent simplement planter. Dans ce cas, soit on redémarre pysiquement le Pi (en le débranchant / rebranchant), soit on s’y connecte en SSH et on force le reboot.
On s’éloigne à nouveau d’une utilisation légère.

On va donc automatiser tout ça en contournant les problèmes. Les actions de switch et de reboot d’urgence vont être confiées à des combinaisons de touches sur la manette (ces actions ne seront plus sous la responsabilité de logiciels pouvant planter), et pour chaque switch, nous redémarrerons la session principale après avoir écrit dans un petit fichier ce que l’on souhaite lancer.

C’est ici qu’intervient xboxdrv installé plus haut. Il va configurer à la volée le mode de fonctionnement (jeu ou média), mais il va surtout permettre de déclencher des scripts, associés à des raccourcis, permettant de garder la main en toute occasion, y compris pendant un plantage.

Prendre en main la manette

Primo, on va désactiver le module xpad, afin qu’il ne rentre pas en conflit avec xboxdrvr.

#si il est chargé, on le désactive
sudo rmmod xpad

#on va le désactiver pour les prochains démarrages,
#on édite le fichiers de liste noire des modules
sudo nano /etc/modprobe.d/fbdev-blacklist.conf

#on ajoute à la fin ceci
blacklist xpad
#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Ensuite, on va se créer un répertoire dans notre maison, où nous allons poser nos scripts et réglages.

cd
mkdir scripts

les réglages de la manette pour Emulationstation

nano /home/pi/scripts/emupad.ini

#puis on colle le contenu

[ui-buttonmap]
Guide+white = exec:/home/pi/scripts/reboot.sh
Guide+black = exec:/home/pi/scripts/switchEmu2Kd.sh

[xboxdrv]
trigger-as-button=true

[ui-buttonmap]
A=JS_0
B=JS_1
X=JS_2
Y=JS_3
WHITE=JS_4
BLACK=JS_5
SELECT=JS_6
START=JS_7
Guide = KEY_LEFTCTRL
TL=JS_9
TR=JS_10
LT=JS_11
RT=JS_12

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Explications

La section [ui-buttonmap] va nous permettre de lancer nos fameux scripts.

  • Guide : le bouton central de la manette xbox (le logo xbox)
  • white : le boutton LB (exterieur gauche haut)
  • black : le boutton RB (extérieur droite haut)

Nous pouvons appeler deux scripts :

  • un pour redémarrer
  • un pour passer sur Kodi

Le trigger-as-button de la section [xboxdrv] nous permet d’utiliser les deux gachettes en mode on/off (et non pas analogique).

La section [ui-buttonmap] nous permet de fixer l’affectation des boutons, ce qui nous évitera des arrachages de cheveux plus tard.

Nous passons maintenant aux réglages de la manette pour Kodi, cette fois-ci, nous allons configurer la manette de sorte qu’elle se comporte comme un clavier.

nano /home/pi/scripts/kdpad.ini

#puis on colle le contenu

[xboxdrv]
extra-devices = false
extra-events = false
device-name = "Microsoft Xbox 360 Controller"

[ui-buttonmap]
Guide+white = exec:/home/pi/scripts/reboot.sh
Guide+black = exec:/home/pi/scripts/switchKd2Emu.sh
Guide = KEY_W
A = KEY_ENTER
B = KEY_BACKSPACE
X = KEY_X
Y = KEY_ESC
start = KEY_SPACE
back = KEY_L
white = KEY_C
black = KEY_I
TL = BTN_RIGHT # Left stick buttons
TR = BTN_LEFT # Right stick buttons
RT = KEY_EQUAL
LT = KEY_KPMINUS    
du = KEY_UP
dd = KEY_DOWN
dl = KEY_LEFT
dr = KEY_RIGHT

[ui-axismap]
x1=KEY_LEFT:KEY_RIGHT
y1=KEY_UP:KEY_DOWN
x2=REL_X:10
y2=REL_Y:10
LT^resp:127:255=ABS_Z
RT^resp:127:255=ABS_RZ

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Les scripts d’articulation

Le fichier que l’on va lire au démarrage pour savoir quoi lancer

touch /home/pi/scripts/boot
echo "kodi" > /home/pi/scripts/boot

ici, exceptionnellement, nous ne nous sommes pas servis de nano. Nous avons crée un fichier vide (la commande touch) puis nous avons redirigé la chaine de caractères « kodi » dans ce fichier.

Le script de lancement de l’émulateur

nano /home/pi/scripts/startEmu.sh

Attention, aucun espace avant #!/bin/bash, sinon ça ne marchera pas

#!/bin/bash
if [ "`tty`" = "/dev/tty1" ]
	then	
		if (sudo ps axf | grep emulationstation | grep -v grep > /dev/null 2>&1)
		then
			echo "Emulationstation est déjà lancé."
		else
			sudo xboxdrv --config /home/pi/scripts/emupad.ini -D --detach --detach-kernel-driver --id 0 --deadzone 4000 --dbus disabled --next-controller -i 1 --deadzone 4000 --dbus disabled
			sleep 4
			sudo -u pi emulationstation
		fi
	else 
		echo "TTY1 seulement !"
fi

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Le script de lancement de kodi

nano /home/pi/scripts/startKd.sh

Attention, aucun espace avant #!/bin/bash, sinon ça ne marchera pas

#!/bin/bash
if [ "`tty`" = "/dev/tty1" ]
	then
		if (sudo ps axf | grep kodi | grep -v grep > /dev/null 2>&1)
		then
			echo "Kodi est déjà lancé."
		else
			rm /home/pi/kodi*.log
			sudo xboxdrv --config /home/pi/scripts/kdpad.ini -D --detach --detach-kernel-driver --id 0 --deadzone 5000 --silent --autofire RT=25 --autofire du=50 --autofire dd=50 --autofire dl=50 --autofire dr=50 --autofire LT=25 --dbus disabled --next-controller --id 1
			sleep 4
			sudo -u pi kodi
		fi
	else 
		echo "TTY1 seulement !"
fi

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Ces deux scripts fonctionnent de la même manière, on vérifie que l’on est sur le terminal principal (TTY1), que l’application cible ne tourne pas déjà, on initialise la manette, et on lance le programme qui nous intéresse.

Au tour des scripts de switch d’application. Pour être sur d’arriver dans un environnement propre, le plus simple que j’ai trouvé est de mettre à jour le petit fichier boot, « quitter » la session TTY1, puis la relancer. Quelques secondes suffisent et nous épargnent un reboot ou pire, un changement de carte.

emulationstation vers kodi

nano /home/pi/scripts/switchEmu2Kd.sh

Attention, aucun espace avant #!/bin/bash, sinon ça ne marchera pas

#!/bin/bash
sudo killall -15 emulationstation > /dev/null 2>&1
echo "Stoping EmulationStation"

runningEmu=true
while ($runningEmu)
do
	if (sudo ps axf | grep emulationstation | grep -v grep > /dev/null 2>&1)
	then
		echo -n .
		sleep 1
	else
		runningEmu=false
	fi
done
echo " "
echo "EmulationStation | fini !"


sudo killall -15 xboxdrv > /dev/null 2>&1
echo "Stoping xboxdrv"
runningXbox=true
while ($runningXbox)
do
	if (sudo ps axf | grep xboxdrv | grep -v grep > /dev/null 2>&1)
	then
		echo -n .
		sleep 1
	else
		runningXbox=false
	fi
done
echo "xboxdrv | fini !"

touch /home/pi/scripts/boot
echo "kodi" > /home/pi/scripts/boot

sudo systemctl stop getty@tty1.service && sudo init 5

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

kodi vers emulationstation

nano /home/pi/scripts/switchKd2Emu.sh

Attention, aucun espace avant #!/bin/bash, sinon ça ne marchera pas

#!/bin/bash
#on quitte kodi en lui envoyant un signal via son interface de commande à distance
#qui doit avoir été activée dans les réglages de kodi
curl -s --data-binary '{"jsonrpc": "2.0", "method": "Application.Quit", "id":1}' -H 'content-type: application/json;' http://127.0.0.1:8080/jsonrpc > /dev/null

#si cette option n'est pas activée, on envoie un signal de terminaison classique
#et on commente les lignes du dessus

#sudo killall -15 kodi > /dev/null 2>&1

echo "Stoping Kodi"

runningKodi=true
while ($runningKodi)
do
	if (sudo ps axf | grep kodi | grep -v grep > /dev/null 2>&1)
	then
		echo -n .
		sleep 1
	else
		runningKodi=false
	fi
done
echo ""
echo "Kodi | fini !"

sudo killall -15 xboxdrv > /dev/null 2>&1
echo "Stoping xboxdrv"
runningXbox=true
while ($runningXbox)
do
	if (sudo ps axf | grep xboxdrv | grep -v grep > /dev/null 2>&1)
	then
		echo -n .
		sleep 1
	else
		runningXbox=false
	fi
done
echo "xboxdrv | fini !"

touch /home/pi/scripts/boot
echo "emu" > /home/pi/scripts/boot

sudo systemctl stop getty@tty1.service && sudo init 5

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Attention, il y a une subtilité sur la manière d’arrêter kodi (haut du script). La solution recommandée est d’utiliser l’interface de commande à distance de kodi, elle permet de faire un exit propre (au risque de me répéter, kodi peut être capricieux pour quitter).

Le script de démarrage

nano /home/pi/scripts/chooseApp.sh

Attention, aucun espace avant #!/bin/bash, sinon ça ne marchera pas

#!/bin/bash
read APP < /home/pi/scripts/boot


case $APP in
  "kodi")
    sudo -u pi /home/pi/scripts/startKd.sh;;
  "emu")
    sudo -u pi /home/pi/scripts/startEmu.sh;;
esac

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

On va rendre tous les scripts « éxécutables » d’un coup :

cd
cd scripts/
chmod +x *.sh

Puis, dernière étape, on va demander l’éxécution de chooseApp.sh à chaque login (que ce soit au premier démarrage, ou à la reconnexion).

nano  /home/pi/.bashrc

#on ajoute tout à la fin
. /home/pi/scripts/chooseApp.sh

#on sauve, on referme (ctrl+O, enter, Ctrl+X)

Configuration de la manette

Maintenant, peu importe que l’on soit sur Kodi ou en train de jouer, on a tout le temps accès (y compris pendant la majorité des plantages) à deux fonctions indispensables : redémarrer et switcher d’une application à l’autre.

Sur Kodi, la configuration va se comporter de cette manière :

Tout est installé, encore une chose à faire

Maintenant, l’épreuve du feu.
On redémarre.

sudo reboot

Si tout se passe bien, kodi doit s’être lancé (sinon, on regarde les messages d’erreur, et on vérifie).

On va faire pour l’instant un seul réglage dans kodi, l’activation des services de contrôle à distance.
Ce point est impératif pour pouvoir switcher vers l’émulateur

  • Settings > Network > UPnP /DLNA > Allow remote control via UPnP
  • Settings > Network > Webserver > Allow remote control via http
  • Settings > Network > Remote Control > Allow remote control by programs on this system
  • Settings > Network > Remote Control > Allow remote control by programs on other systems

Maintenant, vous allez pouvoir controller Kodi de toutes les manières possibles : via un mini serveur web, via les applications iOs / Android, et surtout via le script que l’on a écrit plus haut. Nous y reviendront en détail.

Deuxième épreuve du feu.
On lance la combinaison de touches sur la manette pour switcher (donc bouton central + bouton haut droit).

Kodi va mettre quelques instants à quitter, vous allez voir la session se fermer et se réouvrir pour lancer Emulationstation. Si ça marche, bravo ! la première partie est finie. On se retrouve directement au post suivant pour la suite.

Si des choses ne marchent pas comme prévu, regardez les messages d’erreur, ou n’hésitez pas à poster ici

35 « J'aime »

Gros travail. Bravo @bdfck ! Ca mérite certainement un peu d’exposition en homepage.

[edit] ah ben c’est fait, j’avais pas vu…[/edit]

1 « J'aime »

Super taf @bdfck !! :))
Vraiment bravo. Pour le reste, j’ai switché l’utilisation de mon RPi pour des choses mais pour avoir tourné quelques temps avec Retropie, je trouve simplement que tu n’as pas besoin d’être aussi restrictif sur le type de manette XBox :stuck_out_tongue: Tu parles de xboxdrv et la version sans fil (360 pour PC) se plug vraiment tout aussi facilement.
J’attends de lire la suite ^^

1 « J'aime »

Niiiice :yum:

Pour les plus téméraires la même chose est possible avec un Raspberry Pi Zero, du moins jusqu’à l’émulation Neo Geo. Cfr le mod de Gameboy qui circule partout. Les stocks de Zero devraient commencer à se remplir puisque la production a repris en plus grande quantité. Quand j’aurai terminé mon dac je me lance :smiley:

1 « J'aime »

Super article, j’attends la suite pour voir si je m’achète un 3 :slight_smile:
Petit détail : le lien vers la news au tout début de l’article n’est pas correct

1 « J'aime »

Super tuto,
pour un kodi pur, j’aurai tendance à privilégier un openelec mais ça ferme la porte pour l’émulation.
Sinon pour ceux qui veulent utiliser un pi comme lecteur mais ne pas perdre l’avantage de plex, plexbmc ou Plex kodi connect c’est que de l’amour.
Avantage: synchro de plusieurs lecteurs (je commence mon épisode sur mon ipad que je continue sur mon pc à la seconde précise automatiquement et que je finit sur mon pi, et l’épisode est marqué lu )
et ca fait un petit lecteur pas cher sous la TV avec une meilleure interface pour la gestion des sous titres par exemple

1 « J'aime »

Excellent job @bdfck !

En ce qui me concerne, j’ai 2 Pi à la maison: un Model B+ pour bricoler avec Raspbian classique dessus et un Pi2 que j’utilise comme media center avec openelec, qui est très très bien fini et ficelé pour cet usage !

1 « J'aime »

Ca me fait penser tiens les gens : Plex crève toujours autant dès qu’on lui colle des ST extérieurs ? C’est juste infernal mais comme je ne m’en sers plus autrement qu’en version Web, où la gestion des ST est différente (Infuse le démonte à mon goût comme lecteur sur l’Apple TV et l’iPad).

sur plex j’ai installé sub-zero qui fait bien le taf. sinon j’ai entendu parlé de HDBits Subtitles que j’essaierai si jamais sub-zero ne convient plus.

1 « J'aime »

Grosso modo, si on considère qu’on a déjà le PC, ça se chiffre à combien pour l’ensemble du matériel requis?

Ça donne super envie, je viens de voir sur amazon des kit de démarrage avec carte mémoire alimentation etc comme ici,
ça vaut le coup ou il veut mieux tout acheter séparément ?

1 « J'aime »

Cool, ça répond à ma question :slight_smile:

perso au boulot je les achètes ici:


ou http://www.kubii.fr/idees-cadeaux/1645-kit-media-center-raspberry-pi2-3272496004429.html

sinon si pas pressé, faut aller voir du coté de ali express pour tirer le prix au plus bas

1 « J'aime »

En l’occurence c’est un Pi 2 avec une carte 8Go, mais si tu en trouves un semblable avec un pi3 (sauf si tu veux vraiment un 2) et une bonne 32go ça devrait être bon.

Tu sais quel est le type de carte µsd fournie?

c’est une transcend 16go classe 10 rebrandé element14.com (avec raspbian et recovery pré installé)

Super intéressé depuis la v1 je n’ai jamais pris le temps de m’y mettre, pourtant on m’a même prêté un v2. Voir un joli tuto tout intégré comme celui-là va ma faire franchir le pas. Super bravo et merci !

J’avais acheté mon premier Pi chez ModMyPi, ils ont un starter kit qui revient à 65€ avec frais de ports qui est complet.

C’est pareil, ça m’a toujours attiré mais sans jamais osé franchir le pas du fait de l’impression de jungle pour configurer la bête. Mais là tout est livré sur un plateau d’argent. Geekzone, j’te kiffe :heart:

2 « J'aime »

OK mais ça n’était pas ma question :stuck_out_tongue:
Je ne parlais pas d’un plug-in pour d/l les ST mais du fait que Plex meurt et rame dès que tu lui colles des ST : cette « andouille » inclus les st dans le stream en forçant le transcodage.
Sur la version Web, c’est nickel : ils utilisent un moteur HTML 5 qui fait ce qu’on attend plus classiquement à savoir superposer les ST à l’image.