Multiposte avec une carte graphique

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Après avoir fait du multiposte avec 2 CG, un changement de PC m'oblige à faire la même chose mais avec une seule carte. J'ai essayé de couvrir au maximum toutes les étapes de la mise en place de la solution.


Choix des outils

Tout d'abord le raisonnement pour le choix des outils à été le suivant.

Xorg ou Wayland ?

La réponse a été rapide. Xorg clairement, Wayland est encore trop récent pour pouvoir le faire et aucun document ne traite pour l'instant de ce problème.

Xnest ou Xephyr ?

Xephyr est largement plébiscité et Xnest semble tomber en désuétude. C'est par le développement de Tizen (ex-Meego) que Xephyr semble toujours actif et que de nouvelles fonctionnalités lui sont ajoutées. Intel s'en sert intensément et est énormément utilisé pour le développement d'application pour smartphone comme environnement de simulation. (http://www.phoronix.com/scan.php?page=news_item&px=ODc1NQ). Un souci avec Xephyr est que le support de evdev semble ne pas avoir été inclus dans les options de compilations. "evdev" permet de monopoliser les claviers et souris. Du coup il faut refaire le paquet soi-même.

Et la transition avec systemd ?

Il ne semble plus y avoir de problème particulier (http://phoronix.com/forums/showthread.php?57432-SystemD-Udev-Multi-Seat-Support-For-X-Org)

Comment gérer 2 écran, 2 session avec une seule carte graphique ?

Il faut savoir que Xephyr permet de se greffer sur n'importe quel serveur X afin d'afficher une autre session. Par exemple avec la commande "Xephyr -query 127.0.0.1" vous devez pouvoir vous connecter sur votre propre machine si le protocole "XDMCP" est activé sur votre "DisplayManager" (GDM, KDM, XDM, ...). Donc le but du jeu sera d'avoir un serveur X qui va "supporter" 2 fenêtres Xephyr. Ces deux dernières se verront affectées les claviers et les souris de manière exclusive.

Et le DM ? Debian a adopté GDM(3) avec Gnome mais j'aimerais bien m'en passer.

Avec GDM (celui de Gnome2) il existe un très bon tutoriel ici : http://netpatia.blogspot.fr/2009/06/multiseat-in-ubuntu-904.html Pour GDM3, le problème est que pour l'instant il ne reprend pas toutes les possibilitées de son ancienne version. https://live.gnome.org/GDM/ToDo "-- Allow per-display X Server commands BrianCameron: The [server] and [server-foo] sections of the GDM configuration have been disabled. This means that users who depend on novel configurations which require special Xserver commands per-display is not available."

Donc bonne nouvelle, il fallait trouver une alternative en le nom de LightDM, qui est issu de Ubuntu ...

Prérequis

Donc pour les pré-requis :

Reconstruction de Xephyr

Récupération des sources nécessaires

On récupère toutes les sources du packet source xorg-server qui comprend Xephyr.

$ apt-get source xserver-xephyr


Puis récupérer toutes les dépendances spécifique au paquet :

# apt-get build-dep xorg-server

Là il va télécharger un certain nombre de paquets de développement ("-dev"), ils sont marqués comme installés automatiquement, donc un deborphan devrait vous les enlever sans trop de problème. Sinon il existe cette commande pour être sûr qu'ils sont marqués en tant que "installé automatiquement", puis un "apt-get autoclean" les supprimera.

Reconfiguration

Ensuite tout se passe dans le répertoire "debian"

$ cd xorg-server-X.YY.Z/debian


On édite le fichier "changlog" pour monter de version le paquet que l'on va reconstruire. Il est possible de le faire en automatique avec la commande:

debian/$ dch -n


L'option "-n" permet d'incrémenter le numéro de version de façon mineur, c'est à dire l'ajout de ".1" en fin de numéro de version.

Sinon pour le faire en manuel, il faut ajouter une ligne du type suivant au fichier:

xorg-server (2:X.YY.Z-A.B) UNRELEASED; urgency=low

  * Non-maintainer upload.
  * ajout des paramètre pour Xephyr et evdev

 -- Vous <vous@VotreMachine>  Sun, 03 Mar 2013 22:21:32 +0100

Pour éviter de réinstaller tout Xorg avec le nouveau numéro de version il faut éditer le fichier "debian/control" et modifier la dépendance de Xephyr (ligne ~288). Pour cela il faut remplacer le

Depends :
  xserver-common (>= ${source:Version})

Par :

Depends :
  xserver-common (>= 2:X.YY.Z-A)

Le numéro doit être en accord avec la version de votre Xorg actuellement installé sur votre machine. Sinon cette modification est directement possible dans le .deb, toujours dans le fichier "DEBIAN/control". Pour cela il faut prendre le .deb que vous avez construit, le décompresser, modifier le fichier et faire la commande "dpkg-deb -b <nom du répertoire contenant les fichiers>". Mais il est plus pratique de le faire avant.

Je ne vous conseille pas de mettre une numéro de version trop élevé car cela pourrait engendrer une incompatibilité avec les futurs versions de Xorg.

Ensuite nous allons modifier les options de compilation en éditant le fichier "rules", c'est le Makefile de la construction du paquet. Localisez "confflags_main" (ligne ~118) et ajoutez les lignes suivantes juste en dessous de "--enable-kdrive" (ligne ~142)

--enable-kdrive-evdev \
--enable-kdrive-mouse \
--enable-kdrive-kbd \

Recompilation

Passons maintenant à la recompilation proprement dite, ressortez du répertoire debian et faites :

$ fakeroot ./debian/rules binary

Et laissez la compilation et la création des paquets se faire ... cela peut prendre quelques minutes.

Re-recompilation

Si pour une raison il vous faut refaire entièrement la compilation il faut d'abord faire la commande suivante

$ fakeroot ./debian/rules clean

Si c'est juste refaire les ".deb" (correction du numéro de dépendance, ...), alors cette commande suffit.

$ fakeroot ./debian/rules binary-deb

Erreur de compilation possible

Il est possible que à la fin de la compilation vous ayez le mesage suivant

$ make: *** [binary-deb] Erreur 2

Pour identifier la cause il faut remonter dans les logs (ou faire une recherche) pour trouver un message similaire à :

dpkg-shlibdeps: erreur: impossible de trouver la bibliothèque libaudit.so.0 utilisée par debian/xserver-xorg-core/usr/lib/xorg/modules/multimedia/tda9885_drv.so (format ELF : « elf64-x86-64 »; RPATH : «  »)

Par exemple pour cette erreur la solution à été de créer un lien symbolique vers la version plus récente de la lib

ln -s libaudit.so.1 libaudit.so.0

Installation du paquet obtenue

Enfin pour installer votre paquet (qui se trouve dans le répertoire supérieur) il faut faire :

#dpkg -i xserver-xephyr_1.12.4-5_i386.deb

Ou de manière graphique avec GDebi.

Paquets déjà prêt

Configuration de Xorg

Définition de l'existant

Pour rappel le principe sera d'avoir une session X qui va héberger 2 sessions Xephyr qui serviront les différents sièges. Tout d'abord nous allons faire un fichier de conf pour le serveur Xorg. Pour ne pas démarrer de rien on peut lancer la commande (en root) "Xorg -configure" qui génère le fichier "xorg.conf.new" dans "/root". Ensuite on fait un petit "xrandr" pour identifier les sorties disponibles.

$ xrandr

Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
DVI-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 593mm

"DVI-0" & "HDMI-0" sont les 2 disponibles sur la machine. On peut aussi trouver du "VGA-0" ou "LVDS" pour les écrans de portables.

Exemple de fichier de configuration

Dans cet exemple on peut avoir un "/etc/xorg.conf" comme suivant :

##################################################################
Section "Monitor"
	Identifier  "HannsG"
	Option      "PreferredMode" "1920x1200"
	Option      "DPMS" "true"
	Option		"Primary" "true"
EndSection

Section "Monitor"
	Identifier  "Acer"
	Option      "PreferredMode" "1680x1050"
	Option      "DPMS" "true"
EndSection

Section "Device"
	Identifier  "card0"
	Driver      "radeon"
	# Ici on associe les sorties video avec une section "Monitor"
	# On remarquera le "Monitor" devant le nom des sortie, c'est indispensable (cf : http://www.x.org/archive/current/doc/man/man5/xorg.conf.5.xhtml#heading12)
	Option      "Monitor-HDMI-0" "HannsG"
	Option      "Monitor-DVI-0" "Acer"
EndSection

##################################################################

Section "Screen"
	Identifier  "ecran1"
	Device      "card0"
	Monitor     "HansG"
	DefaultDepth 24
	SubSection "Display"
 		Depth   24
		Virtual 3600 1200
	EndSubSection
EndSection

Section "ServerLayout"
	Identifier    "dualscreen"
	Screen      0  "ecran1"
EndSection
##################################################################

Configuration de LightDM

Nous allons maintenant regarder la configuration de LightDM d'un peu plus près. Le fichier de configuration par défaut expose toutes les options possibles du dit fichier. Nous allons garder le strict minimum

lightdm.conf

Pour cela éditons le fichier /etc/lightd/lightdm.conf

[LightDM]
 greeter-user=root
 user-authority-in-system-dir=false

 [SeatDefaults]
 xserver-allow-tcp=false
 greeter-hide-users=false
 user-session=lightdm-xsession
 session-wrapper=/etc/X11/Xsession
 session-setup-script=/etc/lightdm/session-setup-script.sh -a 3 -v 7

 [Seat:0]
 xserver-command=nohup X -br -dpms -s 0 -novtswitch -nocursor
 greeter-session=fake-greeter

 [Seat:1]
 xserver-command=/etc/lightdm/Xephyr-command.sh -p 1 -t 1680x1050 -P evdev -s /dev/input/by-id/usb-Logitech_USB-PS_2_Optical_Mouse-event-mouse -c /dev/input/by-id/usb-TrulyErgonomic.com_Truly_Ergonomic_Computer_Keyboard-event-kbd -v bepo 
 greeter-setup-script=/etc/lightdm/Xephyr-greeter-setup.sh -p 1
 greeter-session=lightdm-greeter

[Seat:2]
 xserver-command=/etc/lightdm/Xephyr-command.sh -p 2 -t 1920x1200 -P evdev -s /dev/input/by-id/usb-B16_b_02_USB-PS_2_Optical_Mouse-event-mouse -c /dev/input/by-path/platform-i8042-serio-0-event-kbd
 greeter-setup-script=/etc/lightdm/Xephyr-greeter-setup.sh -p 2 -d 1680,0
 greeter-session=lightdm-greeter

Il y a plusieurs chose à savoir concernant le fonctionnement de LightDM afin de comprendre ce qui est fait.

  • La section "SeatDefault" est commune à tous les sièges définis après
  • Chaque "Seat" est exécuté dans l'ordre dans un VT différent et ce même si, dans notre cas, tout se passe dans le VT7 ([url=https://code.launchpad.net/~andrzejtp2010/lightdm/lightdm-trunk-xephyr-multiseat/+merge/120286]un patch[url] à été proposé pour palier à ce problème mais il n'a pas été accepté ... pour l'instant)
  • Chaque propriété de tous les "Seat" est lancée dans un ordre précis, d'abord tous les "xserver-command", puis tous les "greeter-setup-script", enfin tous les "greeter-session". Si vous mettez d'autres propriétés elle seront exécutées suivant leur ordre pré-établi.
  • Si les "greeter" se terminent, lightDM coupe le "xserver-command" correspondant. De même si le "xserver-command" se termine le greeter est coupé.

Donc pour que tout se positionne correctement il faut

  • D'abord lancer le serveur X qui servira de support, ce qui est fait en le mettant en tant que premier poste ("Seat:0")
  • Lancer les fenêtres Xephyr avec les optons qui vont bien, ce qui est fait avec le script "Xephyr-command.sh" et ses arguments
  • Simuler un "greeter" pour le "Seat :0" afin que le serveur X ne soit pas tué par lightDM, ce qui est fait avec le script "fake-greeter"
  • Exécuter un script qui va placer les fenêtre Xephyr si besoin et initialiser les variables d'environnement correctement, fait avec "Xephyr-greeter-setup.sh"
  • Exécuter les "greeter" dans les fenêtre Xephyr
  • (MAJ 02/2014) Il faut rechanger de VT lorsque l'utilisateur se logue car LightDM semble se repositionner sur le VT qui est sensé contenir le poste (VT 8,9, ...), donc le script session-setup-script.sh devient indispensable

fake-greeter.desktop

Pour le faux greeter du serveur X il faut créer un fichier dans "/usr/share/xgreeters/fake-greeter.desktop" et y copier son contenu :

[Desktop Entry]
Name=LightDM fake greeter
Comment=This runs no greeter at all, it should only be run from LightDM
Exec=sleep infinity
Type=Application
X-Ubuntu-Gettext-Domain=lightdm

Après tout cela nous allons créer un script qui permettra de créer ("Xephyr-command.sh") et un autre pour placer les fenêtre à l'écran ("Xephyr-greeter-setup.sh"). Tout d'abord il est nécessaire d'installer le petit utilitaire "wmctrl" avec

# aptitude install wmctrl

Xephyr-command.sh

Le contenu du fichier "Xephyr-command.sh"

#!/bin/sh
# 2013-03 @ Mimoza
# http://www.isalo.org/wiki.debian-fr/Multiseat

####### Les fonctions #############

usage() {
  echo "Usage : $nom [OPTION...] -p numéroDePoste"
  echo "Usage : $nom -h|--help"
  echo "Options :"
  echo "\t -t, taille : Doit être de la forme 9999x9999, (dafaut = 1024x768)"
  echo "\t -s, sourie : /dev/input/[by-path|by-id]/...event-mouse"
  echo "\t -c, clavier : /dev/input/[by-path|by-id]/...event-kbd"
  echo "\t -l, layout : fr, es, en, ... (défaut = fr)"
  echo "\t -v, variant : fr, latin9, bepo, ... (défaut = <vide>)"
  echo "\t -P, Pilote : ephyr ou evdev (défaut = ephyr)"
}

testExecutable() {
	XEPHYR=`whereis -b Xephyr | cut -d' ' -f2`
}


####### VALEURS PAR DEFAUT #############
POSTE=$$ #On récupère le PID du process courant
TAILLE="1024x768"
SOURIE=
CLAVIER=
LAYOUT="fr"
XRACINE=0 # Permet de spécifier le serveur X à utiliser si différent du 0
PILOTE=ephyr # Test = ephyr ; Prod = evdev

####### ANALYSE DES OPTIONS #############
# Mode debug
set -x

# récupération du nom du script
nom=`basename $0`

# Cas particulier de sans option
if [ $# -lt 1 ]; then usage; exit 1; fi


# Vérification des outils disponibles
testExecutable
if [ -z "$XEPHYR" ]; then
	echo "Executable manquant :"
	echo "Xephyr : "$XEPHYR
	exit 2
fi

# Analyse des autres options
OPTIND=0

while getopts ":p:t:s:c:l:v:P:h" option
do
	echo "(-- option:'$option'  ind:'$OPTIND' optarg:'$OPTARG' --)"
	case $option in
		p|poste)
			POSTE=$OPTARG
		;;

		t|taille)
			TAILLE="$OPTARG"
		;;

		s|sourie)
			SOURIE=$OPTARG
			if  ! [ -r $SOURIE ];then
				echo "La sourie n'est pas accessible"
				exit 3
			fi
		;;

		c|clavier)
			CLAVIER=$OPTARG
			if  ! [ -r $CLAVIER ];then
				echo "Le clavier n'est pas accessible"
				exit 4
			fi
		;;

		l|layout)
			LAYOUT=$OPTARG
		;;

		v|variant)
			VARIANT=$OPTARG
		;;

		P|Pilote)
			PILOTE=$OPTARG
		;;

		h|help)
			usage
			exit 1
		;;

		:)
			echo "l'option '$OPTARG' nécessite un argument"
		;;

		\?) echo " option '$OPTARG'  INVALIDE" >&2
	esac
done

####### TRAITEMENT EFFECTIF #############
# Mise en place des variables d'environnement
export DISPLAY=:$XRACINE
export XAUTHORITY=/var/run/lightdm/root/:$XRACINE

# Construction de la ligne d"argument
OPTIONS=""

if [ -n "${TAILLE}" ]; then
	OPTIONS=" -screen ${TAILLE}"
fi

if [ -n "${CLAVIER}" ]; then
	if [ -n "${LAYOUT}" ]; then
		OPTIONS=$OPTIONS" -keybd $PILOTE,,device=${CLAVIER},xkbrules=evdev,xkbmodel=evdev,xkblayout=${LAYOUT}"
		if [ -n "${VARIANT}" ]; then
			OPTIONS=$OPTIONS",xkbvariant=${VARIANT}"
		fi
	fi
fi

if [ -n "${SOURIE}" ]; then
	OPTIONS=$OPTIONS" -mouse $PILOTE,,device=${SOURIE}"
fi

# Lancement de Xephyr en arrière plan
echo "$XEPHYR -retro $OPTIONS :$POSTE"
exec $XEPHYR -retro  $OPTIONS :$POSTE

Petite explication sur la dernière ligne. Le "exec" fait en sorte que ce soit le processus de Xephyr qui prend la place du script, donc il reprend le PID et tout ce qui va bien. Cela permet surtout que le signal USR1 que Xephyr lance au PPID, soit bien récupéré par LightDM et que ce dernier continue son fonctionnement normalement.

Xephyr-greeter-setup.sh

Le contenu du fichier "Xephyr-greeter-setup.sh"

#!/bin/sh
# 2013-03 @ Mimoza
# http://www.isalo.org/wiki.debian-fr/Multiseat

####### Les fonctions #############

usage() {
  echo "Usage : $nom [OPTION...] -p|--poste numéroDePoste"
  echo "Usage : $nom -h|--help"
  echo "Options :"
  echo "\t -d, --deplacement : de la forme 'x,y' (en pixel)"
  echo "\t -v, --vt : 7, 8, 9, 10, 11 (defaut = 7)"
}

testExecutable() {
	XWININFO=`whereis -b xwininfo | cut -d' ' -f2`
	WMCTRL=`whereis -b wmctrl | cut -d' ' -f2`
}


####### VALEURS PAR DEFAUT #############
POSTE=$$ #On récupère le PID du process courant
DEPLACEMENT=
VT=7
XRACINE=0 # Permet de spécifier le serveur X à utiliser si différent du 0
ATTENTE=3 # temps en seconde avant de déclencher le "chvt" pour revenir sur le bon VT

####### ANALYSE DES OPTIONS #############
# Mode debug
set -x

# récupération du nom du script
nom=`basename $0`

# Cas particulier de sans option
if [ $# -lt 1 ]; then usage; exit 1; fi


# Vérification des outils disponibles
testExecutable
if [ -z "$XWININFO" -o -z "$WMCTRL" ]; then
	echo "Executable manquant :"
	echo "xwininfo : "$XWININFO
	echo "wmctrl : "$WMCTRL
	exit 2
fi

# Analyse des autres options
OPTIND=0

while getopts ":p:d:v:h" option
do
	echo "(-- option:'$option'  ind:'$OPTIND' optarg:'$OPTARG' --)"
	case $option in
		p|poste)
			POSTE=$OPTARG
		;;

		d|deplacement)
			DEPLACEMENT="$OPTARG"
		;;
	
		v|vt)
			VT=$OPTARG
		;;

		h|help)
			usage
			exit 1
		;;

		:)
			echo "l'option '$OPTARG' nécessite un argument"
		;;

		\?) echo " option '$OPTARG'  INVALIDE" >&2
	esac
done

####### TRAITEMENT EFFECTIF #############
# Mise en place des variable d'environnement
export DISPLAY=:$XRACINE
export XAUTHORITY=/var/run/lightdm/root/:$XRACINE

# Vieux Hack tout bancal pour revenir au bon VT sans patcher LightDM
(sleep $ATTENTE ; chvt $VT)&

# Deplacement de la fenetre si besoin
if [ -n "$DEPLACEMENT" ]; then
	#On recherche l'ID de la fenêtre Xephyr
        XEP=`XAUTHORITY=/var/run/lightdm/root/:$XRACINE $XWININFO -root -children -all -display :$XRACINE | grep "Xephyr on :$POSTE" --max-count=1`;

	if [ -z "$XEP" ]; then
		echo "fenêtre Xephyr non trouvé pour le poste $POSTE"
		exit 5
	fi
    XEPHYR_WIN_ID=`echo ${XEP} | cut -d' ' -f1`;
    $WMCTRL 2>&1 -v -i -r ${XEPHYR_WIN_ID} -e 0,${DEPLACEMENT},-1,-1;
	if [ $? -ne 0 ]; then
		echo "Erreur lors du déplacement de la fenêtre Xephyr pour le poste $POSTE"
		exit 7
	fi
fi

# Mise en place des variables d'environnement pour le greeter (utile ?)
export DISPLAY=:$POSTE
export XAUTHORITY=/var/run/lightdm/root/:$POSTE

Petite explication concernant la ligne suivante

(sleep $ATTENTE ; chvt $VT)&

Comme je n'ai pas patché LightDM pour éviter le changement de VT et que Xephyr m'empêche de faire un Ctrl+Alt+7 (avec le driver evdev) pour revenir au bon VT, j'ai du mettre en place un automatisme. Certes c'est loin d'être parfait mais ça rempli correctement son office.

session-setup-script.sh

Script indispensable pour retourner sur le bon VT une fois l'utilisateur identifié.

#!/bin/sh
# 2013-03 @ Mimoza
# http://www.isalo.org/wiki.debian-fr/Multiseat

####### VALEURS PAR DEFAUT #############
VT=7
ATTENTE=5 # temps en seconde avant de déclencher le "chvt" pour revenir sur le bon VT

while getopts ":a:v:h" option
do
	echo "(-- option:'$option'  ind:'$OPTIND' optarg:'$OPTARG' --)"
	case $option in
		a|attente)
			ATTENTE=$OPTARG
		;;
		v|vt)
			VT=$OPTARG
		;;

		h|help)
			usage
			exit 1
		;;

		:)
			echo "l'option '$OPTARG' necessite un argument"
		;;

		\?) echo " option '$OPTARG'  INVALIDE" >&2
	esac
done

# Vieux Hack tout bancal pour revenir au bon VT sans patcher LightDM
(sleep $ATTENTE ; chvt $VT)&

etc/init.d/lightdm

Il se peut que tout ne se passe pas comme prévu et que l'interface de connexion ne s'affiche pas, ni sur le VT affiché ni sur un autre. cependant en faisant un arrêt relance du serveur tout se passe bien. Pour résoudre ce souci il suffit de modifier très légèrement le script d'init, il faut ajouter une contrainte ($all) sur la ligne suivante.

# Required-Start:    $local_fs $remote_fs x11-common $all

Ensuite il faut faire un simple couple de commande :

# update-rc.d -f  lightdm remove
# update-rc.d lightdm defaults

Et la réorganisation devrait être prise en compte.

Modification du système

Montage des périphériques USB

On se rend assez vite compte que si l'on branche une clé USB elle n'apparaît pas automatiquement sur le bureau et elle est encore moins "montable" par un utilisateur classique. Elle apparaît bien dans la liste des périphériques accessibles (volet de gauche sur nautilus) mais il y a un problème de droits.
Un petit rappel de la chaîne mise en jeu lorsque l'on branche une clé USB ou tout autre périphérique.

  • Détection par le noyau de l'ajout d'un matériel
  • Udev prend le relais et créé les périphériques block nécessaires dans /dev
  • PolicyKit termine le travail en mettant en place les autorisations adéquates

Donc le blocage vient de ce dernier composant, il ne reconnaît pas une session Xephyr comme "active" et donc refuse le montage de ce type de périphérique par l'utilisateur lambda. Pour passer au delà de cette limitation on va redéfinir la règle de montage, pour cela il faut aller dans le répertoire suivant :

/etc/polkit-1/localauthority/50-local.d

Et y créer un fichier, "10-udisk.pkla" par exemple

[Allow mounting from Xephyr]
Identity=*
Action=org.freedesktop.udisks.change;org.freedesktop.udisks.drive-detach;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.filesystem-unmount-others
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Voilà, avec Gnome3 dans le volet de gauche de Nautilus on peut cliquer sur l'icône de la clé USB pour qu'elle se monte correctement, idem avec LXDE. Je recommande de désactiver l'automontage des périphériques USB afin que l'utilisateur qui branche la clé puisse la monter sans interférence.

Gestion de l'énergie

De la même manière que précédemment, par défaut il est impossible d'éteindre l'ordinateur depuis la session graphique (hors LightDM). Donc pour cela on créé un nouveau fichier (20-upower.pkla) dans :

/etc/polkit-1/localauthority/50-local.d
[Suspend/hibernate permissions]
Identity=*
Action=org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Gestion du son

Par défaut Pulseaudio est lancé lors de l'identification d'un utilisateur, du coup il est le seul qui puisse utiliser la carte son. Pour pallier à ce problème il faut rendre pulseaudio démon du système. Pour cela il faut modifier plusieurs fichiers de configuration :

  • /etc/default/pulseaudio
PULSEAUDIO_SYSTEM_START=1
  • /etc/pulse/daemon.conf
daemonize = yes
local-server-type = system
  • /etc/pulse/client.conf
autospawn = no
  • Modifier les utilisateurs en les ajoutant au groupe "pulse-access"
usermod -aG pulse-access <username>
  • On peut enlever l'utilisateur des groupes "audio" et "pulse" pour éviter qu'il prenne la main sur la carte son ou Pulseaudio
deluser <username> audio
deluser <username> pulse

(source source2)

Modification des DE (Gnome, KDE, LXDE, ...)

Par défaut les environnements graphique exécutent Pulseaudio en espace utilisateur, ce qu'il ne faut plus faire puisqu'il est partagé, ce qui ne devrait plus être possible si vous avez enlevé les utilisateurs des groupes. Donc il est nécessaire de désactiver cela avec l'outil de votre environnement de Bureau. Par exemple pour LXDE il s'agit de lxsession, si vous avez des problème pour cet environnement cette page (et ses liens) devrait vous aider

Aller plus loin

  • Si l'on veut restreindre ce droit par utilisateur ou par groupe on modifie la ligne "Identity" comme il suit
Identity=unix-user:toto;unix-group:plugdev
  • Pour creuser un peu plus la configuration de ce système on peux aller voir cette page sur PolicyKit
  • Il serait aussi intéressant de définir des ports USB réservés pour chaque siège, mais je ne sais pas encore comment gérer cela.
  • Voir s'il est possible de dédier les voies arrière à un poste et les voies avant à un autre ...

Conclusion

Et voilà, tout est prêt pour le redémarrage et admirer les mires de login sur leur écran respectif.

Avantages

  • Avec du matériel de récupération on peut facilement mettre en place cette solution peu coûteuse
  • La satisfaction d'avoir un poste de travail exotique
  • Permettre à une tierce personne de profiter de la puissance monstre des machines récentes sans se priver de notre fauteuil favori
  • Se sentir moins seul avec une/plusieurs personnes à coté de soi :-p

Inconvénients

  • Accélération graphique fortement diminuée
  • Si on débranche les claviers/souries Xephyr ne sait pas les reconnaître automatiquement au branchement. Il faut relancer Xephyr en se déconnectant ou relancer LightDM
  • Un "saut" des 2 écrans lors de la déconnexion d'un poste, mais cela est dû à LightDM et son changment de VT intempestif.
  • Surveillance de chaque mise à jour de Xorg pour ne pas avoir de surprise au redémarrage
  • Recompilation nécessaire en cas de mise à jour majeure de Xorg
  • Gestion des montages USB non optimale
  • Les voyants du clavier (pavé numérique, Majuscule et arrêt défil) ne réagissent plus, mais le clavier réagit correctement.
  • Dans l'espace de travail de certains logiciel (VLC, Gimp) la souris peut avoir un affichage lacunaire. Par exemple sous GIMP elle n'est visible que lorsqu'on la déplace, avec VLS il y a un carré noir autour d'elle quand on la déplace le reste du temps elle disparait.

Remerciement

Un grand merci à ce site pour m'avoir prémaché le travail ... ce qui ne m'as pas empêché d'apporter quelques améliorations à sa solution. http://beforeafterx.blogspot.fr/2012/08/configuration-of-ligthdm-12.html