dimanche 28 juillet 2013

Une borne d'arcade avec un Raspberry Pi - Partie 3 : configurer le Raspberry Pi.

Comme promis, on continue avec un tutoriel pour configurer un Raspberry Pi afin de pouvoir s'en servir comme station d'émulation.
À noter que cette partie peut vous être utile si vous voulez juste acheter un Raspberry Pi pour faire tourner des émulateurs dessus (et y jouer au clavier ou avec une manette standard), sans forcément bricoler un stick d'arcade.

Si vous ne savez pas de quoi on parle, allez jeter un œil à la partie 1.

Plan :
5) Configuration pratique (scripts de lancement rapide, alias et démarrage sans mot de passe).

Remarque : Il existe différents projets (par exemple Chameleon et RetroPie) qui ont pour objectif de faire une pseudo-distribution de Linux pour le Raspberry Pi entièrement dédiée à l'émulation. Ces projets vous proposent en général de télécharger des images de carte SD que vous aurez juste à installer sur une carte vierge et qui devraient fonctionner "clefs en main" (si vous ne savez pas comment installer une image de carte SD sur une carte vierge, rendez-vous au premier paragraphe). Ce n'est pas mon objectif ici, j'explique simplement comment faire fonctionner et configurer des émulateurs sur une distribution Linux standard du Raspberry Pi.

Installer et configurer une distribution Linux sur le Raspberry Pi


Tout d'abord, petite précision au cas où vous ne comprendriez pas ce que vient faire Linux là-dedans : le Raspberry Pi ne peut fonctionner que sous Linux (c'est en partie ce qui explique son coût très faible : il n'y pas d'OS à acheter).
Il existe plusieurs distributions dont les principales sont listées sur le site officiel : distributions Linux pour le Raspberry Pi (vous trouverez également des liens pour les télécharger sur cette même page).
Si vous n'y connaissez rien et ne savez pas quoi prendre, faites comme moi et prenez celle recommandée pour les débutants, à savoir la distribution Raspbian "wheezy".

Pour installer une distribution sur la carte SD, vous allez avoir besoin d'un ordinateur avec un lecteur de carte SD et d'un petit utilitaire : Win32DiskImager (je suppose ici que l'ordinateur que vous allez utiliser est sous Windows, mais si vous êtes sous Mac ou Linux il existe bien évidemment des solutions similaires).

L'installation est très facile, il suffit de :
- télécharger l'image de la distribution souhaitée (par exemple "wheezy-raspbian.img").
- insérer la carte SD dans le lecteur de carte SD de votre ordinateur.
- lancer le logiciel Win32DiskImager (après l'avoir téléchargé et dézippé).
- sélectionner l'image de carte SD "Image File" et l'emplacement "Device" où vous souhaitez l'écrire (en l’occurrence le lecteur qui correspond à votre lecteur de carte SD).
- cliquer sur "Write".
- attendre le message qui confirme que l'image a bien été inscrite sur la carte.

Voilà, votre carte SD est prête à être insérée dans votre Raspberry Pi qui démarrera maintenant sous Raspbian Wheezy.
Par défaut le nom d'utilisateur est "pi" et le mot de passe associé est "raspberry".

Pour la configuration initiale du Raspberry Pi sous Raspbian, il est vivement recommandé (voire quasi obligatoire) d'y brancher un clavier et une souris.

Lors du premier démarrage, vous aurez accès à un écran de configuration où vous pourrez choisir plusieurs choses pratiques.

L'écran de configuration propose différentes options.


NB : si vous voulez revenir à cet écran plus tard, il vous suffira de taper la commande suivante dans un terminal ("console") pour y revenir :
sudo raspi-config

Dans cet écran de configuration vous pouvez déjà :
- dire au Raspberry Pi d'utiliser tout l'espace que votre carte SD : "Expand Filesystem" (faites le dès maintenant !).
- changer votre mot de passe : "Change User Password" (ce n'est pas nécessaire, de toute façon on configurera plus tard le Raspberry Pi pour qu'il démarre sans avoir besoin d'entrer de mot de passe).
- choisir si votre Raspberry Pi doit démarrer sur un terminal (mode console où vous n'utiliserez que le clavier) ou sur un bureau "classique" avec une interface graphique (où vous utiliserez plus la souris) : "Enable Boot to Desktop" (à terme il sera préférable d'avoir un démarrage en mode console qui consomme moins de ressources, mais pour les réglages il peut être agréable de démarrer sur le bureau, sélectionnez "yes" si vous souhaitez que ça soit le cas).
- choisir la langue utilisée : "Internationalisation Options" (aide détaillée dans le paragraphe suivant).
- overclocker le Raspberry Pi pour qu'il soit plus puissant : "Overclock" (aide détaillée dans le paragraphe d'après).
- régler d'autres détails : "Advanced Options" en particulier gérer la répartition de la mémoire RAM entre le processeur (CPU) et le processeur graphique (GPU) "Memory Split" (il est recommandé d'allouer au moins 64 ou 128 Mo au GPU si vous comptez faire tourner des émulateurs, personnellement j'ai alloué 128 Mo).

Le menu et les choix proposés sont pour la plupart assez clairs, aussi je ne détaillerai pas tout.
Les seules choses qui ne sont pas très intuitives sont les réglages des options de langue :
Pour mettre le Raspberry Pi en français (ce qui devrait normalement mettre le clavier en AZERTY) il faut :
- aller dans "Internationalisation Options"
- sélectionner "Change Locale"
- attendre un peu que la liste des langues disponibles soit générée
- dans la (très longue) liste déroulante aller sur "fr_FR.UTF8 UTF8" et appuyer sur la touche "espace" pour la sélectionner
- valider avec la touche "entrée"
- dans la liste proposée, choisir "fr_FR.UTF8" et valider à nouveau avec "entrée"
- attendre que la configuration se fasse.
Pour utiliser un clavier spécifique il faut :
- aller dans "Internationalisation Options"
- sélectionner "Change Keyboard Layout"
- attendre la génération de la liste des configuration disponibles
- sélectionner votre clavier dans la liste proposée (ou ce qui s'en rapproche le plus).

Concernant l'overclocking, tout dépend des jeux que vous voudrez faire tourner, pour des jeux un peu "gourmands", comme Metal Slug par exemple, il sera nécessaire d'overclocker le Raspberry Pi si vous voulez espérer jouer sans trop de latence, mais cela veut aussi dire qu'il chauffera davantage (et donc s'usera plus vite).
Par défaut le Raspberry Pi propose 5 sets de pré-réglages allant de "None" (aucun overclocking) jusqu'à "Turbo" (qui transformera sans doute votre machine en plaque de cuisson).
Pour une utilisation standard je recommande de prendre le pré-réglage "Modest" (800 MHz ARM, 250 MHz core, 400 Hz SDRAM, 0 overvolt) qui ne devrait pas trop chauffer.
Pour des jeux un peu plus gourmands, le pré-réglage "Medium" (900 MHz ARM, 250 MHz core, 450 Hz SDRAM, 2 overvolt) devrait être suffisant (c'est celui que j'ai choisi).
À noter que tant que l'overclocking reste en dessous de 1000 MHz, normalement cela n'annule pas la garantie que vous avez sur l'appareil.

Une fois la configuration terminée, sélectionnez "Finish" avec les flèches du clavier, et vous arriverez sur le bureau.

Le bureau propose des icônes et des raccourcis accessibles à la souris.

Si vous n'y connaissez rien de rien à Linux


Voici quelques informations (mais il existe déjà des tonnes de documentations officielles des différentes distributions et de tutoriels très bien faits que vous pouvez trouver facilement sur internet et qui seront mille fois plus complet que ce que je vais mettre ici).

Sur Linux, vous pouvez faire toutes les actions dans un terminal en ligne de commande.
Pour lancer un terminal depuis le bureau, cliquez simplement sur l'icône associée :

Vous pouvez lancer un terminal en cliquant dessus.

Pour lancer l'interface graphique avec le bureau depuis le mode terminal (si vous avez désactivé l'interface graphique au démarrage par exemple) tapez la commande :
startx
et validez avec la touche "entrée".

Voici une liste (non-exhaustive) des commandes usuelles dont vous pourrez avoir besoin :
- ls : permet d'afficher la liste des fichiers et dossiers dans le répertoire où vous vous trouvez.
- ls -a : idem, mais affiche également les fichiers cachés.
- cd : permet de changer de dossier, tapez cd suivi d'un espace et du nom du dossier dans lequel vous souhaitez vous rendre (la touche "tabulation" vous permet de compléter automatiquement le nom du dossier si vous avez tapé les premières lettres), pour revenir au dossier précédent tapez cd ..
- mv : permet de déplacer un fichier d'un endroit à un autre, tapez mv suivi d'un espace et du nom du fichier à déplacer puis d'un autre espace et du nouvel emplacement où vous souhaitez le mettre
- rm : permet d'effacer un fichier, tapez rm suivi d'un espace et du nom du fichier à effacer.
- mkdir : permet de créer un dossier vide, tapez mkdir suivi d'un espace et du nom du dossier à créer.
- rmdir : permet d'effacer un dossier vide, tapez rmdir suivi d'un espace et du nom du dossier à effacer.
- nano : permet d'ouvrir un fichier avec l'éditeur de texte nano (ce qui vous permettra de voir et de modifier son contenu), tapez nano et le nom du fichier à ouvrir.
- apt-cache search : permet de chercher un mot clef dans la liste des logiciels "connus" de la distribution (ceux que vous pourrez installer très facilement si vous êtes connecté à internet). Par exemple pour chercher un émulateur tapez apt-cache search emulator.
- sudo apt-get install : permet d'installer un logiciel depuis les sources connues de la distribution. Par exemple pour installer le jeu moon-lander tapez sudo apt-get install moon-lander.
- man : affiche le manuel d'une commande ou d'un programme, tapez man suivi du nom de ce dont vous voulez voir le manuel. Par exemple, pour accéder au manuel de la commande ls tapez man ls.

Pour le reste, je détaillerai au fur et à mesure ce dont on aura besoin au moment où on en aura besoin.

Les problèmes que vous risquez de rencontrer


Voici une liste non-exhaustive des problèmes que vous pouvez rencontrer, et comment les résoudre :
  • Tout mon écran n'est pas utilisé il reste des bandes noires sur le tour : dans le menu de configuration, allez dans "Advanced Options" et changez le paramètre "Overscan".
  • Je n'ai pas de son : premier réflexe à avoir, branchez des écouteurs sur la prise jack pour voir si vous avez du son de cette façon. Si c'est le cas pour certains écrans, le Raspberry Pi croit qu'il est connecté en DVI au lieu du HDMI (et donc il n'y a pas de son, puisque le DVI ne transmet que l'image), il faut donc le forcer à se comporter comme s'il était branché en HDMI. Pour cela, ouvrez le fichier config.txt qui se trouve dans le dossier /boot/, par exemple en tapant sudo nano /boot/config.txt et décommentez la ligne sur laquelle il est marqué "hdmi_drive=2" (supprimez le # qui se trouve devant). Quittez en pressant "contrôle + X" et répondez Oui lorsqu'on vous demande si vous voulez sauvegarder les changements effectués. Cela devrait résoudre le problème. 

Installer des émulateurs


Il existe différents émulateurs pour Linux, dont certains sont spécialement conçus pour le Raspberry Pi. Malheureusement, peu sont disponibles avec la commande apt-get dont je parle plus haut, et certains peuvent être compliqués à installer.

J'ai choisi d'installer mame4all pour les jeux d'arcade (basé sur MAME 0.37b5) et PiSnes pour les jeux Super Nintendo (basé sur Snes9x 1.39). Ils ont l'intérêt d'être très faciles à installer et rapides à configurer.

Pour installer mame4all, le plus simple est de vous rendre sur le Pi Store via l'icône du bureau (vous devez être connecté à  internet, pour cela le plus simple est de connecter le Raspberry Pi à votre box internet à l'aide d'un câble Ethernet) :

Vous pouvez lancer le Pi Store en cliquant dessus.

Il vous suffit alors de vous créer un compte, de taper "mame" dans la barre de recherche, et de sélectionner "mame4all" pour l'installer.

Pour installer PiSnes, il vous suffit de vous rendre sur la page officielle du projet : PiSnes
De cliquer sur l'onglet "Downloads" (en haut à gauche), de télécharger le dossier .zip, de le dézipper et de le mettre où vous voulez dans les dossiers de votre Raspberry Pi. (Personnellement, je l'ai mis dans "/home/pi/" dans un sous-dossier "PiSnes").

Cette étape peut être faite sur votre ordinateur usuel, et dans ce cas il vous suffit de le transférer sur votre Raspberry Pi via une clef USB, mais vous pouvez également le faire directement depuis le Raspberry Pi connecté à internet (en le branchant à votre box internet avec un câble Ethernet par exemple) en utilisant un navigateur web tel que Midori :

Vous pouvez aller sur internet en cliquant sur cette icône.

Pour dézipper le fichier, il vous suffit d'aller le chercher dans le gestionnaire de fichiers (qu'on peut lancer en cliquant sur la 2ème icône dans la barre de lancement rapide en bas à gauche de l'écran) et de faire un clic droit sur le fichier zippé puis de sélectionner l'option pour le dézipper : 

Cliquez sur la deuxième icône pour lancer le gestionnaire de fichiers.

Une fois que vous avez des émulateurs, il vous faut des ROMs pour faire fonctionner les jeux N'oubliez pas que pour pouvoir utiliser une ROM légalement vous devez soit posséder le jeu original, soit attendre que le copyright qui lui est lié ait expiré (vous pouvez avoir une liste de jeux "libérés" ici).
Faites bien attention à prendre des ROMs compatibles avec la version de l'émulateur que vous avez. En particulier pour MAME, la version 0.37b5 est ancienne, et toutes les ROMs ne seront pas compatibles (mais en cherchant un peu, vous pourrez même trouver un zip des 2270 jeux compatibles avec la version 0.37b5 de MAME).
Pour mame4all placez vos ROMs dans le dossier
/usr/local/bin/indiecity/InstalledApps/mame4all_pi/Full/roms/.
Pour PiSnes placez vos ROMs dans le sous-dossier "roms" du dossier où vous l'avez mis.

Configuration pratique


Pour l'instant lancer les émulateurs n'est pas très pratique.
Pour lancer mame4all vous devez passer par le Pi Store, et pour lancer PiSnes vous devez aller le chercher dans son dossier à l'aide du gestionnaire de fichiers.

Pour permettre de les lancer depuis la console, et de façon simple, nous allons créer deux mini-scripts shell qui se rendent dans le bon dossier et lancent les émulateurs.

Pour créer un script, lancez le logiciel "Leafpad" en allant le chercher dans le menu "démarrer" de la barre de lancement rapide (en bas à gauche de l'écran).

Cliquez sur l'icône la plus à gauche de la barre de lancement rapide, puis choississez "accessoires" et "leafpad".

S'ouvre alors un fichier texte vierge.

Pour le script pour lancer mame4all écrivez :
# !/bin/bash
cd /usr/local/bin/indiecity/InstalledApps/mame4all_pi/Full
./mame
Puis enregistrez le script où vous voulez (personnellement je mets mes scripts dans le dossier "/usr/local/bin/") en lui donnant un nom explicite suivi de ".sh" (par exemple "mame4all.sh").

Pour le script pour lancer PiSnes écrivez :
# !/bin/bash
cd /home/pi/PiSnes
./snes9x.gui
En remplaçant éventuellement "/home/pi/PiSnes" par le chemin du dossier où vous avez mis PiSnes.
Puis enregistrez le script au même endroit que le précédent et en lui donnant un nom explicite finissant par ".sh" (par exemple "PiSnes.sh").

Ces deux scripts sont très simples, ils demandent juste au terminal de se rendre dans le dossier qui contient l'émulateur voulu, et de le lancer.

Il faut maintenant les rendre exécutables pour pouvoir les lancer facilement dans un terminal. Pour cela, ouvrez un terminal et rendez-vous dans le dossier où vous les avez enregistrés (cd /usr/local/bin si vous les avez mis dans le dossier "/usr/local/bin") et tapez :
sudo chmod +x nom_du_script.sh
En remplaçant évidemment "nom_du_script.sh" par le nom de votre script ! (ici encore, la touche tabulation vous permet de faire l’auto-complétion si vous avez tapé les premières lettres du nom du script).

Maintenant, il vous faut rajouter le dossier qui contient vos scripts à la liste des chemins connus par votre Raspberry Pi. Pour cela, il faut rajouter une ligne dans le fichier ".bashrc" qui se trouve dans votre dossier "/home/pi/". Comme c'est un fichier caché, si vous passez par le gestionnaire de fichier vous aurez sans doute à lui demander d'afficher les dossiers cachés (en faisant "clic droit" et en cochant l'option adéquate).

Faites clic droit et cocher "Montrer les fichiers cachés".

Faites ensuite un clic droit sur le fichier ".bashrc" et ouvrez-le avec Leafpad (vous pouvez aussi lancer Leafpad et faire "ouvrir" puis aller chercher le fichier .bashrc). Allez à la fin du document et rajoutez :
export PATH=$PATH:/usr/local/bin
En remplaçant éventuellement "/usr/local/bin" par le chemin du dossier où vous avez enregistrés vos scripts.

Maintenant, il vous suffira de taper le nom de votre script dans la console pour le lancer.
Par exemple, tapez : mame4all.sh et vous lancerez directement l'émulateur MAME (vous aurez alors accès à la liste des roms présentes).

Comme taper le nom du script est encore trop long, nous allons créer des alias afin qu'une simple commande lance le script. Pour cela, rouvrez le fichier .bashrc à l'aide de Leafpad et ajoutez :
alias a='mame4all.sh'
alias b='PiSnes.sh'
Cela fera que la commande a tapée dans un terminal, lancera le script mame4all.sh, et que la commande b lancera PiSnes.sh.

Vous êtes bien sûr libres de mettre les alias que vous souhaitez. Et il peut-être une bonne idée de créer un alias pour éteindre ou rebooter rapidement le Raspberry Pi depuis la console.
Par exemple :
alias xx='sudo halt'
alias aza='sudo reboot'
Ce qui fait que la commande xx éteindra le Raspberry Pi, et que la commande aza le refera redémarrer.

L'intérêt de mettre des alias courts, est que vous pourrez les entrer à l'aide de quelques boutons uniquement (pour peu que vous ayez mappé les boutons sur les lettres du clavier que vous utilisez dans vos alias).

La dernière étape consiste à faire que le Raspberry Pi démarre sans demander de mot de passe (je supposerai à partir de maintenant que vous avez configuré votre Raspberry Pi pour qu'il démarre en mode console et non pas sur le bureau, comme expliqué dans le premier paragraphe) :
- tapez la commande sudo nano /etc/inittab
- descendez jusqu'à trouver la ligne où il est marqué 1:2345:respawn:/sbin/getty 115200 tty1
- commentez- la en écrivant un # devant
- écrivez sur la ligne en dessous 1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
-  faites "contrôle + X" pour quitter et répondez Oui lorsqu'on vous demande si vous voulez sauvegarder.

À noter que le "pi" qui apparaît dans la ligne à rajouter correspond au nom de la session qui se lancera au démarrage (par défaut le nom d'utilisateur est "pi" sous Raspbian). Si vous avez changé le nom de l'utilisateur (par exemple si vous avez créé un autre compte utilisateur), remplacez "pi" par le nom que vous avez choisi.

Voilà, votre Raspberry Pi est configuré pour fonctionner uniquement à l'aide d'un joystick et de boutons qui simuleront des touches du clavier (nous verrons dans le prochain article comment faire pour que les boutons du joystick soient reconnus comme des touches de clavier par le Raspberry Pi).

Configurer les émulateurs mame4all et PiSnes


Pour configurer mame4all, il vous suffit d'appuyer sur la touche "tabulation" une fois un jeu lancé, et de configurer les touches depuis en choisissant "Configure General Input" (sélectionnez une commande dans la liste avec "entrée" puis appuyez sur la touche que vous souhaitez utiliser pour réaliser cette commande).

Pour configurer PiSnes, il vous suffit d'ouvrir le fichier "snes9x.cfg" qui se trouve dans le dossier où vous avez mis PiSnes et d'éditer les numéros qui correspondent aux différentes touches. Vous trouverez la liste des numéros correspondants aux différentes touches ici.

Personnellement, j'ai configuré de la façon suivante (à gauche la touche du clavier, et à droite la fonction dans l'émulateur) :
  • Pour Mame :
    - Entrée = Player 1 Start
    - Retour arrière = Player 1 Coin
    - A = Player 1 Button 1
    - B = Player 1 Button 2
    - C = Player 1 Button 3
    - X = Player 1 Button 4
    - Y = Player 1 Button 5
    - Z = Player 1 Button 6
    - F1 = increase frameskip (cette option permet de "sauter" un certain nombre d'images si le jeu est trop gourmand et que l'émulateur peine à le faire fonctionner à pleine vitesse)
    - Espace = Pause
  • Pour PiSnes :
    - Entrée = Start
    - Retour arrière = Select
    - A = A button
    - B = B button
    - C = L button
    - X = X button
    - Y = Y button
    - Z = R button
    - Espace = turbo
Et j'ai donc mappé les boutons du joystick sur les touches du clavier A, B, C, X, Y, Z, Espace, Entrée, Retour Arrière, F1 et Echap (pour quitter), et les directions du Joystick sur les flèches de direction (comme je l'ai déjà mentionné, nous verrons dans l'article suivant comment faire ça).

7 commentaires:

  1. bonjour je doit faire un projet de borne d'arcade avec des jeunes je voulais savoir la liste des émulateur qui fonction dessus par ce que la PS2 et dreamcast fonction dessus merci de ta réponse

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Les consoles les plus puissantes que le Raspberry Pi émule pour l'instant sont la Playstation 1 et la Nintendo 64, et je ne pense pas qu'il ait la puissance suffisante pour émuler correctement la PS2 ou la Dreamcast. Après il émule à peu près tout ce qui est moins puissant : Super Nes, MegaDrive, Nes, Master System, Atari 5200, ZX Spectrum, Amstrad CPC, Game Boy et Game Boy Advance, PC Engine, etc.
      On peut trouver une liste assez longue des émulateurs disponible sur ce forum !

      Supprimer
  2. Bonjour,
    j'envisage moi aussi de réaliser une borne avec un Raspberry, mais je me demandais si celle que vous avez construite pouvais s allumer et s eteindre en appuyant sur un seul et unique bouton, même pendant une partie?

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Ce n'est pas quelque chose que j'ai prévu, parce que mon modèle n'est branché que lorsque que je m'en sers, et que j'ai paramétré un raccourci pour éteindre le système proprement avant de le débrancher (du coup je ne me suis pas embêté à faire un interrupteur :D).
      Mais c'est quelque chose qui peut tout à fait être ajouté !

      En faisant une rapide recherche ("interrupteur on off raspberry pi"), j'ai trouvé ça par exemple : tutoriel sur framboise314, circuit tout fait chez mausberry, la même chose chez modmypi, et il en existe sûrement d'autres !

      Supprimer
    2. Merci beaucoup!

      Supprimer
  3. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer