Main menu:

Site search

Categories

avril 2025
L M M J V S D
 123456
78910111213
14151617181920
21222324252627
282930  

Archive

Les différents sytèmes audio sous Linux

Sous Linux, il existe toute une série de systèmes dédiés au son et il est parfois très difficile de s’y retrouver. Voyons ici brièvement et rapidement les principaux.

Gstreamer

Gstreamer est un framework multimedia. C’est à dire un ensemble de composants permettant de lire, enregister, faire du streaming et de l’édition audio et video. Ce framework est multi-plateforme. Il devient un standard pour les applications audio/vidéo sous Linux surtout grâce à Gnome au départ. Grâce à une architecture de plugins, il est aisé d’ajouter à Gstreamer de nouvelles fonctionnalités. Gstreamer supporte comme backends aussi bien Alsa qu’OSS ou PulseAudio. Il est donc bien adapté pour la création d’applications. Par exemple: Banshee, Amarok, Jokosher, RythmBox, Totem, Elisa, Sound Juicer etc… sont tous basés sur Gstreamer.

Jack

Jack est un serveur de sons permettant l’interconnexion d’applications audio professionnelles avec des périphériques audio et/ou MIDI ou d’autres applications professionnelles. C’est un système temps réel caractérisé par une faible latence. Il supporte Alsa et OSS comme backends mais pas PulseAudio (à ma connaissance!).

Alsa

Advanced Linux Sound Architecture
Implémenté directement comme composant du noyau, c’est lui qui fournit l’interfaçage avec les périphériques audio (cartes sons) et MIDI. Il a été créé pour remplacer OSS qui était devenu obsolète. Pour servir de base à la création d’applications, Alsa dispose d’une API au niveau utilisateur qui est plus facile a utiliser que celle au niveau noyau. Il est aussi compatible avec OSS ce qui veut dire que les applications nécessitant OSS fonctionnent avec Alsa.

PulseAudio

PulseAudio est un serveur de son. Il peut router des sons provenant de plusieurs sources, processus ou périphériques de capture et les envoyer vers d’autres processus, cartes sons ou son propre système de streaming. PulseAudio se sert d’Alsa (on dit qu’il se place on top of Alsa) comme source et aussi d’Alsa pour envoyer les données après traitement vers la carte son. PulseAudio est surtout utilisé dans les applications réseau. Il permet aussi la connexion à un serveur Jack.

Oss

Open Sound System
C’est le système le plus ancien, apparu avant Alsa et que ce dernier remplace. PulseAudio par exemple ne peut fonctionner avec OSS. On en dira pas plus. Beaucoup de choses manquent à OSS et c’est ce qui a nécessité l’écriture d’un système plus complet.

En résumé: Alsa, PulseAudio et OSS peuvent être considérés comme des backends, c’est à dire l’interface bas niveau qui gère le son au niveau des périphériques, PulseAudio étant une sur-couche d’Alsa. On peut se servir de l’API d’Alsa ou de PulseAudio pour écrire des applications mais il est plus intéressant d’utiliser un framework du genre de Gstreamer pour le faire. Gstreamer gérant les codecs de façon transparente par exemple. Si vous voulez créer une application professionnelle qui nécessite de travailler en temps réel, tournez-vous vers Jack.

Analyse réseau avec tcpdump

tcpdump est un outil d’analyse des paquets transitant sur le réseau. Ses possibilités sont très étendues et en font un outil de base pour l’analyse permettant de résoudre les problèmes réseau et de sécurité. Il peut aussi être utile simplement parce que vous êtes intéressé d’examiner ce qui transite sur votre réseau. On verra aussi qu’il est possible de sauvegarder les paquets filtrés par tcpdump pour les relire sur une machine équipée de Wireshark. L’avantage est évidemment de pouvoir profiter de la lisibilité que donne une application graphique.

On peut passer à tcpdump un certain nombre d’options et des expressions booléennes. Les options agissent sur la façon dont seront représentés les paquets une fois que ceux-ci auront été capturés. Les expressions permettent de ne capturer que les paquets qui nous intéressent. Ces expressions peuvent être combinées au moyen d’opérateur booléens (and, or,…) pour former un filtre qui ne laissera passer que les paquets désirés.

Avant de pouvoir utiliser tcpdump, il faut l’installer:

$ sudo aptitude install tcpdump

et il faut le lancer avec des droits d’administrations pour pouvoir avoir accès aux interfaces réseau.

Les options

  • -i ethx spécifie sur quelle interface se fait la capture
  • -X affiche le contenu du paquet en hexa et ascii
  • -n pas de résolution des noms, on affiche l’adresse IP
  • -nn pas de résolution des noms ni des ports
  • -s0 indique qu’on capture le paquet entier
  • -cx on capture seulement x paquets
  • -v, -vv, -vvv augmente le nombre d’infos sur les paquets qui sont affichés
  • -w file écrit les paquets raw dans un fichier plutôt que d’être traités et affichés

exemple:

$ sudo tcpdump -Xvvn

rafraîchissez la page dans votre navigateur et observez.

Les expressions

Les expressions associées aux opérations booléennes permettent d’effectuer un puissant filtrage sur les paquets et en fin de compte de n’afficher que ce qui vous intéresse.

  • host permet de spécifier une adresse IP ou un nom d’hôte:
    ex: tcpdump host 192.168.8.1
  • src, dst spécifie une adresse IP source ou destination
    ex: tcpdump dst 192.168.8.1
  • net spécifie un réseau (notation CIDR)
    ex: tcpdump net 192.168.8.0/24
  • port spécifie un port sur lequel la capture se fera (peut être combiné avec src ou dst)
    ex: tcpdump port 80
    tcpdump src port 80
  • proto spécifie le protocole utilisé (tcp, udp, and icmp)
    ex: tcpdump icmp

Les opérateurs logiques

  • and (ou &&)
  • or (ou ||)
  • not (ou !)

Pour les opérations complexes avec des parenthèses, les options doivent être encadrées par des apostrophes.

exemples:

$ sudo tcpdump -Xvvnn src 192.168.8.10 and dst 192.168.8.1
$ sudo tcpdump 'src 192.168.8.10 and (dst port 110 or 25)'

Filtrage suivant les flags TCP

Il est possible aussi de filtrer en fonction des flags contenus dans l’entête TCP. Ces flags sont:

  • SYN-ACK ‘tcp[13] = 18’
  • FIN ‘tcp[13] & 1 != 0’
  • SYN ‘tcp[13] & 2 != 0’
  • RST ‘tcp[13] & 4 != 0’
  • PSH ‘tcp[13] & 8 != 0’
  • ACK ‘tcp[13] & 16 != 0’
  • URG ‘tcp[13] & 32 != 0’

Ceci signifie qu’on prend le 13ième octet dans l’entête TCP (tcp[13]). Chaque bit de cet octet représente un flag. On effectue ensuite une opération logique pour obtenir la valeur de ce bit et on le test par rapport à 0.

exemple:

$ sudo tcpdump 'tcp[13] & 2 != 0'

Exploitation des paquets avec Wireshark

Il est possible d’enregistrer les paquets capturés dans un fichier et ainsi de les analyser plus tard, sur une autre machine éventuellement, avec Wireshark et de bénéficier des avantages d’une représentation graphique des paquets. On utilisera cette méthode, par exemple, lorsque l’on doit analyser les paquets arrivant sur un serveur ne disposant pas d’interface graphique permettant de faire tourner Wireshark.

L’enregistrement des paquets se fait en utilisant l’option -w qui dit à tcpdump d’enregister les paquets bruts dans un fichier. Par exemple:

$ sudo tcpdump -Xvvnns0 port 80 -w dump.cap

Ensuite il ne reste plus qu’à analyser le fichier dump.cap dans Wireshark en le lançant avec le nom de fichier en argument:

$ wireshark -r dump.cap

Note: on peut évidemment aussi ouvrir le fichier en utilisant l’interface graphique de Wireshark mais comme tout le reste se fait dans un terminal, pourquoi ne pas lancer Wireshark directement depuis le terminal? Non?

Dropbox, UbuntuOne ou Mandriva Click’n Backup

Sous ces trois noms bizarres se cachent en fait des solutions online de sauvegarde de données. C’est à dire que vous disposez quelque part sur le Net d’une zone de stockage d’une certaine taille pour un certain prix. Cette zone de stockage peut servir aussi à synchroniser des données entre plusieurs ordinateurs ou à partager des fichiers entre plusieurs utilisateurs. Toutes ces solutions nécessitent l’installation d’un programme sur le ou les ordinateurs à synchroniser.

On a beaucoup parlé d’UbuntuOne, certains critiquant que Canonical sorte un produit sous le nom d’Ubuntu, produit dont tout n’est pas open source. Disons simplement que pour l’instant, UbuntuOne est en version bêta, limitée aux PC équipés d’Ubuntu 9.04 et que les prix proposés par Canonical sont de loin plus élevé que les deux autres (Dropbox et Click’n Backup). Attendons de voir la version finale pour juger; on ne peut tester UbuntuOne que sur invitation pour l’instant. J’en ai demandé une mais je ne l’ai toujours pas reçue. Notez également qu’UbuntuOne propose 2GB gratuitement et 10GB pour $10.

La solution Click’n Backup de Mandriva est limitée, comme pour UbuntuOne, aux PC équipés de mandriva Linux 2008 ou 2009. Il n’y a par contre pas d’offre gratuite.

Dropbox est le plus connu. Il est utilisable sous Linux, Windows ou Mac OS X. Il offre comme UbuntuOne une zone de 2 GB gratuitement et 50GB pour $10. Ca en fait l’offre financièrement la plus intéressante du marché. Mais il n’y a rien d’open source dans Dropbox. Il s’installe comme un répertoire visible dans Nautilus dont les fichiers sont automatiquement synchronisés avec ceux contenus dans votre zone de stockage. L’emblème représentée par un petit v dans un cercle vert indique que le fichier est synchronisé avec la zone de sauvegarde. Tout ceci se fait de manière transparente. Un dossier Photo est aussi créé permettant l’affichage d’une galerie via l’interface web de Dropbox. Il est possible aussi de partager des fichiers avec d’autres utilisateurs de Dropbox.

Si vous choisissez d’installer Dropbox sur votre Ubuntu, voici comment procéder. Il faut tout d’abord vous enregister auprès de Dropbox et choisir le plan tarifaire. Dans mon cas, j’ai choisi l’offre gratuite de 2GB. Rendez-vous sur ce site pour vous enregistrer.
Ensuite, downloadez et installez le paquet Dropbox destiné à Ubuntu 9.04 et contenant les extensions de Nautilus sur http://www.getdropbox.com/downloading ou en ligne de commande:

$ wget -c http://www.getdropbox.com/download?dl=packages/nautilus-dropbox_0.6.1_i386_ubuntu_9.04.deb
$ sudo dpkg -i nautilus-dropbox_0.6.1_i386_ubuntu_9.04.deb

Ensuite, dans un terminal, tapez la commande suivante pour installer le daemon.

$ dropbox start -i
Starting Dropbox...Done!

A ce stade, vous devez trouver une icône Dropbox dans le menu Applications/Internet. Si vous cliquez dessus, une icône apparaîtra dans la zone de notification du tableau de bord. Un clic sur cette icône ouvrira le dossier ~/Dropbox contenant vos fichiers synchronisés. Il n’y a rien de plus à faire pour installer Dropbox.
Si vous vous connecter sur l’interface web de Dropbox en utilisant votre login et mot de passe, vous voyez vos fichiers, vos galeries photos, les fichiers que vous partagez mais aussi et là, c’est très intéressant, les fichiers que vous avez supprimés. Vous avez donc la possibilité de récupérer un fichier que vous auriez effacé par mégarde.

Pour désinstaller Dropbox, il faut supprimer le paquet et les deux répertoires cachés dans votre home:

$ sudo dpkg -P nautilus-dropbox
$ rm -Rf  ~/.dropbox
$ rm -Rf ~/.dropbox-dist

Revenir à l’ancien système de notification

Le nouveau système de notification fait toujours beaucoup parler de lui. Tout le monde ne se sent pas à l’aise avec cette couleur foncée.
Il faut savoir que le système de notification est un des éléments de Gnome et que les développeurs d’Ubuntu ont dû toucher à cet élément pour pouvoir modifier le thème du système de notification. Mais dans leur grande bonté, ils ont prévu un paquet qui permet de revenir à la version classique de Gnome. Pour cela, il suffit d’installer le paquet gnome-stracciatella-session:

$ sudo aptitude install gnome-stracciatella-session

Une fois ce paquet installé, il faut se déconnecter et dans l’écran GDM de connexion, choisir dans le menu Options (en bas à gauche) Sélectionner une session…. Dans la liste qui apparaît, choisissez maintenant la session GNOME (without Ubuntu specific components) puis reconnectez-vous.

Customiser le liveCD d’Ubuntu

En ce qui me concerne, j’utilise les liveCD pour installer Ubuntu, pour partitionner un disque, créer ou recharger une image disque, récupérer des fichiers effacés par erreurs… Autrement dit de la maintenance principalement. Malheureusement, sur le liveCD d’Ubuntu, il n’y a aucun des outils dont je me sers le plus. Pas de PartImage, de PhotoRec…
Il existe un certain nombre de LiveCD spécialement prévus pour cela (Ubuntu Rescue Remix par exemple). Alors pourquoi vouloir créer le sien? Pour le plaisir de le faire soi-même et d’apprendre quelque chose. Tout simplement.
La technique que j’ai utilisée est basée principalement sur l’article correspondant de la documentation du site Ubuntu-fr mais adapté à mes besoins et à Jaunty.

La première chose à faire est de télécharger l’image iso d’Ubuntu et de la sauvegarder dans le répertoire ~/tmp (par exemple):

$ wget -c http://ftp.belnet.be/mirror/ubuntu.com/releases/jaunty/ubuntu-9.04-desktop-i386.iso

Ensuite, on crée quelques répertoires dont nous aurons besoin et on installe squashfs qui est un système de fichiers en lecture seule souvent utilisé avec les liveCd :

$ mkdir ~/tmp/liveCD ~/tmp/customCD ~/tmp/customCD/iso ~/tmp/customCD/squashfs
$ sudo aptitude install squashfs-tools

On monte l’image dans ~/tmp/liveCD et on copie le contenu du liveCD dans ~/tmp/customCD/iso:

$ sudo mount -o loop ~/tmp/ubuntu-9.04-desktop-i386.iso ~/tmp/liveCD
$ sudo cp -av ~/tmp/liveCD/. ~/tmp/customCD/iso
$ sudo umount ~/tmp/liveCD
 

De tous les fichiers présents sur le liveCD, on peut sans problème se débarrasser des fichiers en rapport avec l’installation depuis Windows. Ce n’est de toute façon pas notre but et cela fera un peu de place pour les paquets que nous allons rajouter:

  
$ cd ~/tmp/customCD/iso
$ sudo rm -r pics autorun.inf wubi.exe

Nous allons maintenent copier le système de fichier du liveCD sur le disque dur. Pour cela, il faut que le module squashfs soit activé préalablement:

$ sudo modprobe squashfs
$ sudo mount -t squashfs -o loop ~/tmp/customCD/iso/casper/filesystem.squashfs ~/tmp/liveCD

Comme je l’ai dit plus haut, sqaushfs est un système de fichiers dans lequel on ne peut pas écrire. On va donc le copier dans ~/tmp/customCD/squashfs de façon à pouvoir le modifier:

$ sudo cp -a ~/tmp/liveCD ~/tmp/customCD/squashfs
$ sudo umount ~/tmp/liveCD

Et c’est ici que les choses deviennent sérieuses. Pour pouvoir faire les modifications que l’ont veut dans le système de fichiers du liveCD, on va passer en chroot. Cela signifie que l’on va changer le répertoire racine (root) pour qu’il corresponde à notre système de fichiers du liveCD.
Il faut aussi monter les répertoires /proc et /sys. On va copier aussi les configurations réseau du sytème hôte afin que celui-ci fonctionne dans le chroot. On pourra ainsi télécharger de nouveaux paquets à installer:

$ sudo cp /etc/resolv.conf ~/tmp/customCD/squashfs/etc/resolv.conf
$ sudo cp /etc/hosts ~/tmp/customCD/squashfs/etc/hosts
$ sudo cp /etc/apt/sources.list ~/tmp/customCD/squashfs/etc/apt/sources.list
$ sudo chroot ~/tmp/customCD/squashfs
# sudo mount -t proc none /proc/
# sudo mount -t sysfs none /sys/

Une fois ces commandes introduites, on se retrouve en root et l’accès est restreint à notre système de fichiers chrooté.
La première chose à faire est de mettre à jour la liste des paquets et de mettre à jour le sytème:

# aptitude update
# aptitude upgrade

On va maintenant supprimer les paquets dont on n’a pas besoin, à commencer par les paquets contenant les différents langages. Affichons d’abord la liste des paquets langages:

# dpkg-query -W --showformat='${Package}\n' | grep language-pack
  language-pack-bn
  language-pack-bn-base
  language-pack-de
  language-pack-de-base
  language-pack-en
  language-pack-en-base
  language-pack-es
  language-pack-es-base
  language-pack-fr
  language-pack-fr-base
  language-pack-gnome-bn
  language-pack-gnome-bn-base
  language-pack-gnome-de
  language-pack-gnome-de-base
  language-pack-gnome-en
  language-pack-gnome-en-base
  language-pack-gnome-es
  language-pack-gnome-es-base
  language-pack-gnome-fr
  language-pack-gnome-fr-base
  language-pack-gnome-pt
  language-pack-gnome-pt-base
  language-pack-gnome-xh-base
  language-pack-pt
  language-pack-pt-base
  language-pack-xh
  language-pack-xh-base

De toutes ces langues, on ne garde que l’anglais et bien sûr le français:

# aptitude purge language-pack-bn language-pack-bn-base language-pack-de language-pack-de-base language-pack-es language-pack-es-base language-pack-gnome-bn language-pack-gnome-bn-base language-pack-gnome-de language-pack-gnome-de-base language-pack-gnome-es language-pack-gnome-es-base language-pack-gnome-pt language-pack-gnome-pt-base language-pack-gnome-xh language-pack-gnome-xh-base

Pour pouvoir ajouter tous les paquets que l’on veut, il faut cependant encore faire de la place.
Supprimons OpenOffice qui n’a rien à faire sur un liveCD de même que les jeux Gnome, F-Spot, tomboy, gnome-orca,RhythmBox et Gimp.

# aptitude purge openoffice.org-base-core openoffice.org-calc openoffice.org-common openoffice.org-core openoffice.org-draw openoffice.org-emailmerge openoffice.org-gnome openoffice.org-gtk openoffice.org-help-en-gb openoffice.org-help-en-us openoffice.org-hyphenation openoffice.org-hyphenation-en-us openoffice.org-impress openoffice.org-l10n-common openoffice.org-l10n-en-gb openoffice.org-l10n-en-za openoffice.org-math openoffice.org-style-human openoffice.org-thesaurus-en-au openoffice.org-thesaurus-en-us openoffice.org-writer
      
# aptitude purge gnome-games gnome-orca tomboy f-spot rhythmbox gimp

Maintenant que nous avons libéré de la place, nous pouvons installer les paquets et applications que nous voulons:

# aptitude install gftp partimage gparted gtkterm wireshark thunderbird ghex gnumeric encfs ccrypt vlc samba samba-common smbclient nautilus-share nautilus-open-terminal nautilus-gksu 
# aptitude clean

Notre système de fichiers dans le liveCD ayant été mis à jour, on peut sortir du chroot.

# rm -rf /tmp/*
# rm -f /etc/hosts /etc/resolv.conf
# rm -f /etc/hosts
# umount /proc
# umount /sys
# exit

Tant qu’on y est, on peut modifier le langage par défaut de façon à ce que le liveCD démarre en français:

$ echo "fr" | sudo tee ~/tmp/customCD/iso/isolinux/lang

Créons maintenant la nouvelle image iso.
Effacement de l’ancien squashfs:

$ sudo rm ~/tmp/customCD/iso/casper/filesystem.squashfs

Création du nouveau système de fichier:

$ sudo chmod a+w ~/tmp/customCD/iso/casper/filesystem.manifest
$ sudo chroot ~/tmp/customCD/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > ~/tmp/customCD/iso/casper/filesystem.manifest
$ sudo chmod go-w ~/tmp/customCD/iso/casper/filesystem.manifest
$ sudo chmod a+w ~/tmp/customCD/iso/casper/filesystem.manifest-desktop
$ sudo chroot ~/tmp/customCD/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > ~/tmp/customCD/iso/casper/filesystem.manifest-desktop
$ sudo chmod go-w ~/tmp/customCD/iso/casper/filesystem.manifest-desktop

On recrée le filesystem squashfs. Attention cette opération prend du temps:

$ sudo rm -f ~/tmp/customCD/iso/casper/filesystem.squashfs
$ sudo mksquashfs ~/tmp/customCD/squashfs ~/tmp/customCD/iso/casper/filesystem.squashfs

Mise à jour du fichier md5sum.txt:

$ sudo rm ~/tmp/customCD/iso/md5sum.txt
$ cd ~/tmp/customCD/iso
$ sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt"

Création du nouveau fichier iso. L’endroit d’où est lancé le programme mkisofs est important; veillons donc à nous placer dans le bon répertoire:

$ cd ..
$ sudo mkisofs -r -V "Custom Ubuntu 9.04" -b isolinux/isolinux.bin -c isolinux/boot.cat -cache-inodes -J -l -no-emul-boot -boot-load-size 4 -boot-info-table -o custom-ubuntu-9.04-i386.iso iso

Voilà, la nouvelle image est prête. Il ne reste plus qu’à la graver sur un CD et à la tester en vrai. Si quelque chose manquait, vous pouvez modifier le contenu du liveCD en reprennant les opérations depuis le passage en chroot.

Comportement du gestionnaire de mise à jour

Sous Intrepid, le gestionnaire de mise à jour affichait une petite icône orange dans la barre de notification pour nous avertir de la présence de nouvelles mises à jour.
Dans la 9.04 (Jaunty), ce comportement a été modifié. Par défaut, l’icône ne s’affiche plus et il n’y a plus de bulle qui nous indique que des mises à jour sont disponibles. Par contre, la fenêtre du gestionnaire s’ouvre toute seule sur le bureau.

Evidemment, cette fenêtre s’ouvre toujours au mauvais moment, au mauvais endroit. Je ne comprends pas pourquoi le comportement par défaut a changé. La nouvelle manière est intrusive et dérangeante. Quel imbécile chez Canonical a pu avoir cette idée saugrenue? Pourquoi toujours vouloir imposer les choses aux gens?
Heureusement, il y a moyen via l’Editeur de configuration de modifier ce comportement. Il suffit de décocher l’option auto_launch de la clé /apps/update-notifier. Vous pouvez aussi le faire depuis la ligne de commande en tapant dans un terminal:

$ gconftool -s --type bool /apps/update-notifier/auto_launch false

Remplacez false par true si vous voulez pour une raison qui m’échapperait, revenir à ce comportement aberrant.