Des enceintes sans fil à l’aide d’un Raspberry Pi

C’est un peu le truc « in » du moment pour les bidouilleurs et j’ai craqué moi aussi en commandant un Raspberry Pi. Je n’avais pas la moindre idée de ce que j’allais en faire au moment où je l’ai acheté mais depuis, je lui ai trouvé quelques utilisations sympathiques. L’une de ces utilisations est un récepteur audio sans fil. Ce que j’entends par là, c’est que je peux faire passer le son de n’importe quelle application de mon PC par les enceintes branchées sur le Raspberry Pi à partir du moment où le-dit PC est connecté sur le même réseau (dans mon cas en wifi via la box de mon fournisseur d’accès).

Dressons rapidement une liste du matériel nécessaire:

  • la box de votre fournisseur d’accès à Internet ou un routeur wifi
  • un Raspberry Pi connecté via un câble réseau à votre box
  • des enceintes connectées au Raspberry Pi via la prise jack
  • un PC connecté en wifi à la box

Les exemples de configuration sont valables pour la distribution Archlinux (ArchlinuxARM pour le Raspberry Pi, Archlinux pour le PC) mais peuvent être adaptés à d’autres distributions.

J’ai exploré plusieurs pistes et j’en suis arrivé à la conclusion que ce qui répondrait le mieux à mes usages est PulseAudio. En effet, PulseAudio intègre un serveur réseau qui me permet de sortir le son de n’importe quelle application, y compris un navigateur où je fais tourner Youtube ou Deezer.

Première étape, installer PulseAudio sur le Raspberry Pi et sur le PC. Ce qui est bien, c’est que c’est la même commande (à exécuter sur chaque machine tout de même ;-) ) :
# pacman -S pulseaudio
On va aussi installer le package alsa-utils car il ajoute deux services systemd qui sauvegarde le volume à l’extinction du PC et qui le restaure au démarrage.
# pacman -S alsa-utils

Côté PC, c’est déjà terminé. Si vous êtes sous Ubuntu, PulseAudio est installé par défaut donc c’est encore plus simple.

Côté Raspberry Pi par contre, il reste un peu de configuration. Bien que ce soit déconseillé, on va faire tourner PulseAudio en mode système car les raisons invoquées ne s’applique pas vraiment à la situation de notre Raspberry Pi.

On commence par créer un groupe « pulse » et un utilisateur « pulse » dans ce groupe.
sudo groupadd --system pulse
sudo useradd --system -G pulse --home /var/run/pulse pulse

Il va falloir aussi éditer le fichier /etc/pulse/system.pa et y ajouter la ligne suivante :
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
Il faut aussi rajouter un symbole dièse devant la ligne suivante pour éviter que PulseAudio se mette en veille:
# load-module module-suspend-on-idle

A ce niveau, vous pouvez lancer PulseAudio sur votre Raspberry Pi avec la commande suivante :
sudo pulseaudio --system -D --disallow-module-loading --disallow-exit

Si comme moi, vous avez branché à la fois le HDMI et la prise jack sur votre Raspberry Pi, le son va sortir par la prise HDMI par défaut. La commande qui suit résout le problème :
sudo amixer cset numid=3 "n"
n=0: auto
n=1: analog
n=2: hdmi

On y est presque, depuis votre PC, commencez par redémarrer votre environnement de bureau qui se chargera de démarrer PulseAudio pour vous et lancer votre application avec la commande :
PULSE_SERVER="adresse_ip_du_pi" "application"
en remplaçant « adresse_ip_du_pi » par l’adresse IP de votre Raspberry Pi et « application » par votre lecteur de musique favori (assurez-vous qu’il n’a pas de session déjà ouverte sinon fermez-là avant de lancer la commande)

Voilà !

Sauf que après reboot du Raspberry Pi, ça ne marche plus. Il faut soit relancer la commande sudo pulseaudio --system -D --disallow-module-loading --disallow-exit ou créer un service systemd qui va le faire pour nous au démarrage.
Créez le fichier /usr/lib/systemd/system/pulseaudio.service

[Unit]
Description=PulseAudio Sound System
After=network.target
 
[Service]
ExecStart=/usr/bin/pulseaudio --system --disallow-module-loading --disallow-exit
Restart=always
 
[Install]
WantedBy=multi-user.target

et activez le avec la commande :
sudo systemctl enable pulseaudio.service

Amélioration :
Bon, ça marche mais le son n’est vraiment pas terrible : il y a des craquements, des sauts, bref ce n’est pas super agréable.
Comme souvent sous Linux, il y a beaucoup de choses paramétrables dans des fichiers de configuration. Celui qui nous intéresse ici est le fichier /etc/pulse/daemon.conf où il faut décommenter et changer les valeurs des lignes suivantes :

resample-method = trivial
default-sample-rate = 48000
default-fragments = 2
default-fragment-size-msec = 10

(configuration trouvé ici)

Réinitialiser la position de l’aiguille du chronomètre sur une montre Festina

J’ai récemment fait changer la pile de ma montre Festina en bijouterie et j’ai eu la désagréable surprise de voir l’aiguille du chronomètre alignée sur 5 secondes. Le chronomètre fonctionnait toujours mais revenait inlassablement sur 5 secondes au lieu de 0 lorsque j’appuyais sur le bouton Reset. J’ai donc cherché sur Internet et j’ai fini par trouver cette page.

Les étapes sont donc :

  1. Arrêter le chronomètre et appuyer sur le bouton Reset (bouton du bas pour moi)
  2. Tirer sur le remontoir comme pour changer l’heure
  3. Appuyer sur le bouton Start/Stop du chronomètre (bouton du haut pour moi), l’aiguille va bouger d’une seconde et s’arrêter
  4. Répéter l’étape 3 jusqu’à ce l’aiguille soit alignée sur 0
  5. Remettre le remontoir en position normale
  6. Savourer en jouant avec les boutons Start/Stop et Reset du chronomètre pour vérifier que tout fonctionne bien ;-)

PS: d’après les commentaires de la page Yahoo, ça semble fonctionner aussi sur les montres de marque Tissot et Fossil.

Clé USB avec partition bootable cachée

Je n’utilise qu’une seule clé USB (Silicon Power de 2Go) qui me suit depuis presque 6 ans maintenant et qui ne m’a pas fait défaut jusqu’à présent. Comme je l’utilise à la fois pour mes installations Linux et pour transférer des données, je voyais toujours les fichiers du média d’installation Linux apparaitre au milieu du reste de mes données. J’ai donc partitionné cette clé USB en 2 : 500Mo pour stocker l’ISO Archlinux et le reste pour… tout le reste. Autre contrainte, la partition de données doit pouvoir être lue sous Windows que j’utilise pour mes activités professionnelles.

Une fois encore, c’est la contrainte de Windows qui va poser le plus de problème : Windows ne sait pas lire plus d’une seule partition sur une clé USB et il ne lit que la 1ère… Conséquence, la partition ISO sera en 2ème position.

Avertissement : avant de continuer, sauvegardez les données qui sont sur votre clé USB.

Grace à GParted, la création des partitions se fait très facilement (assurez-vous toutefois que c’est bien les partitions de la clé USB que vous modifiez). Par soucis de simplicité, j’ai choisi FAT32 pour les 2 partitions. J’ai nommé la deuxième ARCH_201212 car j’y ai mis l’image du mois de décembre 2012. Ne mettez pas tout de suite le flag hidden de la 2ème partition sinon ce sera plus difficile de la monter pour l’étape suivante.

Partitions dans GParted

Ensuite, on extrait l’ISO Archlinux dans la 2ème partition. L’archiveur (Ark pour moi) simplifie la tâche. Ca commence à ressembler à quelque chose mais ça ne bootera toujours pas. Il faut maintenant installer le chargeur d’amorçage (bootloader). Pour l’USB Archlinux, c’est Syslinux qui est utilisé.

C’est le moment de démonter la clé et d’ouvrir le terminal (pensez à adapter les commandes avec les chemins qui vont bien pour pointer vers votre clé USB).
On se met dans le répertoire de boot de la partition contenant Archlinux :
cd /media/ARCH_201212/arch/boot/syslinux
On y installe le bootloader (notez le point à la fin de la commande, il représente le répertoire courant dans lequel on vient de se placer) :
extlinux --install .
On écrit le MBR pour qu’il charge le bootloader :
dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sdc
On indique au système que la partition 2 est bootable :
parted /dev/sdc toggle 2 boot
(Optionel) Par soucis de propreté, on cache la 2ème partition (pour Linux surtout car Windows ne la verra pas de toute façon) :
parted /dev/sdc toggle 2 hidden

Il n’y a plus qu’à rebooter et demander au BIOS de booter sur la clé USB, ou à utiliser la 1ère partition pour y mettre ses données. Jusqu’à présent, je n’ai rencontré qu’un seul problème avec un lecteur DVD de salon récalcitrant qui ne me montre que la partition Linux… Mis à part ça, cette technique fonctionne plutôt bien !

Lien:
https://wiki.archlinux.org/index.php/USB_Installation_Media

Retour d’expérience sur l’installation et l’utilisation d’un SSD

Le Père Noël m’a gâté et je suis maintenant l’heureux détenteur d’un SSD (OCZ Vertex 4 128Go). Il a donc pris place dans mon Asus N53JF et a remplacé le disque dur d’origine (WD 640Go 5400rpm). L’installation physique du disque dur ne pose aucun problème à partir du moment où on sait que les vis du cache sont sous les patins en caoutchouc.

Voulant profiter de l’occasion pour refaire une installation propre, je n’ai pas copié mes partitions, je n’en avais pas la place de toute façon. J’ai donc booté le média d’install Archlinux depuis ma clé USB et j’ai suivi le guide d’installation en choisissant un partitionnement GPT et Syslinux pour le bootloader. J’ai désactiver l’affichage du menu Syslinux pour booter sans délai sur le choix par défaut.

Le disque dur est vraiment l’élément le plus lent du PC et j’avais bon espoir que les performances soient nettement améliorée et je ne suis pas déçu ! C’est radical comme changement ! J’arrive sur l’écran de login KDM en moins de 6 secondes. Après le login, compter 6 secondes de plus pour un bureau KDE complètement chargé. Firefox démarre en moins d’une seconde. C’est juste génial.

L’autre disque:
Dans un premier temps, j’ai acheté un boitier USB pour y installer mon ancien disque dur. J’ai gardé mes partitions en l’état en me disant que je pourrais booter dessus pour retrouver mon ancienne configuration. Erreur !!! Grub ne fonctionne pas et quand on restore le MBR, le démarrage de Windows provoque un BSOD après l’animation de démarrage Windows… Renseignements pris sur Internet, Windows est incapable de booter depuis un disque USB à moins de faire des modifs complexes de fichiers Windows et du registre…
A l’occasion de ces recherches, j’ai vu qu’il existait des casiers qui avaient la forme du lecteur CD et qui sont donc connectés en SATA. Sur le N53JF, il faut prendre un modèle de 12.7mm. Grâce à ce casier, le disque est branché comme un disque dur normal donc plus de problème au démarrage de Windows. De plus, le choix du boot se fait directement au niveau du BIOS en appuyant sur la touche Echap lors du démarrage du PC. Quand je touche à rien, mon Linux démarre sur le SSD. Pas de menu graphique donc pas de ralentissement du boot. Quand j’appuie sur Echap, je peux choisir de booter sur le deuxième disque dur et Windows démarre comme avant. Cette configuration me plait énormément !
J’ai ajouté ma partition Data de mon deuxième disque dans le fstab donc je peux partager comme avant mes fichiers entre Windows et Linux. En prime, je peux stocker mes fichiers sur un disque dur classique et donc réduire les écritures sur le SSD ce qui devrait prolonger sa durée de vie.

Utiliser des DNS alternatifs sous NetworkManager

L’interface graphique permettant la configuration de NetworkManager sous Linux ne permet pas toujours de faire ce qu’on veut. Heureusement, sous Linux, il y a souvent un moyen de parer aux manques des GUI (Graphical User Interface) en passant par de fichiers de conf.

Le fichier qui permet de changer les DNS sous Linux s’appelle /etc/resolv.conf. Le hic, c’est que ce fichier est modifié par NetworkManager à chaque fois qu’il établit une connexion… Nous allons donc créer un autre fichier nommé /etc/resolv.conf.opendns ayant pour contenu :

# OpenDNS servers
nameserver 208.67.222.222
nameserver 208.67.220.220

Mais ça ne suffit pas, il faut maintenant dire à NetworkManager de remplacer resolv.conf par ce fichier une fois la connexion établie. Pour ça, nous allons créer un script dans /etc/NetworkManager/dispatcher.d/ :
sudo nano /etc/NetworkManager/dispatcher.d/opendns
Et y mettre le contenu :

#!/bin/bash
cp -f /etc/resolv.conf.opendns /etc/resolv.conf

Puis le rendre exécutable :
sudo chmod u+x /etc/NetworkManager/dispatcher.d/opendns

On se déconnecte puis on se reconnecte et voilà ! Une visite de www.opendns.com/welcome vous confirmera que c’est bon.

Reprenez le contrôle de votre Android

Le succes d’Android et d’iOS est basé sur leur librairie d’application (App Store ou Google Play). Comme le dit la pub Apple, il y a une application pour tout… Malheureusement, dans ce bas monde où l’argent est roi, ces librairies d’application sont perçues par les développeurs comme des opportunités de faire du fric d’où les applications payantes, les applications gratuites sponsorisées ou les applications indiscrètes dont les développeurs vont s’empresser de revendre tout ce qu’ils ont pu extraire de votre téléphone. Mais le pire de toutes, celles qui vont passer des appels ou envoyer des SMS vers des numéros surtaxés ou encore celle qui offrent des backdoors pour permettre aux gouvernements de vous espionner. Et parmis tout ça, quelques applications honnêtes.

Les librairies applications existaient bien avant l’arrivée d’Android et iOS (n’en déplaise à Apple). En effet, les distributions GNU/Linux ont mis en place depuis longtemps les repositories qui contiennent des milliers de logiciels. En revanche, l’avantage que l’on trouve dans les repositories (si on exclut les non-free), c’est que les logiciels sont open-source. Pas de backdoors, pas de pub, pas d’entourloupes… Vous pouvez le vérifier par vous-même si vous en avez les compétences. Pour retrouver cet esprit sous Android, il existe un Market alternatif F-Droid.

Pour l’installer :
1) Autoriser l’installation d’applications tierces
2) Télécharger depuis votre mobile Android et installer F-Droid

Le choix d’appli y est assez vaste et un peu orienté geek il faut bien l’avouer. Si vous avez besoin d’une application un peu plus standard, F-Droid s’installe en parallèle de Google Play donc pas de soucis de ce côté là.

N.B.: pour iOS, je n’ai pas de produit Apple pour vérifier (c’est contre ma religion…) mais il semblerait qu’il faille passer par un jailbreak et installer Cydia (open-source lui aussi).

A propos de la loi de Fitts

La loi de Fitts est enfin implémenté correctement dans Ubuntu 12.04 ! Cette loi nous explique que le temps que met un utilisateur pour atteindre un élément de l’écran et cliquer dessus dépend de la distance du pixel de départ à la cible et de la taille de la cible. Or dans les coins de l’écran, la taille des éléments peut être considérée comme « infinie » ce qui garantit un temps d’accès court. Dans la version d’Unity embarquée dans Ubuntu 12.04, la croix de fermeture d’une fenêtre apparaît presque dans le coin supérieur gauche de l’écran lorsque la fenêtre est maximisée. Pourtant, les développeurs se sont arrangés pour que le clic sur le pixel du coin ait le même effet que de cliquer sur cette croix.
De même, sur le dock, si vous cliquez au bord de l’écran, même si l’icône ne recouvre pas tout à fait cette zone, l’application va être lancée. Vous pouvez donc « jeter » votre curseur sur le bord gauche de l’écran et il ne vous reste plus qu’à viser en vertical pour choisir votre application dans le dock. C’est aussi valable pour le menu d’une application lorsque celui-ci est affiché dans la barre supérieure : au lieu de devoir viser la petite ligne de texte entre la barre de titre de votre application et la barre d’outils, vous « jetez » votre souris en haut de l’écran et vous n’avez plus qu’à viser horizontalement. J’ai déjà lu plusieurs plaintes à ce sujet car le gens ont l’impression de devoir faire des kilomètres avec leur pointeur, réfléchissez-y, au final c’est un gain de temps.

Coin supérieur droit

Ce principe est appliqué depuis longtemps sous Windows pour la croix de fermeture des applications maximisées et pour le menu « Démarrer ».

A propos de cette loi, il y a un truc que je retrouve de manière récurrente sur les sites web : un gros bouton avec le texte au milieu mais avec uniquement un lien sur le texte de sorte que seul le petit rectangle qui contient le texte est cliquable. C’est débile !

Désactiver le Bluetooth au démarrage d’Ubuntu

Dans Ubuntu, le Bluetooth est plutôt bien intégré avec une icône qui apparaît dans la barre d’état du système. Seulement, le Bluetooth est activé par défaut, sans doute pour les utilisateurs de souris Bluetooth j’imagine. Or je n’ai pas de souris Bluetooth et je me sers du Bluetooth très occasionnellement pour récupérer des fichiers sur mon téléphone. A des fins d’économie d’énergie, je cherchais donc une solution pour le désactiver au démarrage tout en pouvant le réactiver simplement via l’icône si besoin.

La solution : dans le fichier /etc/rc.local (l’ouvrir avec sudo gedit /etc/rc.local) insérer la ligne rfkill block bluetooth juste avant exit 0

Comme prévu, le Bluetooth est désactivé au démarrage mais peut être réactivé via l’icône.

« un » à la place de « in » sur le HTC Legend

Depuis le passage à la version 2.2 d’Android sur mon HTC Legend, lorsque je tape un texte (SMS, note, mail…) et que je veux utiliser le mot « un », le correcteur me propose automatiquement « in ». Le bug disparait lorsque j’utilise le clavier numérique plutôt que le clavier Azerty mais cette solution n’est pas très confortable.

La solution : ajouter « Ub » dans le dictionnaire personnalisé. Ainsi, dès que l’on tape « un », le correcteur propose bien « un ».

Curieux n’est-ce pas ! Ce « Ub » ajouté dans le dictionnaire doit perturber l’algorithme de sélection des propositions mais je ne saurais pas trop expliquer pourquoi. L’essentiel, c’est que ça fonctionne !

Nvidia Optimus sous Ubuntu

L’Asus N53JF est équipé d’un Intel Core i5 qui a une puce graphique intégré de faible performance mais de faible consommation. En parallèle, pour les applications (et surtout les jeux) qui demandent plus de puissance, une puce graphique dédié Nvidia GeForce GT425M est également présente. En utilisation normale, la carte Nvidia est mise en sommeil automatiquement. Lorsqu’une application identifiée comme « gourmande » en puissance graphique est lancée, un service Windows détecte le lancement. Ce service réveille alors la puce Nvidia et bascule tous les calculs graphiques de l’application vers la puce Nvidia. Windows va alors récupérer la sortie graphique et l’afficher sur la région de l’écran où se trouve la fenêtre de l’application. C’est là que Linux pêche… Impossible avec l’architecture graphique Xorg d’intégrer « à chaud » l’affichage d’une région de l’écran provenant d’une source graphique différente. Le développement de la nouvelle architecture graphique Wayland devrait palier à ce problème mais le développement prend du temps.

En attendant, une solution alternative existe, il s’agit de Bumblebee.

« Mais, je croyais que ce n’était pas possible ? »
En fait, il s’agit d’une astuce qui consiste à créer un écran virtuel sur lequel est affichée l’application puis l’image est compressée et transférée sur l’écran réel ensuite. Le gain de performance est honorable mais pas optimal. Ce qui est surtout intéressant, c’est de pouvoir mettre la puce Nvidia en sommeil quand on ne l’utilise pas et ainsi gagner de précieux watts. Malheureusement, l’indicateur près du bouton « Power » ne change pas de couleur comme sous Windows mais l’important est que ça marche.

« Comment on l’installe ? »
On commence par ajouter le ppa à la liste des sources :
sudo add-apt-repository ppa:bumblebee/stable
On met à jour la liste des paquets pour que les paquets du ppa y soient ajoutés :
sudo apt-get update
On installe les nouveaux paquets :
sudo apt-get install bumblebee bumblebee-nvidia
On s’ajoute au groupe des utilisateurs autorisé à utiliser Bumblebee :
sudo usermod -a -G bumblebee $USER

Après un reboot, tout devrait fonctionner ! Même la petite lumière qui redevient bleue :-)

Pour lancer un programme sur la puce graphique Nvidia :
optirun nom_du_programme

Vérifier que ça fonctionne :
firefox "http://webglsamples.googlecode.com/hg/aquarium/aquarium.html"
Relevez la valeur fps en haut à gauche une fois que tout est chargé. Fermez toutes les fenêtres ouvertes de Firefox (pour qu’une nouvelle session soit créée, sinon ça ne fonctionne pas) et exécutez :
optirun firefox "http://webglsamples.googlecode.com/hg/aquarium/aquarium.html"
La valeur fps devrait augmenter et l’affichage être plus fluide.