mardi 13 août 2013

Construction d'une borne d'arcade : Round 2

Je vous ai parlé récemment de mon projet de construction d'une borne d'arcade. Après la réflexion, il est temps de s'y mettre.

Aujourd'hui, je mets les mains dans le cambouis et je vous détaille la partie logicielle de ma future borne. Quelques détails resteront à régler une fois le panneau de contrôle achevé (ça c'est pour plus tard), mais l'essentiel est là. A la fin de cette article, vous verrez un PC démarrer et lancer, sans manipulation de ma part, une interface de jeu.

Préparation

Dans mon précédent article, je vous expliquais que j'avais récupéré un vieux PC au boulot. En fait c'était un bundle, il était accompagné de véritables poussières d'époque. La première chose à faire a donc été un grand nettoyage de printemps.

J'ai profité de cette séquence ménage pour regarder un peu plus en détail les entrailles de la bête. A ma grande surprise il n'y a pas de ventilateur sur le processeur. Celui-ci est surmonté d'un radiateur au sommet duquel se trouve un énorme conduit en plastique vert menant directement au ventilateur de la tour. L'extraction de l'air chaud n'est pas des plus silencieuses du fait du frottement de l'air sur le conduit vert.
Un système de refroidissement pas très discret
Il faudra probablement que je change ça. Cela dépendra du niveau de bruit que je percevrai une fois le PC mis dans la borne d'arcade.

Installation logiciel

Création d'une clé USB Live

J'ai téléchargé l'ISO de la dernière version de Xubuntu, le dérivé d'ubuntu utilisant le windows manager XFCE. J'ai choisi la version 32 bit.

Et oui, bittorent sert vraiment à télécharger des iso Linux !
J'ai ensuite mis cette image sur une clé USB grâce à l'utilitaire idoine d'ubuntu. Des équivalents existent si vous êtes sur Windows (exemple : LiLi USB Creator).

On choisit l'ISO puis la clé USB et c'est tout.

Paramétrage du bios

Avant de lancer l'installation de Xubuntu, j'ai fait un petit tour dans le bios. Il n'était pas à jour mais, comme le seul moyen de faire cette mise à jour est de passer par Windows, je l'ai laissé en l'état. J'ai par contre modifié quelques paramètres :
  • le mode "Quiet" du disque dur que j'ai remplacé par "Performance". Le disque gratte plus lors du démarrage mais il va plus vite. Une fois l'OS chargé on ne l'entend plus beaucoup.
  • l'"AC Power Recovery" qui est maintenant sur "On". Cela me permettra de démarrer la tour à l'aide d'un interrupteur placé derrière la borne, celui-ci commandera une multiprise. Ainsi, sans trop me pendre la tête, je pourrai allumer et éteindre toute la borne avec un unique interrupteur.
D'autres paramètres ont aussi été ajustés mais c'est plus anecdotique (désactivation du lecteur disquette,...).

Installation de Xubuntu et consors

Un Xubuntu de base

Je branche ma clé USB, démarre le PC et je n'oublie pas d'appuyer sur "F12" pour accéder au choix de l'unité de démarrage. Après avoir choisi "USB", Xubuntu se charge pour arriver sur l'écran de lancement de l'installation. Je ne vais pas détailler ici les différents écrans qui s’enchaînent lors de l'installation. Ils sont on ne peut plus simples.
Lors de la création du compte utilisateur, il ne faudra pas oublier de cocher l'option permettant de démarrer directement une session sans demander le mot de passe. Sans cela vous seriez obliger de sortir le clavier à chaque démarrage de la borne. Pas de panique cependant, il est toujours possible de refaire cette configuration depuis le gestionnaire des utilisateurs après l'installation.
Comme à mon habitude, j'ai choisi de partitionner moi-même le disque afin de pouvoir séparer le /home du reste de la distribution (utilisez la dernière option lorsque le choix vous est donné). Sur les 80Go du disque présent, 4 seront réservés pour la partition / et le reste ira pour le /home. La machine a  2Go de RAM. J'ai estimé que c'était largement nécessaire pour faire tourner l'OS et MAME. Je n'ai donc pas réservé d'espace pour le SWAP.
L'installation se déroule sans encombre. Je remarque tout de même que le lancement de la clé USB ainsi que l'installation sont longs, vraiment longs. La machine étant assez âgée, c'est relativement logique. Cette lenteur ne se ressentira pas en utilisation normale.

Une fois l'installation faite et le PC redémarré, il est temps de supprimer les logiciels pré-installés dont je n'aurai plus besoin. Cette étape est optionnelle mais elle permet de libérer de l'espace et limite également le poids des mises à jour. Plusieurs possibilités pour cela :
  • La plus simple et la moins risquée est d'utiliser la logithèque Ubuntu (présente dans le menu) pour désinstaller un à un les logiciels comme Gimp ou Abiword qui n'auront aucune utilité par la suite.
  • Pour les plus experts, l'installation de Synaptic puis la suppression des paquets est tout aussi faisable. On pourra par cette méthode retirer bien plus de choses (bluetooth, gestionnaire d'impression,...) mais attention à ne pas retirer un paquet essentiel !
Avant d'aller plus loin, j'ai lancé la mise à jour de la distribution. Un peu plus de 120 paquets ont été améliorés depuis la sortie de Xubuntu 13.04, dont ceux relatifs au noyau.

J'installe enfin Ubuntu Tweak grâce à qui je peux supprimer les anciens noyaux inutiles ainsi que certains fichiers de configuration devenus obsolètes. Un gain de plusieurs centaines de Mo n'est pas négligeable. Résultat la distribution n'occupe plus que 2.5Go. Je pense qu'il est possible de réduire encore plus l'espace occupé mais je n'ai pas envie de trop me prendre la tête.

Mise à jour des pilotes Intel

Le fond d'écran bleu de Xubuntu présente des dégradés assez affreux. D'après ce que j'ai lu sur différents forums, un problème connu affecte les drivers inclus dans la distribution pour les cartes graphiques Intel. C'est mon cas puisque j'utilise le processeur graphique embarqué de la carte mère (un Intel 865G).  Le problème se manifeste par une limitation des couleurs sur 16 bits. Même si cela ne se verra pas dans les jeux d'arcade, je décide de procéder à une mise à jour des pilotes. Je me rends pour cela sur le site de téléchargement du gestionnaire de driver Intel. J'y télécharge la dernière version.
Avant de lancer la mise à jour, j'exécute la commande ci-dessous, depuis un terminal, afin d'authentifier le dépôt des drivers.
wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | \
sudo apt-key add -
Puis je lance le gestionnaire Intel qui se trouve dans le gestionnaire des paramètres. Une série de tests est effectuée, je valide et une mise à jour de plusieurs paquets est faite. Je redémarre et j'ai enfin de beaux dégradés, preuve que les nouveaux pilotes fonctionnent correctement.

Installation de MAME

MAME est présent dans les dépôts officiels d'ubuntu (et donc de Xubuntu). Cependant la version disponible, la 0.146, date de plus d'un an. Je vais donc ajouter un dépôt sur lequel la dernière version en date, la 0.149, est disponible. Dans un terminal, je tape les commandes suivantes : 
sudo add-apt-repository ppa:c.falco/mame
puis
sudo apt-get update
et enfin
sudo apt-get install sdlmame

MAME est désormais installé dans sa dernière version. Il ne reste plus qu'à lui indiquer le répertoire où se trouve les roms des jeux. Pour ma part, j'ai choisi de créer un répertoire emulators dans mon home. Ayant choisi "mame" lors de l"installation pour pseudo de mon compte, j'ai donc l’arborescence suivante : /home/mame/emulators .
Je ne vais configurer que MAME, mais sachez qu'il vous sera possible d'ajouter d'autres émulateurs. Chaque émulateur aura son propre répertoire sous emulators.

Au final, j'ai l'aborescence suivante :
-> home
   -> mame
      -> emulators
         -> mame
            -> marquees
            -> snap
            -> roms

Pour indiquer le chemin d'accès au roms à MAME, il faut éditer /etc/mame/mame.ini et ajouter en tête de liste de la variable rompath la valeur $HOME/emulators/mame/roms; .

Note : il est probable que vous n'ayez pas les droits d'éditer le fichier de configuration. Dans ce cas utilisez la commande sudo mousepad /etc/mame/mame.ini pour lancer l'éditeur.

Je passe pour le moment la configuration des contrôleurs. J'y reviendrai lors de la fabrication de celui de ma borne.

Voilà pour MAME.

Les roms

Je vous passe les aspects légaux.

Il existe différents sites permettant d'en récupérer (exemple). Profitez-en pour prendre également les extras qui vous permettrons de remplir les répertoires marquees et snap, ce qui servira un peu plus tard. Attention toutefois, les roms sont dépendantes de la version de MAME. Faites donc attention à ce que vous prenez.
Je place les roms obtenues dans le répertoire emulators/mame/roms. Il m'est désormais possible de lancer MAME via le menu jeu de Xubuntu.

Le front-end

MAME est fonctionnel mais est loin d'être "sexy". Je vais donc ajouter un front-end (un lanceur) afin de rendre tout cela plus convivial.

J'ai choisi d'utiliser Wah!Cade qui d'après mes différentes lectures semble être plébiscité. Je ne vais pas utiliser l'archive .deb disponible sur le site de Wah!Cade. J'avais dans un premier temps pris cette archive mais différents problèmes sont survenus lors de son utilisation. J'ai donc décidé de repartir des sources et de les installer. Pas de panique, ça n'est pas très compliqué.
J'ai besoin du gestionnaire de sources bazar. Dans un terminal, je tape (depuis la racine de mon dossier personnel) :
sudo apt-get install bzr
Puis, pour récupérer les sources :
bzr branch lp:~waynemou/wahcade/devel
Un répertoire devel est apparu dans mon dossier personnel. Avant d'installer, je remplace le fichier de traduction français (/devel/locale/fr/LC_MESSAGES/wahcade.mo)  par celui-ci. Il y a en effet un problème de gestion des caractères accentués avec les sources que j'ai récupérées. Enfin, j'exécute les lignes de commandes suivantes :
cd devel
sudo chmod 700 install
sudo ./install
Wah!Cade est installé ! Il reste à finaliser son paramétrage.

Dans le menu de Xubuntu, dans la partie "Jeux", je lance "Wah!Cade Setup Editor". Je ne change que quelques paramètres (voir écran ci-dessous).

Et enfin, je clique sur le bouton suivant afin de générer le fichier de description des jeux.


Je n'oublie pas d'enregistrer (CTRL+S). Et voilà Wah!Cade prêt à fonctionner.

Un peu de customisation

Tout fonctionne, c'est génial. Mais, dans l'optique de fabriquer une borne d'arcade réaliste, je vais maintenant supprimer les références visuelles de Xubuntu et harmoniser les différents écrans que voit l'utilisateur. A l'aide de Gimp (que j'ai sur mon PC principal), je dessine donc l'image suivante (au dimension de mon écran 1280x1024).

Celle-ci me servira de base pour tout (écran de chargement de l'OS, font d'écran de Xubuntu et interface de Wah!Cade). J'y ferai référence en parlant du "fond". Toutes les images seront au format png.

Voici les différentes modifications que j'ai effectuée des plus faciles aux plus complexes.

Xubuntu

Je commence par remplacer le fond d'écran par défaut. J'utilise le gestionnaire de paramètre présent dans le menu principal de Xubuntu. Puis je clique sur l'icône "Bureau". Je clique sur le signe "+" et je choisis l'image "fond".

Xubuntu est livré avec deux barres des tâches par défaut. Comme elles ne me serviront à rien, je vais les cacher.
Je clique droit sur la barre du haut ce qui fait apparaître un menu. Celui-ci contient un sous-menu nommé "Tableau de bord". J'y sélectionne "Préférence du tableau de bord...".
Dans la liste des tableaux de bord, je sélectionne "Tableau de bord 1" puis je clique sur le "-". Le tableau de bord du bas n'existe plus. Je sélectionne ensuite "Tableau de bord 0" et je coche "Masquer automatiquement le tableau de bord". Désormais, par défaut, je n'aurais plus que l'image appelée "fond" qui apparaîtra.

Je vais également configurer le lancement automatique de Wah!Cade au démarrage de Xubuntu. Pour cela, dans le gestionnaire de paramètres, je clique sur "Session et démarrage", puis me rends dans l'onglet "Démarrage automatique". Je clique sur "Ajouter" et je remplis les trois champs de saisie avec "wahcade" (sans les "). Je valide et ferme la fenêtre.
Wah!Cade démarrera automatiquement à chaque ouverture de session. Pour en sortir, une simple action sur la touche "Echap" suffira.

Wah!Cade

Il n'est pas encore possible de cacher le splashscreen de Wah!Cade. Une option devrait être ajoutée d'ici quelques temps à cet effet. En attendant, je la laisserai.

Je vais maintenant définir une thème pour Wah!Cade afin que celui-ci se marie parfaitement avec le "fond" que j'ai dessiné. Par défaut Wah!Cade ressemble à ça :


On aime (ou pas) mais ça ne va pas vraiment avec l'ambiance bleutée de "fond". Je me suis donc servi de ce dernier et y ai ajouté trois cadres (de gauche à droite et de haut en bas):
  • un pour la liste des jeux
  • un pour le marquee (c'est le décor situé tout en haut des bornes d'arcade)
  • un pour une illustration du jeu (snap ou snapshot)
Le résultat est le suivant :

Il faut maintenant définir le thème. Pour cela je vais dans le répertoire caché (CTRL+H pour le faire apparaître) .wahcade qui se trouve dans mon dossier personnel. Je vais dans layout et fais un copier-coller de retro_black_1024x768. Je renomme la copie mamecab.
Dans mamecab, je remplace main.png par mon image customisée. Je remplace également message.png et options.png par l'image suivante qui est en fait le cadre que j'avais dessiné pour les snapshots :



Depuis le menu, je lance "Wah!Cade Setup Editor" que j'avais déjà utilisé tout à l'heure. Sur le premier onglet, je remplace la valeur "Layout directory" par "mamecab" comme suit et je sauve (CTRL+S) :


Wah!Cade utilisera à partir de maintenant le thème mamecab. Celui-ci nécessite quelques ajustements afin de correspondre au rendu voulu. Pour cela j'utilise "Wah!Cade Layout Editor" qui se trouve dans le sous-menu "Jeux".
Je supprime les titres et autres éléments hérités du thèmes que j'ai copié puis, je positionne et dimensionne les éléments "Games List", "Artwork1" et "Artwork2" pour qu'ils correspondent aux trois cadres que j'ai prévus dans mon thème. J'en profite pour grossir également les polices d'écriture. Il faut également modifier les dimensions de l'affichage afin qu'elles correspondent à celles de mon image (et donc de mon écran). Je fais de la même façon les adaptations nécessaires pour les affichages des options et des messages. 

Pour en savoir plus sur la création d'un layout pour Wah!Cade, je vous conseille de regarder la vidéo suivante (en anglais) qui explique le B-A-BA :



Boot screen

C'est la dernière partie de ma customisation. Je vais décrire les manipulations à effectuer pour remplacer l'écran de chargement de Xubuntu par un écran basé sur "fond" agrémenté d'une petite animation (pacman).


Je vais commencer par un peu de théorie. Le démarrage de Xubuntu est assuré par Plymouth. Il se base pour cela sur des thèmes définis dans /lib/plymount/themes/ . Ceux-ci utilisent des images (au format .png) ainsi qu'une partie script permettant de programmer des animations.

Pour faire plus simple, je n'ai pas créé un nouveau thème mais j'ai plutôt écrasé celui par défaut. J'ai ajouté dans /lib/plymount/themes/xubuntu-logo/ mon image "fond" ainsi que deux images "pacman" (avec une ouverture de la bouche différente) et deux images "fantômes" (le bas du fantôme est différent). Les images "pacman" et "fantôme" sont des versions plus modernes des sprites utilisés dans le jeu pac-man.
J'ouvre ensuite dans un éditeur le script d'origine xubuntu-logo.script. J'efface complètement son contenu. Voici ensuite les étapes du script :
  1. Je récupère les dimensions de l'écran.
  2. Je définis mes différentes images et crée un sprite pour le "fond", un pour le fantôme et un pour pacman.
  3. Je crée une variable pour définir la position horizontale de pacman et une autre pour celle du fantôme. Ces variables sont initialisées afin que le fantôme et pacman soient en dehors de l'écran au début de l'animation.
  4. Il ne me reste plus qu'à utiliser un évènement de Plymouth qui survient environ 50 fois par secondes pour appeler une fonction d'animation. Dans celle-ci je déplace de quelques pixels mes deux personnages, pacman avançant un peu plus vite (environ 15%) pour lui faire rattraper le fantôme. Tous les 75 pixels, je remplace ma première image de pacman par la seconde et fait de même pour le fantôme. Cela recréé l'animation originale du jeu pac-man.
J'enregistre le script, il n'y a plus qu'à tester et à faire quelques retouches.

Pour que ce boot screen apparaisse plus tôt lors du boot de la machine (cela ne changera pas le temps nécessaire au boot) voici les commandes à taper :
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
puis
sudo update-initramfs -u
Cette dernière commande devra dès lors être refaite à chaque changement du script si vous voulez que celui-ci soit pris en compte.


Voici quelques ressources qui m'ont aidé à comprendre le fonctionnement de Plymouth:

Résultat

Maintenant que toutes la customisation est faite, regardons le résultat final. Cette vidéo a été filmée dès le démarrage du PC jusqu'à l'arrivée sur Wah!Cade. Pas mal non ?



Voilà qui conclut ce chapitre. J'espère qu'il vous aura été utile. Je ne suis pas rentré dans tous les détails de peur de vous lasser. N'hésitez donc pas à me demander des explications supplémentaires si vous en ressentez le besoin.

Dans quelques semaines j'entamerai la construction de la borne et/ou du contrôleur. Je dois encore réfléchir à plusieurs détails avant de démarrer ces dernières parties.

Aucun commentaire:

Enregistrer un commentaire