Des geekeries, de la MAO, de tout et de rien…
Je suis
Charlie

Catégorie « Linux »


USB Gadget - ethernet à travers USB

Icône auteur nah, Icône canondrier 16 février 2019, Icône commentaire
Mots clés Icône catégorie linux raspberry pi, classé dans Icône catégorie Blog, Asrall, Linux

Cet article est aussi présent dans mes pages de documentation.
https://docs.nah.re/raspberry_pi/usb-otg-g-ether.html


Avant-propos

Ceci est un petit tutoriel en français, sur l'intégration de g_ether sur un Raspberry PI Zero.

Un minimum de connaissances de GNU/Linux et de la ligne de commande est nécessaire.

Photo d'un Raspberry PI Zero, dans son boîter blanc.

Un Raspberry PI Zero.

Installation de Raspbian

Premier détail : je n'ai pas copié une raspbian lite ou full sur la microSD, parce qu'on n'a pas du tout la même définition de léger.

Du coup, je suis parti sur raspberrypi-ua-netinst https://github.com/FooDeas/raspberrypi-ua-netinst

L'avantage d'une installation en unattended + netinst, c'est que l'on définit les paramètres dans un fichier de configuration, on branche un câble réseau (via un adaptateur micro USB OTG + une carte ethernet USB), on démarre et on laisse tourner.

Une fois l'installation terminée, je me suis connecté sur le Raspberry PI via SSH (toujours via le réseau).

Intégration de g_ether

Maintenant, on peut s'attaquer à l'intégration du gadget USB Ethernet (g_ether).

Se connecter avec le compte root (peu importe la méthode on va modifier des fichiers et installer des trucs)

Ouvrir /boot/config.txt. Ajouter à la fin du fichier, après [all]

#USB G_Ethernet
dtoverlay=dwc2

Si vous lisez des vidéos avec omxplayer et que celui-ci râle avec le message

COMXAudio::Decode timeout

Ajoutez dans le même fichier (/boot/config.txt)

gpu_mem=128

Enregistrer et fermer.

Ouvrir /boot/cmdline.txt

ajoutez à la fin de la commande.

modules-load=dwc2,g_ether

N'insérez surtout pas de saut de ligne.

La commande pourrait ressembler à ça :

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty3 elevator=deadline fsck.repair=yes root=/dev/mmcblk0p2 rootfstype=ext4 rootwait modules-load=dwc2,g_ether quiet logo.nologo loglevel=3 vt.global_cursor_default=0

Ici, j'ai configuré pour que tout soit silencieux, avec aucun message sur la sortie vidéo. Ne copiez pas bêtement la commande sans savoir à quoi correspond quiet ou vt.global_cursor_default=0. Ce n'est pas le but de ce tuto rapide, je ne détaillerai pas à quoi ça correspond.

Enregistrer et fermer le fichier.

Configuration du réseau

Pour éviter de se prendre la tête avec l'attribution de l'adresse IP une fois la carte branchée sur un PC (ou MAC) en USB, j'installe un serveur DHCP qui fera cette tâche automatiquement.

Installer le paquet isc-dhcp-server

apt install isc-dhcp-server

Activer le service (activer, ne pas démarrer tout de suite) avec systemd

systemctl enable isc-dhcp-server

On configurera le serveur DHCP juste après. On va d'abord configurer le réseau pour g_ether.

Ouvrir le fichier /etc/network/interfaces. Y ajouter :

# Ethernet over USB
allow-hotplug usb0
iface usb0 inet static
address 10.10.10.10
netmask 255.255.255.0
broadcast 10.10.10.255
gateway 10.10.10.10

Ici, j'ajoute une interface usb0, qui a une adresse IP 10.10.10.10. Cette IPv4 étant dans les plages réservées pour un usage privé, cela ne posera pas de problème ni de conflit. usb0 sera créé lorsque le raspberry pi sera branché en USB.

Enregistrer et fermer.

Ouvrir maintenant /etc/dhcp/dhcpcd.conf

Supprimer tout le contenu et insérer :

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;

subnet 10.10.10.0 netmask 255.255.255.0 {
range 10.10.10.11 10.10.10.20;
option routers 10.10.10.10;
option broadcast-address 10.10.10.255;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
}

Les cinq premières lignes sont pour le paramétrage du serveur dhcp, les huit lignes en bas correspondent à la configuration du réseau.

Je définis le réseau comme étant sur 10.10.10.0, s'étendant jusqu'à 10.10.10.255 via le masque réseau.

Je définis ensuite la plage allant de 10.10.10.11 à 10.10.10.20 (ce qui me sera suffisant).

J'indique que le routage se fera sur 10.10.10.10, qui correspond à l'adresse du Raspberry PI (que j'ai défini dans /etc/network/interfaces).

Le reste n'est pas vraiment important (durée des sessions dhcp, nom de domaine local).

Enregistrer et fermer.

Ouvrir maintenant /etc/default/isc-dhcp-server

Décommenter les lignes

DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
DHCPDv4_PID=/var/run/dhcpd.pid

Ajouter usb0 dans INTERFACESv4, comme ceci :

INTERFACESv4="usb0"

Enregistrer et fermer.

Tests

Éteindre le Raspberry PI

sudo poweroff

Tout débrancher, puis brancher un câble micro USB (data, pas charge seule) sur le port "USB" du Raspberry (pas sur "pwr IN"), brancher l'autre côté du câble USB sur un PC.

Photo d'un Raspberry PI Zero avec un câble Micro USD branché sur le port USB.

Branchement du câble micro USB.

Après quelques dizaines de secondes, une interface réseau devrait apparaître (sous Windows, il y ait de fortes chances que le pilote rdnis ne s'installe pas automatiquement, il faudra l'installer manuellement via ajouter un pilote, choisir le pilote, type carte réseau, fabricant Microsoft, sélectionner rdnis ou un truc s'en approchant, répondre oui à l'avertissement comme quoi le pilote n'est peut être pas compatible).

Vérifiez si le Raspberry PI est bien reconnu comme une carte réseau.

Sous Windows

ipconfig /all

Sous Mac OS X et autres BSD

ifconfig

Sous GNU/Linux

ip a

Normalement, quelques lignes indiquant

inet 10.10.10.17/24 brd 10.10.10.255 scope global dynamic noprefixroute enp0s19f2u1

ou

inet 10.10.10.17  netmask 255.255.255.0  broadcast 10.10.10.255

ou un truc indiquant qu'il y a une IP commençant par 10.10.10 devrait s'afficher.

Si c'est le cas, taper

ping 10.10.10.10

S'il y a une réponse, cela signifie que cela fonctionne.

PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data.
64 bytes from 10.10.10.10: icmp_seq=1 ttl=64 time=0.504 ms
64 bytes from 10.10.10.10: icmp_seq=2 ttl=64 time=0.543 ms
64 bytes from 10.10.10.10: icmp_seq=3 ttl=64 time=0.539 ms
64 bytes from 10.10.10.10: icmp_seq=4 ttl=64 time=0.542 ms
^C
--- 10.10.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 111ms
rtt min/avg/max/mdev = 0.504/0.532/0.543/0.016 ms

Il n'y a plus qu'à se connecter dessus.

ssh pi@10.10.10.10

Si vous avez pu vous connecter via ssh à travers la connection USB, félicitations.

Conclusion

Ce n'est pas très compliqué à mettre en place, le problème étant de réunir les différentes informations éparpillées un peu partout sur le net, et souvent en anglais (ce qui ne me pose pas de problème, mais ce n'est pas le cas de tout le monde).

Remerciements

Un gros merci à Albert, pour m'avoir prêté son Raspberry PI Zero.

Full Tilt! Pinball

Icône auteur nah, Icône canondrier 04 mars 2018, Icône commentaire
Mots clés Icône catégorie GNU/Linux, Jeux, MIDI, classé dans Icône catégorie Linux, wine, Jeux, MIDI

Full Tilt! Pinball

Photo de la boîte du jeu. Source : wikipedia

Ce jeu de flippers est sorti en 1995, et comprenait 3 tables :

  • Dragon's Keep
  • Skulduggery
  • Space Cadet

Si le nom "Space Cadet" vous dit quelque chose, c'est normal. J'en parlerai un peu plus tard.

Full Tilt! Pinball a été développé par Cinematronics, et publié par Maxis (Sim City, Les Sims, …)

Points communs

Les trois tables sont en fait trois jeux distincts, situés dans des répertoires séparés. Le disque contient les jeux pour Windows 3.1 (16 bits) et Windows 95 (32 bits). La version Windows 95 fonctionne également sous Windows XP.

La résolution du jeu n'est pas fixe. On peut choisir 640x480, 800x600 et 1024x768.

Les sons sont au format Wave PCM 11 kHz (donc pas vraiment d'excellente qualité), et les musiques sont au format MIDI – un synthétiseur MIDI ou un expandeur MIDI est alors nécessaire pour pouvoir entendre les musiques.

Au niveau réalisme, il ne faut pas s'attendre à une simulation parfaite de la physique (Pour ça, il vaut mieux jouer à 3D Pro Pinball, Timeshock! par exemple). Le comportement est à peu pros cohérent dans Space Cadet, un peu hasardeux dans Skulduggery et complètement irréaliste dans Dragon's Keep. D'ailleurs, la bille a parfois tendance à disparaître de l'écran, voire à se téléporter, ce qui est plutôt pénible.

Les contrôles sont simples :

  • une touche pour lancer la bille
  • deux touches pour actionner les flippers
  • trois touches pour faire bouger le flipper vers la gauche, la droite ou vers le bas, pour modifier le comportement de la bille.

Les différentes tables

Dragon's Keep

Capture d'écran de Dragon's Keep, sous Windows 3.1 - Dosbox

Cette table représente un univers de Fantasy, avec différentes « missions », comme « trouver l'antre du dragon », « sauver une jeune vierge », « vaincre le dragon », « voler le trésor gardé par le dragon », avec des objets à collecter comme des sorts, des armes et des armures.

Skulduggerry

Capture d'écran de Skuldugerry, sous Windows 3.1 - Dosbox

Cette table représente un univers de pirates du 17e siècle (caraïbes). Au moment de lancer la bille, une liste de « modes » défile. Je ne pourrai pas en dire plus, je n'ai pas tout à fait compris comment cela fonctionnait.

Space Cadet

Capture d'écran de Space Cadet, sous Windows 3.1 - Dosbox

Cette table représente un univers spatial. Le but est de monter en grade (cadet, sous-officier, lieutenant…), en effectuant différentes missions, comme attaquer les bumpers, gravir la rampe de lancement, recharger (régulièrement) en carburant.

Pinball 3D pour Windows - Cadet de l'espace

Capture d'écran de Pinball 3D pour Windows - Cadet de l'espace, sous Windows ME Millenium Edition

Cette version, intégrée dans Windows NT4, 2000, ME et XP (32 bits), est une version légèrement réduite de Full Tilt! Space Cadet.

En effet, il n'y a plus qu'une seule musique, la résolution est limitée à 640x480. Il n'y a plus de « ball saved » lorsqu'une mission est accomplie.

D'autres modifications, d'ordre cosmétique sont également visibles (couleurs de texte, bannière, police de caractère…)

Contrairement à mes souvenirs, cette version n'était pas incluse dans Windows 95. Elle était intégrée dans l'extension Microsoft Plus! pour Windows 95, vendue séparément.

Jouer au jeu

Pour cela, il y a plusieurs méthodes

Nativement

Il suffit d'insérer le disque du jeu, et de l'installer sur n'importe quel PC fonctionnant sous Windows 3.1, 95, 98, ME ou XP.

À noter : À partir de Windows 95, le synthétiseur MIDI utilisé pour jouer les musiques est le SoftSynth Microsoft GM/GS, basé sur une version réduite du SC-55. Sous Windows XP, on peut installer le synthétiseur Yamaha XG WDM (basé sur le MU50), qui est de meilleure qualité. Sinon, on peut utiliser un expandeur Akai, Roland, Yamaha, Korg… en MIDI (via MPU 401, port manette 15 broches et un adaptateur, interface MIDI USB…).

Dosbox

Si Windows 3.1 ou 95 est installé dans Dosbox, il suffit d'accéder au lecteur CD-ROM depuis Windows puis installer le jeu. À noter : si le lecteur n'est pas accessible, on peut copier tout le contenu du disque dans un répertoire accessible depuis Dosbox.

Wine

Le jeu fonctionne également avec Wine. Il suffit de copier la version Windows 95 dans un répertoire situé dans le $WINEPREFIX.

La principale difficulté avec Wine, c'est pour avoir les musiques. L'une des solutions est l'utilisation de Fluidsynth (déjà évoqué avec Touhou08, cf. http://blog.chibi-nah.fr/touhou-08-imperishable-night-sous-gnu-linux ).

Bien entendu, cela n'a pas fonctionné, parce que mon matériel a évolué depuis (plus utilisation de jack2 comme serveur de son principal).

Heureusement, la documentation WINE est très claire et à jour. https://wiki.winehq.org/MIDI

Donc, lancement de l'un des flippers (ici Space Cadet) via la ligne de commande :

WINEDEBUG=+msacm wine CADET.EXE

Puis observation de ce qui arrive dans le terminal (attention, ça défile très très vite dès que la musique commence à jouer).

Dans mon cas, les lignes intéressantes sont les suivantes :

008e:trace:msacm:MIDIMAP_FindPort L"SC-8820 - SC-8820 Part A"
008e:trace:msacm:MIDIMAP_FindPort L"SC-8820 - SC-8820 Part B"
008e:trace:msacm:MIDIMAP_FindPort L"jack_midi - port"
008e:trace:msacm:MIDIMAP_FindPort L"a2jmidid - port"
008e:trace:msacm:MIDIMAP_FindPort L"Midi Through Port-0"
008e:trace:msacm:MIDIMAP_FindPort L"USB Uno MIDI Interface MIDI 1"
008e:trace:msacm:MIDIMAP_FindPort L"SC-8820 - SC-8820 MIDI"
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 0] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 1] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 2] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 3] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 4] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 5] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 6] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 7] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 8] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 9] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[10] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[11] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[12] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[13] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[14] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[15] => 0

Intéressons-nous d'abord à MIDIMAP_FindPort. On constate d'abord qu'il y a 7 sorties MIDI.

Si on compare avec la commande aconnect -o, on n'obtient pas du tout le même résultat

client 14: 'Midi Through' [type=noyau]
    0 'Midi Through Port-0'
client 20: 'USB Uno MIDI Interface' [type=noyau,card=1]
    0 'USB Uno MIDI Interface MIDI 1'
client 24: 'SC-8820' [type=noyau,card=2]
    0 'SC-8820 Part A  '
    1 'SC-8820 Part B  '
    2 'SC-8820 MIDI    '

Les sorties ne sont pas dans le même ordre, et on obtient que les sorties pour ALSA. Celles de jack n'apparaissent pas.

Donc, reprenons ce qui est sorti de wine, et numérotons les sorties, en commençant par 0 et non pas par 1 :

0 : "SC-8820 - SC-8820 Part A"
1 : "SC-8820 - SC-8820 Part B"
2 : "jack_midi - port"
3 : "a2jmidid - port"
4 : "Midi Through Port-0"
5 : "USB Uno MIDI Interface MIDI 1"
6 : "SC-8820 - SC-8820 MIDI"

Si on regarde le mappage des canaux MIDI, on constate ceci :

008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 0] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 1] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 2] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 3] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 4] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 5] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 6] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 7] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 8] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[ 9] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[10] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[11] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[12] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[13] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[14] => 0
008e:trace:msacm:MIDIMAP_LoadSettings chnMap[15] => 0

Les 16 canaux sont assignés à la sortie 0, qui correspond à "SC-8820 - SC-8820 Part A". Là, cela tombe bien, parce que j'ai un expandeur (matériel) qui correspond. Si ce n'était pas le cas (par exemple, "jack_midi - port"), cela poserait quelques problèmes, du genre pas de son.

Admettons que je veuille que la sortie par défaut soit "USB Uno MIDI Interface MIDI 1", il faut donc que wine utilise la sortie 5.

Pour cela, sortons l'éditeur de base de registre.

wine regedit

Si nécessaire, créer la clef suivante :

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap

Si nécessaire, créer la valeur chaîne avec le nom suivant :

CurrentInstrument

Puis éditer cette valeur chaîne, en saisissant #5 comme valeur.

Capture d'écran de Regedit, montrant le chemin complet vers la clé, et une fenêtre montrant le changement de la valeur de la chaîne CurrentInstrument.

Relancer le jeu, et vérifier que la nouvelle sortie est bien prise en compte

009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 0] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 1] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 2] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 3] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 4] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 5] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 6] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 7] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 8] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[ 9] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[10] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[11] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[12] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[13] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[14] => 5
009a:trace:msacm:MIDIMAP_LoadSettings chnMap[15] => 5

Normalement, il n'y a pas besoin de vérifier, on est censé entendre la musique :)

Vidéos

Ci dessous, trois vidéos montrant les différentes table, en mode démonstration.

À noter : les jeux ont été lancés via WINE 3.2 sous Debian SID. Pour la musique, c'est un expandeur (matériel) qui est utilisé.

Dragon's Keep

Skulduggery

Space Cadet

Conclusion

Pour conclure, avec un peu d'efforts, on peut toujours faire fonctionner ces flippers en 2018, que cela soit nativement (avec un vieux PC) ou via l'émulation (dosbox), voire l'exécution (via wine) sous GNU/Linux.

Pour la question « Où peut-on trouver ces jeux », mis à part les sites de ventes de produits d'occasion ou les brocantes, je ne vois pas vraiment où on peut le trouver.

Remerciements

L'anar geek, pour avoir évoqué 3D Pinball sous Windows XP, ce qui n'a donné l'envie de ressortir la version « originale ».

Trit' pour m'avoir indiqué que non, 3D Pinball Space Cadet n'était pas intégré à Windows 95.

Changer l'extension de plusieurs fichiers en une simple manipulation

Icône auteur nah, Icône canondrier 03 décembre 2017, Icône commentaire
Mots clés Icône catégorie geekeries, GNU/Linux, linux, NetBSD, classé dans Icône catégorie Asrall, Geekeries, Linux

Contrairement à MS-DOS, il n'y a pas de méthode simple pour changer juste l'extension sur un grand nombre de fichiers.

Il existe des solutions avec une interface graphique, ou un ensemble de commandes à taper.

J'ai fini par m'écrire un script qui évite de retaper toutes les commandes. Et pour le retrouver facilement, je l'ai appelé mass-rename, et l'ai enregistré sous /usr/local/bin

#!/bin/bash
cd "$1"
for f in *.$2; do 
mv -- "$f" "${f%.$2}.$3"
done

Utilisation :

mass-rename   

Exemple :

mass-rename ~/bureau/webcomics zip cbz

Attention : ce script ne fait absolument aucune vérification. À utiliser à vos risques et périls.

Tutoriel : comment installer SteamOS

Icône auteur nah, Icône canondrier 18 avril 2015, Icône commentaire
Mots clés Icône catégorie linux, GNU/Linux, Steam, SteamOS, classé dans Icône catégorie Blog, Linux

Ceci est un long tutoriel, détaillé, expliquant comment installer SteamOS, sans passer par l'installation officielle, qui efface automatiquement le disque dur et nécessite un bios UEFI.

Par simple curiosité, j'ai téléchargé l'image d'installation. L'installation est automatisée (preseed) et un script post-installation est exécuté.

Au lieu de modifier l'image d'installation et d'installer manuellement, j'ai préféré opter pour une autre solution, pas forcément plus longue, mais qui fonctionne parfaitement.

Prérequis :

  • Un disque dur (ou SSD) ayant de la place de libre.
  • Avoir préparé une partition de 10 Go minimum (c'est vraiment le strict minimum, de quoi installer SteamOS et un petit jeu, pour valider l'installation).
  • Avoir préparé une partition qui servira pour le swap (1 Go devrait suffire).
  • Ne pas avoir peur de la ligne de commande.
  • Ne rien avoir contre Linux Mint.
  • Une bonne connexion internet avec un bon débit (56k ou 3G limitée à 1,5 Go s'abstenir).
  • Une clé USB vide, de 2 Go minimum , ou alors, un DVD vierge.
  • Un clavier azerty en vaut deux (pas de support du bépo).
  • Du temps à perdre.

Lire la suite

page 1 sur 8 suivante »