Configurer un lecteur multimédia dédié
Auteur : Olivier BOYER - oboyer () ajoute ! org
Mots clés
FreeBSD, clé usb, lecture seule, multimédia player
Introduction
Ce document présente comment configurer un client FreeBSD 6.3 Release en lecteur multimédia (Audio, DVD, Divx, Photos) dédié. Pour une plus grande facilité d'utilisation, ce lecteur est installé sur une clé USB montée en lecture seule.
Présentation de la maquette
- Un ordinateur compatible PC, architecture i386, dotée d'un port USB (version 2 recommandée).
- Une clé USB (au moins 1Go).
Note
Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.
Pré-requis
- Un BIOS de carte mère sur la machine capable de démarrer sur un périphérique USB.
- Une clé USB (au moins 1Go).
- La configuration décrite dans le document Installer FreeBSD sur une clé usb avec une racine en lecture seule fonctionnelle.
- La configuration réseau du système opérationnelle.
Installer et configurer le système
L'installation et la configuration du système FreeBSD sur la clé USB avec une racine en lecture seule est décrite dans ce document.
Transformer le système en lecteur multimédia
Toutes les commandes présentées dans cette section doivent s'exécuter sur un système dont :
- la racine
/est en écriture, - la partition
/varn'est plus montée en mémoire.
Suivez les instructions décrites dans le chapitre Ajouter un package du document Installer FreeBSD sur une clé usb avec une racine en lecture seule.
Créer un utilisateur dédié
Dans cette maquette, le système va servir de “media center”. Pour créer un utilisateur dédié (ici player:users) au fonctionnement des applications multimédia, exécutez les commandes suivantes :
- Créer le groupe
users:
# pw groupadd users -g 10
- Créer l'utilisateur
player:
# pw useradd player -m -u 1000 -g 10 -c "Player User" -d /home/player -s /bin/bash
Puis saisissez un mot de passe pour cet utilisateur :
# passwd player
Installer les packages
La liste suivante de packages permet de répondre à un certains nombre de besoins. Sans doute votre environnement différera…
# for i pkg in \
bzip2 \
unzip \
bash \
sudo \
urwfonts-ttf \
xscreensaver \
blackbox \
bbkeys \
rox-filer \
rhythmbox \
gstreamer-plugins-musepack \
xine \
gqview \
firefox \
leafpad \
eject \
gnomebaker \
imwheel \
xbindkeys \
pciutils \
xmms \
xmms-flac \
xmms-wma
do
pkg_add -r $pkg
done
Puis, créez le lien symbolique suivant :
# cd /bin # ln -s ../usr/local/bin/bash bash
Configurer la carte son
Avant de commencer, vous devez connaître le modèle de carte son que vous avez, la puce qu'elle utilise, et si c'est une carte PCI ou ISA. Consultez la liste des périphériques audio supportés (http://www.freebsd.org/releases/6.2R/hardware-i386.html#SOUND) pour vérifier si votre carte est fonctionnelle sous FreeBSD. Ce document indique également quel pilote utiliser pour l'utilisation de votre carte son.
Par exemple, pour une carte son Intel ICH6 (compatible AC'97), il faut utiliser le pilote snd_ich(4).
Pour utiliser votre carte son, vous devez charger le pilote de périphérique approprié. Cela peut être fait de deux façons :
- Manuellement, avec la commande
kldload(8):
# kldload snd_ich
Cependant, il faut saisir cette commande à chaque démarrage du système. Peu pratique dans le cadre d'utilisation de ce système.
- Automatiquement, en ajoutant la ligne appropriée dans le fichier
/boot/loader.conf:
#load kernel modules snd_ich_load="YES" # Sound module (AC'97)
Plus adapté à un “media center”.
Configurer la carte graphique
Pour configurer le serveur X, démarrez le client, logez-vous en tant qu'utilisateur root, et exécutez les commandes suivantes :
- Créez un squelette de configuration du serveur X :
# Xorg -configure
- Testez la configuration
# X -config /root/xorg.conf.new
- Si besoin, modifiez la configuration, puis installez le fichier de configuration à un emplacement commun où Xorg(1) pourra le trouver :
# cp /root/xorg/conf.new /etc/X11/xorg.conf
Démarrer automatiquement l'interface graphique
Ce hack n'est pas très “propre”. Il existe des gestionnaires de session X (comme gdm ou kdm) qui autorisent la connexion automatique d'un utilisateur. Mais ces outils exigent de nombreuses dépendances, et consomment des ressources inutiles dans notre cas. L'idée principale, ici, est de garder un système assez léger. Pour se passer d'un gestionnaire de session X, procédez comme suit.
Créer le fichier /usr/local/etc/rc.d/startx
Créez comme suit le fichier /usr/local/etc/rc.d/startx.
Puis fixez ses permissions :
# chmod 555 /usr/local/etc/rc.d/startx
Modifier le fichier /etc/rc
La solution retenue dans cette maquette, consiste à lance l'environnement graphique à la fin de la procédure de démarrage. Pour ce faire, le fichier /etc/rc est modifié.
Voici le fichier rc.patch :
--- /etc/rc.orig Fri Oct 19 18:50:58 2007 +++ /etc/rc Fri Oct 19 18:50:43 2007 @@ -119,4 +119,5 @@ echo '' date +/usr/local/etc/rc.d/startx start exit 0
Il ajoute en avant dernière ligne du fichier /etc/rc la ligne /usr/local/etc/rc.d/startx start.
Pour appliquer ce patch, copiez le fichier rc.patch dans le répertoire /tmp du système, puis exécutez les commandes suivantes :
# cd /etc # patch -p0 < /tmp/rc.patch Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- /etc/rc.orig Fri Oct 19 18:50:58 2007 |+++ /etc/rc Fri Oct 19 18:50:43 2007 -------------------------- Patching file /etc/rc using Plan A... Hunk #1 succeeded at 119. done
La modification est opérée.
Configurer le volume par défaut
Créez comme suit le fichier /usr/local/etc/rc.d/mixer.sh.
Puis fixez ses permissions :
# chmod 555 /usr/local/etc/rc.d/mixer.sh
Autoriser les utilisateurs à monter les périphériques amovibles
L'utilisateur dédié player doit pouvoir monter les différents périphériques amovibles de façon transparente, à la souris.
UN CDROM / DVD
vfs.usermount
Le noyau doit être configuré pour permettre aux utilisateurs non privilégiés de monter des systèmes de fichiers. Pour ce faire, positionnez la variable sysctl(8) vfs.usermount à 1 comme suit :
# sysctl -w vfs.usermount=1
Pour que la modification soit permanente, modifiez le fichier /etc/sysctl.conf :
# echo "vfs.usermount=1" >> /etc/sysctl.conf
Fixer les permissions du périphérique
L'utilisateur, ou le groupe dont il est membre, doit posséder les permissions de lecture et d'écriture sur le fichier de périphérique.
Fixer comme suit les permissions sur le lecteur de CDROM:
# chmod 666 /dev/acd0
Fixer les permissions au démarrage
A partir de la version 5 de FreeBSD, le fichier /etc/devfs.conf permet de sauver ces modifications à travers les redémarrages du système.
Ajoutez les lignes suivantes au fichier /etc/devfs.conf :
link acd0 cdrom link acd0 dvd link acd0 rdvd own /dev/acd0 root:operator perm /dev/acd0 0666
Fixer les permissions du point de montage
Le point de montage doit appartenir à l'utilisateur qui monte le périphérique :
# chown player /cdrom
Modifier le fichier /etc/fstab
Enfin, pour faciliter l'utilisation du périphérique, ajoutez la ligne suivante au fichier /etc/fstab :
# Device Mountpoint FStype Options Dump Pass# /dev/acd0 /cdrom cd9660 ro,noauto,nosuid,noexec 0 0
Monter le périphérique
Pour monter le CDROM, en tant qu'utilisateur player, exécutez la commande suivante :
$ mount /cdrom
Un périphérique USB
Puisqu'un périphérique USB est détecté comme un périphérique SCSI, la commande camcontrol(8) peut être utilisée pour lister les périphériques détectés par le système. Par exemple :
# camcontrol devlist <Kingston DataTraveler 2.0 1.00> at scbus0 target 0 lun 0 (pass0,da0) <ST980821 0A 0811> at scbus1 target 0 lun 0 (da1,pass1)
Pour permettre à un utilisateur non privilégié de monter un périphérique USB, voici les étapes à réaliser.
Modifier le fichier /etc/devfs.rules
Pour rendre un périphérique USB montable par un utilisateur normal, un certain nombre de paramétrages sont nécessaires. Tout d'abord, les entrées de périphériques qui sont créées lors de la connexion d'un périphérique USB (et supprimées lors de la déconnexion) doivent être accessibles à l'utilisateur (ou à son groupe). Ensuite, quand ces entrées de périphériques sont créées, l'utilisateur (ou son groupe) doit pouvoir y accéder en lecture et en écriture. Pour cela, les lignes suivantes sont ajoutées à /etc/devfs.rules :
#/etc/devfs.rules #The devfs.rules file provides an easy way to create and apply devfs(8) #rules, even for devices that are not available at boot. #For devices available at boot, see devfs.conf(5). # usb drives [localrules=1] add path 'da[1-3]*' mode 0666 group operator #EOF
Note: Le système possède déjà un périphérique SCSI (la clé USB système, da0), on modifie donc les permissions pour les autres périphériques USB.
Modifier le fichier /etc/rc.conf
Pour que le fichier /etc/devfs.rules précédent soit lu lors du démarrage du service devfs(8), vous devez activer le support des règles devfs(8) dans le fichier /etc/rc.conf.
Ajoutez la ligne suivante au fichier /etc/devfs.conf :
devfs_system_ruleset="localrules"
vfs.usermount
Le noyau doit être configuré pour permettre aux utilisateurs non privilégiés de monter des systèmes de fichiers. Pour ce faire, positionnez la variable sysctl(8) vfs.usermount à 1 comme suit :
# sysctl -w vfs.usermount=1
Pour que la modification soit permanente, modifiez le fichier /etc/sysctl.conf :
# echo "vfs.usermount=1" >> /etc/sysctl.conf
Modifier le fichier /etc/fstab
Enfin, pour faciliter l'utilisation du périphérique, ajoutez la ligne suivante au fichier /etc/fstab :
/dev/da1s1 /usb msdosfs rw,noauto,longnames 0 0
Fixer les permissions du point de montage
Le point de montage doit appartenir à l'utilisateur qui monte le périphérique :
# mkdir /usb # chown player /usb
Monter le périphérique
Pour monter le premier périphérique USB, en tant qu'utilisateur player, exécutez la commande suivante :
$ mount /usb
Ajouter des fontes graphiques
# pkg_add -r urwfonts-ttf
And likewise with the freefont or other collections. To have the X server detect these fonts, add an appropriate line to the X server configuration file (/etc/X11/xorg.conf), which reads (in section Files):
FontPath "/usr/X11R6/lib/X11/fonts/urwfonts-ttf"
And restart your X server.