lightdm.conf – fichier de référence

Fichier référence de configuration de LightDM  pour le multiseat (cas d’un seul fichier xorg.conf) :

Version détaillée :

[LightDM]   # Options générales pour LighDM
minimum-display-number=0 # Nombre minimal d'écrans à utiliser pour le serveur X.
minimum-vt=7 # Première console virtuelle à utiliser, on utilisera celle-ci et celles qui suivent. On peut ne omettre cette option ou indiquer une autre console de départ.

[SeatDefaults] # Options communes à tous les postes (équivalent au ServerFlag de xorg.conf)
greeter-session=unity-greeter   # Écran d'accueil à utiliser, on trouve la liste des valeurs possibles ici : /usr/share/xgreeters/ et on peut en installer d'autres. Ici, écran d'accueil par défaut d'Ubuntu 12.04 LTS
user-session=gnome-session-fallback    # Environnement de bureau (Gnome, Unity, etc.), on trouve la liste des valeurs possibles ici : /usr/share/xsessions/ et on peut en installer d'autres. Ici, bureau proche de Gnome 2
exit-on-failure=true   # Indique au démon de LightDM de quitter en cas d'erreur. Ainsi, si un serveur X ou un écran d'accueil plante, LightDM stoppe toute l'interface graphique et on se retrouve en mode console.

[Seat:0] # Options du premier poste, on peut utiliser les même que dans SeatDefaults, les valeurs ci-dessous seront prioritaires.
xserver-command=/usr/bin/X   # LightDM indique déja le bon affichage par défaut dans la commande, donc on ne met que la commande de base.
xserver-layout=Seat0   # Indique au serveur X quel est le matériel à utiliser (ici il y a un unique fichier donc on indique le ServerLayout voulu).

[Seat:1]
xserver-command=/usr/bin/X -sharevts   # On doit obligatoirement rajouter l'otpion -sharevts sur tous les postes excepté le premier, aucune raison logique trouvée.
xserver-layout=Seat1

Version utilisable :

[LightDM]
minimum-display-number=0
minimum-vt=7
[SeatDefaults]
greeter-session=unity-greeter
user-session=gnome-session-fallback
exit-on-failure=true
[Seat:0]
xserver-command=/usr/bin/X
xserver-layout=Seat0
[Seat:1]
xserver-command=/usr/bin/X -sharevts
xserver-layout=Seat1

Note : si on utilise plusieurs fichiers de configuration du serveur X (un par poste par exemple), il faut remplacer la ligne « xserver-layout=layout_utilisé » par « xserver-config=fichier_utilisé ».

Publicités

Multiseat – première vidéo d’une configuration fonctionnelle

Après de nombreuses heures de travail, on a réussi notre premier multiseat. Il n’est pas parfait et pas encore totalement stable (soucis avec lightdm au démarrage de l’ordinateur) mais il fonctionne très bien. Les limitations d’un multiseat statique sont connues et devront être corrigées ultérieurement.
La vidéo est de très mauvaise qualité, honnêtement. On a filmé avec ce que nous avions sous la main, c’est à dire un samsung wave 575 donc pas le top et filmer en même temps qu’écrire au clavier est difficile.
Ordinateur utilisé : Dell XPS 720 avec :
– Intel core 2 duo ;
– 4Go Ram ;
– 2 HDD 256Go Western Digital ;
– 2 Nvidia 8800 GT 512Mo (non connectées en SLI cela va de soit).

 

 

Pour accompagner, voici deux photos (toujours de qualité médiocre) du multiseat :

Branchement à l’ordinateur.
multiseat_branchement_pc

Multiseat.
multiseat_face

Galerie d’images

Durant le projet, quelques bizarreries et autres ont été trouvées, petit moment souvenir.

Quand le bureau Gnome perd la tête…

bureau_gnome_fou

Écran de connexion de Lightdm, si si je vous jure… Merci à la carte Trident Microsystem pour cette œuvre d’art !

Carte trident sans xorg.conf - 1

Un peu petit non ?

comparaison_gabarit_ordinateurs

Brave bête.

interieur_pc_dell_1

Arrière du DELL XPS prêté par l’UPPA.

arrière_pc_dell

Avant du DELL XPS prêté par l’UPPA.

avant_pc_dell

Bleu et vert, en mode pumbASS.

pc_dell_2

Et puis il y a tout ce que l’on ne peut pas prendre en photo, les nombreux messages d’erreur d’Ubuntu nous disant que l’application que l’on utilise aurait planté, la joie de corrompre la session graphique d’un utilisateur en lançant un joli « sudo startx — :1 » dans le terminal (méchant sudo ! ), le fait que l’on bidouille comme on peut pour faire quelque chose qui existe depuis les début d’Unix…
Que du bonheur !  ; )

xorg.conf – fichier de référence

Les nombreuses heures de travail sur le projet ont mené à la création d’un fichier de configuration du serveur X général et tout-terrain, qui peut servir de base pour tout multiseat.

# Configuration de référence du serveur X pour le multiseat. Fichier générique, mais configuré pour un poste précis. Les zones à modifées sont indiquées par un commentaire non indenté.
# Note : les entêtes des parties de chaque seat ont été modifiées pour la machine en cours. Elles seront adaptées aux différentes contextes. Le script générateur donnera la possibilité à l'utilisateur de mettre un petit texte pour se souvenir de quel matériel traite le seat.

#**************************************************************
#**************************************************************
#
#	PARTIE COMMUNE À TOUS LES SEAT
#
#**************************************************************
#**************************************************************

    Section "ServerFlags"
        Option         "AutoAddDevices"      "false"
        Option         "AutoEnableDevices"   "false"
        Option         "AllowEmptyInput"     "true"
        Option         "AllowMouseOpenFail"  "true"
        Option         "AutoAddGPU"          "false"
        Option         "DPMS"                "true"
        Option         "BlankTime"           "5"
        Option         "StandbyTime"         "6"
        Option         "SuspendTime"         "7"
        Option         "OffTime"             "8"
        Option         "DefaultServerLayout" "Seat0"
        Option         "DontVTSwitch"        "true"
    EndSection

    Section "Module"
        Load         "extmod"
        Load         "dri2"
        Load         "dri"
        Load         "dbe"
        Load         "record"
        Load         "glx"
        Load         "GLcore"
    EndSection

#**************************************************************
#**************************************************************
#
#	SEAT 0 - Matériel perso
#
#**************************************************************
#**************************************************************

    Section "ServerLayout"
        Identifier         "Seat0"
        Screen           0 "Screen0"        0 0
        InputDevice        "Mouse0"         "CorePointer"
        InputDevice        "Keyboard0"      "CoreKeyboard"
        Option             "DontVTSwitch"   "false"
    EndSection

    Section "Device"
        Identifier         "Videocard0"
# CHANGER LE PILOTE
        Driver             "nvidia"
# CHANGER L'ADRESSE PCI
        BusID              "PCI:01:00:0"
# OPTION À UTILISER UNIQUEMENT SI LE PILOTE NVIDIA EST UTILISÉ
        Option             "ProbeAllGpus" "false"
    EndSection

    Section "InputDevice"
        Identifier         "Keyboard0"
        Driver             "evdev"
# CHANGER LE CHEMIN
        Option             "Device"       "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
        Option             "XkbRules"     "xorg"
        Option             "XkbModel"     "xorg"
# ADAPTER LES DEUX OPTIONS SUIVANTES À LA LANGUE ET LA VARIANTE DU CLAVIER UTILISÉ
        Option             "XkbLayout"    "fr"
        Option             "XkbVariant"   "oss"
        Option             "GrabDevice"   "true"
    EndSection

    Section "InputDevice"
        Identifier         "Mouse0"
# PILOTE "SYNAPTICS" SI PC PORTABLE AVEC TOUCHPAD SYNAPTICS
        Driver             "mouse"
# CHANGER LE CHEMIN
        Option             "Device"      "/dev/input/by-path/pci-0000:00:0b.0-usb-0:2:1.0-mouse"
	Option             "Protocol"    "ExplorerPS/2"
        Option             "GrabDevice"  "true"
    EndSection

    Section "Monitor"
        Identifier         "Monitor0"
        Option             "DPMS"
    EndSection     

    Section "Screen"
        Identifier         "Screen0"
        Device             "Videocard0"
        Monitor            "Monitor0"
        Option             "NoLogo" "true"
    EndSection

#**************************************************************
#**************************************************************
#
#	SEAT 1 - matériel université
#
#**************************************************************
#**************************************************************

    Section "ServerLayout"
        Identifier         "Seat1"
        Screen             "Screen1"
        InputDevice        "Mouse1"      "CorePointer"
        InputDevice        "Keyboard1"   "CoreKeyboard"
    EndSection

    Section "Device"
        Identifier         "Videocard1"
# CHANGER LE PILOTE
	Driver             "nvidia"
# CHANGER L'ADRESSE
        BusID              "PCI:06:00:0"
# OPTION À UTILISER UNIQUEMENT SI LE PILOTE NVIDIA EST UTILISÉ
        Option             "ProbeAllGpus" "false"
    EndSection

    Section "InputDevice"
        Identifier         "Keyboard1"
        Driver             "evdev"
# CHANGER LE CHEMIN
        Option             "Device"         "/dev/input/by-path/pci-0000:00:0b.0-usb-0:4:1.0-event-kbd"
        Option             "XkbRules"       "xorg"
        Option             "XkbModel"       "xorg"
# ADAPTER LES DEUX OPTIONS SUIVANTES À LA LANGUE ET LA VARIANTE DU CLAVIER UTILISÉ
        Option             "XkbLayout"      "fr"
        Option             "XkbVariant"     "oss"
        Option             "GrabDevice"     "true"
    EndSection

    Section "InputDevice"
        Identifier         "Mouse1"
# PILOTE "SYNAPTICS" SI PC PORTABLE AVEC TOUCHPAD SYNAPTICS
        Driver             "mouse"
# CHANGER LE CHEMIN
        Option             "Device"       "/dev/input/by-path/pci-0000:00:0b.0-usb-0:1:1.0-mouse"
	Option             "Protocol"     "ExplorerPS/2"
        Option             "GrabDevice"   "true"
    EndSection

    Section "Monitor"
        Identifier         "Monitor1"
        Option             "DPMS"
    EndSection    

    Section "Screen"
        Identifier         "Screen1"
        Device             "Videocard1"
        Monitor            "Monitor1"
        Option             "NoLogo" "true"
    EndSection

Un fichier détaillant chaque ligne est également disponible (on ne peut pas héberger des fichiers texte donc il faudra faire du copier/coller) :

# Fichier de configuration d'X.Org créé manuellement en vue de la réalisation d'un système multiseat.
# Chaque ligne est commentée pour détailler le rôle de l'option, son fonctionnement, son importance et les problèmes possibles.

# Version 1.0
#
# Notes de version :
#    - Première version fonctionnelle ;
#    - Multiseat statique à deux postes : aucune modification du matériel n'est possible, tous les réglages se font à la main dans ce fichier et dans le fichier lightdm.conf :
#        - Pas de déplacement des périphériques sur d'autres ports (sauf en modifiant ce fichier) ;
#        - Pas de branchement à chaud de périphériques d'entrée (sauf en modifiant ce fichier ; supports de stockage possible mais que sur le premier seat) ;
#        - Pas de modification des sorties sur lesquelles les écrans sont branchés (sauf en modifiant ce fichier) ;
#    - Fonctionne avec une carte graphique par poste ;
#    - Ne gère pas le son.

#**************************************************************
#**************************************************************
#
#	NOTES
#
#**************************************************************
#**************************************************************

# Méthodes d'identification des périphériques d'entrée (InputDevice) :
#        
#        Note : toutes ces méthodes ont un défaut, on ne peut pas changer le périphérique de place (le brancher sur un autre port) car ils sont repérés en fonction de leur adresse physique.
#        
#     1. cat /proc/bus/input/devices (NE FONCTIONNE PAS MAIS LA PREMIÈRE PARTIE EST TRÈS UTILE POUR IDENTIFIER LE PÉRIPHÉRIQUE (NAME + EVENT))
#        Ce fichier contient une liste des périphériques connectés à l'ordinateur et diverses informations utiles, qui permettent de les identifier entre-autres.
#        
#        Exemple d'entrées concernant le bouton d'alimentation :
#        I: Bus=0019 Vendor=0000 Product=0001 Version=0000
#        N: Name="Power Button"
#        P: Phys=PNP0C0C/button/input0
#        S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
#        U: Uniq=
#        H: Handlers=kbd event1 
#        B: PROP=0
#        B: EV=3
#        B: KEY=10000000000000 0
#        
#        Le nom nous aide à identifier le périphérique, et la valeur de "Phys" nous permet de l'identifier. On entrera alors la ligne suivante dans la section InputDevice :
#        Option "Dev Phys" "PNP0C0C/button/input0"
#         OU :
#        Option "Phys" "PNP0C0C/button/input0"
#        
#        NOTE : CETTE FAÇON DE FAIRE A ÉTÉ ÉVOQUÉE ICI : https://help.ubuntu.com/community/MultiseatX ET UTILISÉE ICI http://en.wikibooks.org/wiki/Multiseat_Configuration/evdev ET LÀ http://blog.fclement.info/en/content/configurer-souris-logitech-v470-cordless-laser-sous-ubuntu. MAIS ELLE NE FONCTIONNE PAS ! Il y a peut-être une façon de l'utiliser mais je n'ai pas trouvé sur le web. On n'a quasiment jamais à identifier le périphérique utilisé directement dans xorg.conf, rare sont les exemples sur internet et ceux trouvés ne fonctionnent pas. Après 45min de recherche, cette solution a été mise de côté.
#        
#     2. ls -la /dev/input/by-path/ (MÉTHODE UTILISÉE !) OU ls -la /dev/input/by-id/
#        
#        Ce dossier permet d'identifier les périphériques d'entrée. Il contient des liens menant aux fichiers correspondant à ces périphériques. ces fichiers sont du type "eventn", n étant le numéro de l'évennement. Ce numéro pouvant changer entre les démarrage, on ne s'en sert pas directement. Les liens du dossier /dev/input/by-path/ mènent toujours au bon endroit et ne changent pas, leur nom est donné en fonction de l'adresse physique du périphérique (adresse du port USB ou bus PCI). Ainsi, chaque périphérique est identifié en fonction du port où il est connecté. Le fichier /proc/bus/input/devices aide pour identifier le clavier voulu.
#        
#        Exemple d'entrée pour le clavier :
#        
#        lrwxrwxrwx 1 root root  10 mars  15 19:40 pci-0000:00:1d.0-usb-0:1.5:1.0-event-mouse -> ../event11
#        lrwxrwxrwx 1 root root   9 mars  15 19:40 pci-0000:00:1d.0-usb-0:1.5:1.0-mouse -> ../mouse1
#
#        La seconde ligne nous intéresse, elle va nous servir à identifier le périphérique. NE SURTOUT PAS UTILISER LA PREMIÈRE LIGNE, LA SOURIS DEVIENDRAIT FOLLE ET INUTILISABLE. On entrera alors la ligne suivante dans la section InputDevice :
#        Option "Device" " "/dev/input/by-path/pci-0000:00:1d.0-usb-0:1.5:1.0-mouse"
#
#        Méthode similaire pour ls -la /dev/input/by-id/
#        
#     3. ls -la /dev/input/mouse*
#        Cette commande liste tous les fichiers spéciaux correspondants aux souris (un par souris connectée), numérotés de mouse0 à mouse(n-1) s'il y a n souris connectées. Pour identifier quel fichier correspond à quelle souris, il faut lire le fichier /proc/bus/input/devices et lire la partie  H: Handlers=mouse0 event1 pour déterminer quel est le numéro de la souris.
#
#        On entrera alors la ligne suivante dans la section InputDevice :
#        Option "Device" "/dev/input/mouse0"
#        
#     4. dmesg | tail (après avoir branché un périphérique)
#        Cette commande affiche les dernières lignes (tail) du tampon du noyau (dmesg). man dmesg : "dmesg is used to examine or control the kernel ring buffer. The default action is to read all messages from kernel ring buffer." C'est "ring buffer" que j'ai du mal à traduire avec précision.
#        Quand on connecte ou déconnecte un périphérique, cette action est écrite dans le tampon du noyau et on peut la lire. Cela permet de déterminer quel périphérique vient d'être connecté pour le traiter. Je ne sais pas si on peut s'en servir aisément pour un script, mais à la main, c'est plutôt pratique. Même si les périphériques ne sont pas ajoutés/activés par défaut, l'évennement est noté ici. Enfin, pour le traitement des périphériques, regarder aussi les évennements HAL/udev pour les ajouter via un script et voir DevicePresenceNotify. Bref se renseigner plus amplement.

#        DPMS : Protocole de communication entre la carte graphique et l'écran (donc les deux doivent le supporter). Utilisé pour la synchronisation verticale et horizontale entre-autres. Je n'en sais pas plus, c'est assez technique et je n'ai pas le temps de me renseigner plus. Mais ça sert aussi pour mettre l'écran en veille s'il ne  reçoit plus de signal de la carte vidéo.

# Il peut y avoir des problèmes en cas d'utilisation de plusieurs ports VGA : http://forum.ubuntu-fr.org/viewtopic.php?pid=2935712#p2935712.

# Les pilotes propriétaires sont plus stables.

#**************************************************************
#**************************************************************
#
#	PARTIE COMMUNE À TOUS LES SEAT
#
#**************************************************************
#**************************************************************

    Section "ServerFlags" # Permet de définir des options générales pour le serveur X ; héritées par tous les seats

        Option         "AutoAddDevices"      "false"
        # empêche l’ajout automatique de périphériques (inhibe utilisation de plusieurs claviers/souris sur un même poste) ; permet d’isoler les périphériques d’entrée en fonction du poste. Regarder les évennements HAL pour les ajouter via un script. Piste : DevicePresenceNotify.

        Option         "AutoEnableDevices"   "false"
        # empêche l’activation automatique des périphériques (ils ne seront pas reconnus dès leur branchement), ce qui peut poser problème car si une souris ou autre est débranchée, on doit relancer la session pour pouvoir la réutiliser. Un script lancé par une règle udev devrait corriger cela, et on garderait donc le contrôle sur chaque périphérique. Ou alors, des InputClass peut-être.

        Option         "AllowEmptyInput"     "true"
        # permet au serveur X de démarrer même si aucun périphérique d’entrée n’a pu être initialisé ; option inutile mais préconisée par plusieurs sources et ne génère pas de bug.

        Option         "DontZap"             "false"
        # empêche de tuer le serveur X avec une combinaison de touches.

        Option         "AllowMouseOpenFail"  "true"
        # permet au serveur X de démarrer même si aucune souris n’a pu être initialisé ; option inutile (et redondante avec "AllowEmptyInput") mais préconisée par plusieurs sources et ne génère pas de bug.

        Option         "AutoAddGPU"          "false"
        # option mystérieuse, utilisée pour les multiseat. Plus d’infos ici : http://www.mail-archive.com/xorg-devel@lists.x.org/msg31094.html (page officielle); utilisé ici : https://help.ubuntu.com/community/MultiseatX. Pas plus d'informations trouvées. La description officielle dit «This option is to stop the X server adding non-primary devices as gpu screens ». On ne comprend pas vraiment ce que veut dire « non-primary device » dans notre contexte. La documentation de Gentoo sur le multiseat indique « In case xorg-server 1.13.0 and above is in use, the following must be used to maintain the gpu separation », cette option servirait donc à séparer les GPUs...

        Option         "DPMS"                "true"
        # active le DPMS pour l’écran. DPMS : protocole de communication entre la carte graphique et l’écran (donc les deux doivent le supporter). Utilisé pour la synchronisation verticale et horizontale entre-autres. Cela sert aussi pour mettre l’écran en veille s’il ne  reçoit plus de signal de la carte vidéo. Une source (http://www.freebsd.org/doc/fr/books/handbook/x-config.html) : « X autorise l’utilisation des caractéristiques DMPS (Energy Star) avec les moniteurs qui en sont capables. Le programme xset(1) contrôle les délais et peut forcer la mise en veille, l’arrêt, ou les modes d’extinction ».

        Option         "BlankTime"           "5" # sets the inactivity timeout for the blanking phase of the screensaver

        # les 3 options qui suivent concernent les écrans et cartes compatibles avec le protocole DPMS. Elles gèrent l’extinction de l’écran après une période d’inactivité. Nous ne connaissons pas leur rôle (les tests ne donnent rien), mais elles sont dans cet ordre (de l’effet le moins important au plus important). La documentation n’est pas claire ; temps en minute ; commentaires du manuel de xorg.conf.s
        Option         "StandbyTime"         "6" # sets the inactivity timeout for the "standby" phase of DPMS mode
        Option         "SuspendTime"         "7" # sets the inactivity timeout for the "suspend" phase of DPMS mode
        Option         "OffTime"             "8" # sets the inactivity timeout for the "off" phase of DPMS mode

        Option         "DefaultServerLayout" "Seat0"
        # indique le poste à charger par défaut si on n'indique pas à X.org lequel utiliser ; inutile dans le cas du multiseat car on configure lightdm pour démarrer X.org avec le poste voulu. Laissé à des fins de débogage (si on rétabli la configuaration par défaut de lightdm par exemple) pour que le serveur X ne soit pas perdu.

        Option         "DontVTSwitch"        "true"
        # empêche de changer de console virtuelle avec la séquence ctrl+Fn. Important car seul le premier poste a accès à ces consoles, mais si un autre utilisateur fait cette combinaison, le premier poste est affecté et est changé de console virtuelle (donc l'utilisateur du premier poste va se retrouver dans une console sans comprendre pourquoi). On doit par contre le ré-activer pour le premier poste, avoir un accès à une console peut toujours servir.
    EndSection

    Section "Module" # Liste des modules optionnels à charger
        # depuis sa version 7.0, X.org est divisé en différents modules et tous ne sont pas chargés par défaut. Les modules listés ici seront chargés au démarrage. Il n'y a pas de liste exhaustive des modules possibles ni de façon simple et rapide de connaître ceux installés sur l'ordinateur (et donc utilisables). Il existe deux façons de déclarer un module : load "nom_module" (le nom est sensible à la casse) ou créer une sous-section ayant le nom du module et qui contient des Option (des extensions du module) qui seront transmises au module chargé. Certains modules sont chargés automatiquement, on peut l'empêcher en utilisant "Disable" au lieu de "Load". X.org va charger les fichiers correspondant au nom des modules donnés. Toutefois, le nom du module diffère légèrement du nom du fichier. Lorsque l'on nomme le module, on ne doit pas écrire les suffixes ".a", ".o", ou ".so", ni le préfixe "lib" si le nom du fichier le contient. Ainsi, le fichier "libextmod.so" est référencé par le module "extmod". X.org cherche récursivement les fichiers correspondants aux modules dans tous les répertoires spécifiés par le ModulePath (voir ci-dessous), les pilotes, les périphériques de saisie, les extensions et les polices. Il est donc très compliqué d'avoir un aperçu complet des modules disponibles. Toutefois, le contenu du répertoire "/usr/lib/xorg/modules" donne une liste non-exhaustive. Les modules “extmod”, “dbe”, “dri”, “dri2”, “glx” et “record” sont chargés automatiquement s'ils sont présents, à moins qu'ils soient explicitement désactivés par l'option "Disable". Il est recommandé de charger au moins le module "extmod".
        # Le "ModulePath" est une option que l'on peut spécifier dans la section "File" (absente de ce fichier). On utilise la syntaxe suivante : « ModulePath "path1[,path2][...][,pathn]" », on entre donc un ou plusieurs chemins séparés par des virgules. Si plusieurs entrées "ModulePath" sont présentes, elles seront concaténées pour créer le "ModulePath" utilisé par le serveur X. Le chemin par défaut est "/usr/lib/xorg/modules".
        # Source : Manuel de xorg.conf pour la version 1.11.3 de xorg-server. Certaines parties ne sont pas valables pour toutes les versions de xorg-server.

        # Principaux modules utilisables - source : http://www.x.org/wiki/XorgConfModulesSection :

        Load         "extmod"
        # active de nombreuses extensions très courantes de X.org comme shaped windows, shared memory, video mode switching, DGA, et Xvideo ; toutes ne sont pas forcément disponibles et certaines peuvent être désactivées en utilisant «SubSection "extmod" "omit nom_extension" EndSubSection ». ACTIVÉ PAR DÉFAUT.

        Load         "dri"
        # active le DRI (direct rendering infrastructure), toutes les cartes vidéos le supportent désormais. Permet d'utiliser l'accélération matérielle pour les rendus 3D (c'est la carte vidéo qui travaille et non le processeur ainsi). Sans ce module, c'est le serveur X qui génère ces rendus, faisant tout logiciellement, ce qui consomme beaucoup de ressources. Plus d'informations ici : http://www.gentoo.org/doc/fr/dri-howto.xml. ACTIVÉ PAR DÉFAUT.

        Load         "dri2"
        #  active le DRI2, amélioration du DRI. Plus d'informations ici : http://www.x.org/releases/X11R7.7/doc/dri2proto/dri2proto.txt et là : http://www.x.org/wiki/DRI2. ACTIVÉ PAR DÉFAUT.

        Load         "dbe"
        # active l'extension de double-buffering (utilise deux tampon pour créer les images), utile pour l'animation ou la vidéo. ACTIVÉ PAR DÉFAUT.
        # Traduction approximative de "http://www.x.org/releases/X11R7.7/doc/xextproto/dbe.html#Introduction" : L'extension DBE fournit une façon standard d'utiliser une double mémoire tampon dans le cadre du serveur X. Deux mémoires tampon snt utilisées, nommées "front" et "back" qui contiennent les images. Le premier tampon est visible par l'utilisateur, l'autre non. Les images successives d'une animation sont créées dans le tampon arrière pendant que l'image précédente est affichée sur le tampon avant. Quand uune nouvelle image est prête, les deux tampons échangent leur rôle, rendant visible la nouvelle image.

        Load         "record"
        # active l'extension record, enregistre des événements qui se produisent. Utilisé à des fins de test généralement. Spécification du protocole : http://www.x.org/releases/X11R7.7/doc/recordproto/record.html. ACTIVÉ PAR DÉFAUT.

        Load         "glx"
        # active le rendu OpenGL ; extension faisant le lien entre le serveur X et OpenGL (pour tout ce qui est 3D, etc.). Plus d'informations ici : http://doc.ubuntu-fr.org/opengl, http://fr.wikipedia.org/wiki/GLX, http://fr.wikipedia.org/wiki/OpenGL. ACTIVÉ PAR DÉFAUT.

        Load         "GLcore"
        # utilisé par OpenGL, pas plus d'informations trouvées.

        Load         "bitmap"
        # active le support des polices bitmap pour la rastérisation (http://fr.wikipedia.org/wiki/Rast%C3%A9risation - http://msdn.microsoft.com/fr-fr/library/ff604996%28v=xnagamestudio.40%29.aspx - traite l'image pour l'affichage sur l'écran). Inutile depuis la version 7.0 de X.org.

        Load         "vbe"
        # active l'extension Vesa Bios ;  autorise la demande des capacités du moniteur via la carte vidéo.

        Load         "int10"
        # émulateur x86 utilisé pour le démarrage de la carte vidéo secondaire. Devrait être activé si "vbe" l'est. Traduction de « real-mode x86 emulator used to softboot secondary VGA cards. Should be enabled if vbe is enabled ».

        Load         "ddc"
        # active l'extension Data Display Channel ;  autorise la demande des capacités du moniteur via la carte vidéo.

        Load         "i2c"
        # serial bus over which you speak the ddc protocol to get info from the monitor.

        Load         "freetype"
        Load         "type1"
        # charge les polices "freetype" et "type1" (ce sont des types de police, donc toutes celles qui y sont associées sont chargées ; polices stockées ici : "/usr/share/fonts").

    EndSection

#**************************************************************
#**************************************************************
#
#	SEAT 0 - Matériel perso
#
#**************************************************************
#**************************************************************

    Section "ServerLayout" # permet d’associer tout le matériel pour former une configuration complète. On peut également y appliquer diverses options, pour écraser celles du ServerFlags par exemple.
        Identifier         "Seat0"
        # permet d’identifier de manière unique cette section et donc tout ce qui s'y réfère.

        Screen           0 "Screen0"        0 0
        # n° écran du layout  (identifiant écran – position x – position y) ; voir man xorg.conf.

        InputDevice        "Mouse0"         "CorePointer"
        # indique la souris à utiliser ; CorePointer indique que c’est la souris principale.

        InputDevice        "Keyboard0"      "CoreKeyboard"
        # indique le clavier à utiliser ; CoreKeyboard indique que c’est le clavier principal.

        Option             "DontVTSwitch"   "true"
        # permet à l'utilisateur de ce poste d'utiliser les consoles virtuelles et d'y accéder grâce à la combinaison de touches ctrl+Fn.

    EndSection

    Section "Device"
        # permet d’identifier et configurer les carte graphique vidéo ; une section par carte (dans le cas du multiseat, sans multi-écran). Dans le cas d'un multi-écran, on utilise une section "Device" par sortie vidéo, en les identifiant de manière unique avec l'option « Screen n », n étant le numéro de la sortie. Numérotation début à 0 et est composée de nombres entiers contigues. Lors de la référence aux écrans dans le "ServerLayout", un écran ne peut être utilisé que si tous les écrans de numéro inférieur le sont. Ainsi, l'écran de la sortie n°1 ne peut être utilisé que si celui de la sortie n°0 y est. L'identification des sorties étant logicielle et non matérielle, le choix du numéro des sorties vidéo est arbitraire.
        Identifier         "Videocard0"

# CHANGER LE PILOTE
        Driver             "nvidia"
        # indique à X.org quel est le pilote de la carte graphique. Cela dépend de la carte graphique, il ne faut pas se tromper sinon le pilote nécessaire ne sera pas chargé. Voir ici (http://doc.ubuntu-fr.org/carte_graphique) les documentations de chaque carte pour plus d’informations sur les pilotes. En général, "radeon" fonctionne bien avec les cartes AMD, et "nv", "nouveau" avec celles Nvidia. "vesa" fonctionne aussi mais est trop basique. Pilote propriétaire "nvidia" recommandé pour les cartes Nvidia. Le répertoire "/usr/lib/xorg/modules/drivers" liste les pilotes graphiques installés.

# CHANGER L'ADRESSE PCI
        BusID              "PCI:01:00:0"
        # numéro du bus PCI de la carte : son adresse physique, permet de l’identifier de façon non-ambiguë. La commande  « $ lspci | grep -E « 3D|VGA » » permet de lister les différentes cartes graphiques. La ligne correspondant à chaque périphérique commence par son adresse physique. Note importante : l’adresse donnée par la commande sera de la forme « 01:00.0 », mais il faut écrire « 01:00:0 » dans le fichier xorg.conf. L’adressage des cartes AGP dans xorg.conf utilise excatement la même syntace (PCI:01:00:0).

# OPTION À UTILISER UNIQUEMENT SI LE PILOTE NVIDIA EST UTILISÉ
        Option             "ProbeAllGpus" "false"
        # permet de ne sonder que les cartes vidéos qui sont connectées à un écran ; comportement par défaut sonde toutes les cartes.
    EndSection

    Section "InputDevice" # permet de répertorier chaque périphérique de saisie et d’en donner les caractéristiques afin qu’ils soient bien reconnus par le système ; une section par périphérique.
        Identifier         "Keyboard0"

        Driver             "evdev"
        # pilote qui gère les claviers.

# CHANGER LE CHEMIN
        Option             "Device"       "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
        # chemin vers le fichier correspondant au clavier considéré.

# le dossier /usr/share/X11/xkb contient les différentes valeurs possibles pour les options suivantes.

        Option             "XkbRules"     "xorg"
        # indique les règles utilisées pour interpréter les options XkbModel, XkbLayout, XkbVariant et XkbOptions. On indique généralement "xorg" ou "evdev".

        Option             "XkbModel"     "xorg"
        # type de clavier (105 touches, etc), "xorg" fonctionne trrès bien.

# ADAPTER LES DEUX OPTIONS SUIVANTES À LA LANGUE ET LA VARIANTE DU CLAVIER UTILISÉ
        Option             "XkbLayout"    "fr"
        # langue du clavier.

        Option             "XkbVariant"   "oss"
        # variante du clavier (bépo et autrte) ; oss est très bien et fournit de nombreux caractères manquants sur les claviers azerty comme : «»≤≥œ©êæâêþÿûîôöŀïüð’‘ëßä ¬¿×÷¡↓↔↖↑↗→↔↓↘↙ à l'aide de la touche altGr.

        Option             "GrabDevice"   "true"
        #  peut empêcher certains bugs du clavier ou de la souris.

    EndSection

    Section "InputDevice"
        Identifier         "Mouse0"

# PILOTE "SYNAPTICS" SI PC PORTABLE AVEC TOUCHPAD SYNAPTICS
        Driver             "mouse"
        # pilote qui gère les souris.

# CHANGER LE CHEMIN
        Option             "Device"      "/dev/input/by-path/pci-0000:00:0b.0-usb-0:2:1.0-mouse"

	Option             "Protocol"    "ExplorerPS/2"
        # protocole qui gère la souris ; nombreuses valeurs possibles ; entrées obligatoire, aucune valeur par défaut. Plus d'informations ici : http://ftp.x.org/pub/X11R7.0/doc/html/mouse.4.html.

        Option             "GrabDevice"  "true"
    EndSection

    Section "Monitor" # permet de configurer les écrans, une section par écran.
        Identifier         "Monitor0"

        Option             "DPMS"
        # Active l'extension DPMS (Energy Star) pour l'écran ; tous le supportent maintenant.
    EndSection     

    Section "Screen" # permet de créer un dispositif d'affichage complet en associant une carte vidéo et un écran. L'écran connecté utilisera donc les réglages spécifiés dans la section "monitor", changer d'écran ne se fait pas toujours simplement.
        Identifier         "Screen0"

        Device             "Videocard0"
        # référence à la carte vidéo utilisée.

        Monitor            "Monitor0"
        # référence à l'écran utilisé.

# OPTION À UTILISER UNIQUEMENT SI LE PILOTE NVIDIA EST UTILISÉ
        Option             "NoLogo" "true"
        # auparavant, avec le pilote "nvidia", le logo de Nvidia apparaissait au démarrage de X.org et cette option permettait de l'enlever. Aujourd'hui, le comportement par défaut est de ne pas l'afficher, rendant ceette option caduque. Voir http://brainstorm.ubuntu.com/idea/6420/.

    EndSection

#**************************************************************
#**************************************************************
#
#	SEAT 1 - matériel université
#
#**************************************************************
#**************************************************************

    Section "ServerLayout"
        Identifier         "Seat1"
        Screen             "Screen1"
        InputDevice        "Mouse1"      "CorePointer"
        InputDevice        "Keyboard1"   "CoreKeyboard"
    EndSection

    Section "Device"
        Identifier         "Videocard1"
# CHANGER LE PILOTE
	Driver             "nvidia"
# CHANGER L'ADRESSE
        BusID              "PCI:06:00:0"
# OPTION À UTILISER UNIQUEMENT SI LE PILOTE NVIDIA EST UTILISÉ
        Option             "ProbeAllGpus" "false"
    EndSection

    Section "InputDevice"
        Identifier         "Keyboard1"
        Driver             "evdev"
# CHANGER LE CHEMIN
        Option             "Device"         "/dev/input/by-path/pci-0000:00:0b.0-usb-0:4:1.0-event-kbd"
        Option             "XkbRules"       "xorg"
        Option             "XkbModel"       "xorg"
# ADAPTER LES DEUX OPTIONS SUIVANTES À LA LANGUE ET LA VARIANTE DU CLAVIER UTILISÉ
        Option             "XkbLayout"      "fr"
        Option             "XkbVariant"     "oss"
        Option             "GrabDevice"     "true"
    EndSection

    Section "InputDevice"
        Identifier         "Mouse1"
# PILOTE "SYNAPTICS" SI PC PORTABLE AVEC TOUCHPAD SYNAPTICS
        Driver             "mouse"
# CHANGER LE CHEMIN
        Option             "Device"       "/dev/input/by-path/pci-0000:00:0b.0-usb-0:1:1.0-mouse"
	Option             "Protocol"     "ExplorerPS/2"
        Option             "GrabDevice"   "true"
    EndSection

    Section "Monitor"
        Identifier         "Monitor1"
        Option             "DPMS"
    EndSection    

    Section "Screen"
        Identifier         "Screen1"
        Device             "Videocard1"
        Monitor            "Monitor1"
    EndSection

Choix d’un client zéro pour tester la solution commerciale de Userful

L’étude des solutions commerciales existantes pour la réalisation d’une installation multi-postes a permis de dégager les possibilités actuelles pour parvenir à notre but. Le prix est un critère très important dans notre choix, voire le plus important, ainsi la solution d’Userful semble être la meilleure. Elle est compatible avec Windows Multipoint Server et Linux, et utilise des clients zéro au coût beaucoup plus faible que les clients léger.

Afin de tester en conditions réelles le produit d’Userful, nous devons sélectionner le meilleur client zéro parmi ceux compatible en tenant compte de deux critères : le prix doit être le plus faible possible et la résolution maximale d’au moins 1920*1080px (full HD). Les clients compatibles sont disponibles sur le site d’Userful (il y a des doublons la liste est incomplète), ceux respectant le critère de la résolution sont :

Il nous a été impossible de trouver le prix du client Goodway (recherche de 10min infructueuse donc stoppée), l’Atrust m320 coûte 132£ (153€), et le client HP coûte 106,44 € ou 80,20€. Le choix doit donc se faire entre le client Atrust et le client HP, qui sont techniquement très proches. La préférence va au client zéro HP qui est moins cher (il faudra en revanche prévoir l’achat du bloc d’alimentation, vendu séparément) et vendu directement par HP, gage de confiance et espérons le de meilleure qualité que les ordinateurs grand public de cette même marque… De plus, le clavier et la souris sont fournis.

Le grand gagnant de notre sélection est donc le client zéro HP t200, que voici en image :

Client zéro HP t200

Intéressons nous de plus près à ses caractéristiques techniques, fournies par HP. Tout d’abord, un tableau récapitulatif du matériel nécessaire en fonction du nombre d’utilisateur :

Nombre d’utilisateurs
t200 Solution 2 3 4 5 6 7 8 9 10 11 12 13 14 15
PC hôte Essential
Core i5/4 GB configuration
Extended
Core i7/8 GB configuration
Quantité de t200 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Quantité de moniteurs 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Souris / clavier USB Included
NOTE: Si vous utilisez une connexion Ethernet pour relier le client zéro au PC hôte, vous devez acheter le blox d’alimentation vendu en option, ou utiliser l’écran MultiSeat Power-Pass-Through vendu par HP. Dans le cas d’une connexion à l’hôte via USB, le client est alimenté par ce port dans la limite de 3W. Si vous y connectez beaucoup de périphériques USB, l’achat du bloc d’alimentation sera nécessaire.
NOTE: Vous ne pouvez pas mélanger les clients zéro de la série t100 avec ceux de la série t200 sur un même PC hôte, mais vous pouvez mélanger les clients t100 et t150.

HP indique clairement les limitations techniques de sa solution, en nous donnant le nombre maximal d’utilisateur (tout en ayant un service de qualité) en fonction de l’utilisation. Ces limitations ne sont qu’indicatives et sont à adapter au cas par cas, mais donnent une idée des performances accessibles et du budget qu’il faut réserver pour l’achat de la machine hôte. Il faut savoir que d’un point de vue théorique, aucune limitation n’existe et aucun logiciel nous bride à un certain nombre de PC, ces limitations sont donc purement liées au matériel et à l’usage voulu.

  1. Bureautique : 12 (core i5) à 15 (core i7) utilisateurs : sans utilisation de logiciels lourd, d’applications flash, ou de visionnage de vidéo HD ;
  2. Navigation web légère : 10 à 14 utilisateurs : sites contenant principalement du texte, pas trop de liens et pas de flash ;
  3. Navigation web lourde : 8 à 12 utilisateurs : tout type de site, vidéo flash en 480p maximum, les utilisateurs ne doivent pas tous utiliser des applications flash sur les sites, auquel cas il est recommandé d’acheter un PC classique par utilisateur (donc de laisser tomber le multiseat) ;
  4. Multimédia : 8 utilisateurs : vidéos 720p maximum, usage multimédia modéré, sinon il est recommandé d’acheter un PC classique par utilisateur.

On peut donc en conclure que la solution multiseat est réalisable jusqu’à 8 postes sans problème, moyennant un ordinateur hôte puissant avec par exemple : core i7, 8 à 24 GO de RAM, alimentation 750W gold FSP, pas de GPU, quelques disques dur en fonction de l’usage. Cette configuration a été faite rapidement et n’est pas forcément très bien choisie, mais c’est juste pour donner un exemple du matériel à acheter, en comptant le boîtier, on arrive aux alentours de 1500€ pour l’hôte.Ce qui donne 1500 + 8*106 = 2348 € + les 8 bloc alimentation.

Si on compare cela à 8 ordinateurs à 500€ (avec clavier/souris inclus), cela donne 8*500 – 2400 = 1600€ d’économie environ. C’est un montant donné à titre indicatif, pour montrer que l’on fait des économies. L’hôte choisi n’est peut-être pas assez puissant, il est possible que son coût soit de 2000€, mais même là, la solution est économique. De plus, les 500€ d’un ordinateur est le montant minimal pour une configuration complète, le prix réel des ordinateurs utilisés est certainement différent. Enfin, il ne faut pas oublier qu’il y a une licence à payer à Userful si on choisit cette solution.

Note : le client zéro USB Plugable UD-160-M est lui aussi compatible avec l’offre d’Userful et accepte une résolution maximale de  1920*1080px. Pour 80$, ça peut être un produit intéressant.