Hardware-hard plus-pca2
Deux utilisateurs simultanément sur un seul PC
Introduction
Après plusieurs essais infructueux, voici une configuration (sans doute pas la seule, mais celle que j'ai réussi) qui m'a permis de le faire.
J'ai travaillé à partir d'une Mandrake 10.0 avec le kernel 2.6.3-7mdk
Mon matériel :
- 1 carte graphique PCI S3 virge ET 1 carte graphique AGP NVIDIA Riva TNT2
- 1 clavier PS2 ET 1 Clavier usb (logitech) (Il faut obligatoirement : une connexion PS/2 et une usb mais ça marche avec deux clavier PS/2 dont un branché avec un adaptateur PS2-USB)
- 1 souris PS2 (microsoft) ET 1 souris usb (logitech)
Prérequis
- Configuration de XFree (DrakConf ou à la main)
- Téléchargement et décompression de fichiers (en mode graphique ou pas)
- Démarrage de linux sans X, mode console, root...
Résumé du travail à faire
- Installer et tester le matériel (débrouillez-vous)
- Modifier le kernel
- Modifier et configurer XFree86
- Tester et modifier xdm
Le kernel
Pour éviter les conflits entre les deux claviers, il faut empêcher le noyau 2.6 de reconnaître le clavier usb. Voici la procédure.
Pour éviter les fautes de frappe, faites des copier/coller des instructions avec la souris (tout ce qui est sur fond jaune très pale encadré) dans une console, et ça doit aller tout seul.
Pour savoir ou vous en êtes, vous pouvez cocher les petites cases à chaque étape. Ca détend et ce n'est pas forcément inutile...
- Télécharger et installer les sources du noyau 2.6.3-7 urpmi kernel-sourceSi vous travaillez déjà avec ce noyau.
- Télécharger le patch
et le copier dans le répertoire /usr/src/linux-2.6.3-7mdk/ (en mode root)cp linux-2.6.2-disable-usb-keyboard.patch /usr/src/linux-2.6.3-7mdk/ - Patcher le noyau (en mode root) cd /usr/src/linux-2.6.3-7mdk/patch -p0 < linux-2.6.2-disable-usb-keyboard.patch
- Compiler (je n'ai eu à changer aucune option) make clean && make bzImage && make modules && make modules_install*C'est très long (2h sur un 1,2 Ghz)
- Copier le nouveau noyau dans le répertoire /boot cp arch/i386/boot/bzImage /boot/vmlinux-2.6.3-7-usb
- Ajouter le nouveau noyau dans /etc/lilo.conf image=/boot/vmlinux-2.6.3-7-usb*Je n'ai changé que les deux premières lignes par rapport aux autres images de lilo.
label="263-7-usb"
root=/dev/hdxx (xx= a1, a2, b1 , etc.. voir les autres lignes du fichier)
initrd=/boot/initrd-2.6.3-7mdk.img
append="devfs=mount acpi=ht splash=silent"
vga=788
read-only - Exécuter lilo pour que les changements soient pris en compte. lilo
Vérifier si la modification a fonctionné :
Avant de redémarrer sur le nouveau noyau,vous devez trouver pour les deux claviers une ligne du genre Handlers=kbd event1
En démarrant sur le noyau modifié,vous devez trouver la même chose pour le clavier PS/2, mais pour le clavier usb les lettres "kdb" présentes dans l'ancien noyau doivent avoir disparu avec le nouveau noyau.
XFree
Il faut maintenant patcher Xfree pour pouvoir démarrer deux sessions (+clavier+souris) différentes en même temps. La mandrake 10.0 utilise la version 4.3 de Xfree.
Les commandes sont à taper dans l'ordre indiqué en tant que simple utilisateur dans votre console et tout doit bien ce passer
- Télécharger les sources de XFree. Je ne sais plus pourquoi j'ai téléchargé des sources de XFree 4.4 (ça fonctionne avec XFree 4.3) mkdir sources-xfreecd sources-xfree/
- Décompresser les 7 fichiers sources téléchargés (je ne sais pas s'ils sont tous utiles) for i in *.tgz;do tar zxvf $i;done
- Télécharger le patch
*Le patch est fait pour XFree4.3, mais a fonctionné sans erreur avec XFree4.4. - Patcher les sources de XFree dans le répertoire créé en décompressant : patch -p1 < XFree86-4.3.0-unified.patch
- Entrer dans le répertoire créé lors de la décompressioncd xc
- compiler (c'est à peu près aussi long que pour le noyau) make World >& world.log(en faisant dans un autre terminal untail -f world.log_à partir du même répertoire_ vous pouvez patienter en regardant ce que fait le compilateur). Si vous avez autant de chance que moi, la compilation réussira. (Il faut si besoin avoir installé "bison" et "flex" :urpmi...)
- Installer le nouveau XFree. Passer en mode root et taper: make install(il ne faut pas avoir changé de répertoire....)
- Redémarrer X pour voir si ça marche encore.
*En cas de problème, pour retrouver votre ancien X il faut réinstaller la version fournie avec la distribution:rpm -i --replacefiles /mnt/cdrom/Mandrake/RPMS/XFree86-server-4.3-30mdk.i586.rpm(sans l'option replacefiles ça ne marche pas.). Il faut aussi réinstaller de la même manière XFree86-4.3-30mdk.i586.rpm XFree86-xfs-4.3-30mdk.i586.rpm et XFree86-75dpi-fonts-4.3-30mdk.i586.rpmmv /etc/rc5.d/S30dm /etc/rc5.d/S99dm
XFree (configuration)
Si tout s'est bien passé, il faut maintenant modifier le fichier /etc/X11/XF86Config-4 pour qu'il gère le tout.
Pour ne pas trop me casser la tête, j'ai utilisé DrakConf pour configurer ma carte AGP et son écran, copié XF86Config, puis recommencé avec ma carte PCI et son écran.
Il m'a suffi ensuite de tout mettre dans le même en ne modifiant que quelques détails.
Voici quelques lignes importantes de mon fichier de configuration.
Les claviers
Identifier "Keyboard0"
Driver "Keyboard"
Option "device" "/dev/input/event1"
Option "Protocol" "usbev"
Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
Option "XkbOptions" ""
Option "XkbRules" "xfree86"
EndSection
Section "InputDevice"
Identifier "Keyboard1"
Driver "Keyboard"
Option "Protocol" "usbev"
Option "device" "/dev/input/event2"
Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
Option "XkbOptions" ""
EndSection
* Important : mon clavier PS/2 est le Keyboard0 et l'usb Keyboard1 mais il FAUT la ligne Option "Protocol" "usbev" sur les DEUX.
Pour savoir sur quel /dev/input/eventX (ou /dev/input/mouseX) sont vos périphériques, tapez :
et essayez les. Celui concerné envoie alors des caractères (n'importe quoi) sur la console.
Les souris
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mouse0"
Option "ZAxisMapping" "4 5"
Option "Buttons" "3"
EndSection
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mouse1"
Option "ZAxisMapping" "4 5"
Option "Buttons" "3"
EndSection
- la configuration m'a semblé ici plus souple. J'ai une souris PS/2 (Mouse0) et une usb (Mouse1).
Les écrans
Identifier "monitor0"
....vos paramètres
EndSection
Section "Monitor"
Identifier "monitor1"
....vos paramètres
EndSection
Les cartes graphiques
Identifier "device1"
BoardName "RIVA TNT2"
Driver "nv"
BusID "PCI:2:0:0"
Option "DPMS"
Option "IgnoreEDID" "1"
EndSection
Section "Device"
Identifier "device0"
Driver "s3virge"
BusID "PCI:1:10:0"
Option "DPMS"
Option "IgnoreEDID" "1"
EndSection
* J'ai fait un certain nombre d'essais. Ca marche avec ces paramètres mais ils ne sont peut-être pas tous utiles.
Pour trouver la valeur de BusID, taper :
Pour moi, ça a donné :
01:0a.0 VGA compatible controller: S3 Inc. ViRGE/DX or /GX (rev 01)
02:00.0 VGA compatible controller: nVidia Corporation NV5M64 [RIVA TNT2 Model 64/Model 64 Pro] (rev 15)
Il faut transformer l'hexadécimal en décimal, et on a alors :
pour la carte S3virge : 01:0a.0 donne dans XF86Config "PCI:1:10:0"
et pour l'autre 02:00.0 donne "PCI:2:0:0"
Rappel : aux valeurs hexadécimales a, b, c, d, e et f correspondent les valeurs décimales 10, 11, 12, 13, 14 et 15.
la section screen
J'ai recopié tel que le contenu de la configuration des écrans, et ajouté pour l'un
Device "device0"
Monitor "monitor0"
et pour l'autre
Device "device1"
Monitor "monitor1"
Enfin la section ServerLayout
Identifier "X0"
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
Screen 0 "screen0" 0 0
Option "IsolateDevice" "1:10:0"
Option "SingleCard" "True"
EndSection
Section "ServerLayout"
Identifier "X1"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse1" "CorePointer"
Screen 0 "screen1" 0 0
Option "IsolateDevice" "2:0:0"
Option "SingleCard" "True"
EndSection
* Là encore, je ne sais pas si tout est utile (surtout les options)...
Attention : l'écran primaire du bios (celui qui s'allume le premier, soit AGP soit PCI -pour moi le PCI-) DOIT être relié au obligatoirement au clavier PS/2 (ici tous les "0")
Test et modification de xdm
C'est presque fini.... Petit test pour voir ce que ça donne :
(ça doit marcher d'un coté)
(ça doit marcher de l'autre coté)
- Configurer xdm pour avoir X sur les deux écrans au démarrage et y choisir son login. dans le fichier /etc/X11/xdm/Xservers commenter les lignes qui commencent par 0 et 1 et ajouter ces deux lignes ::0 local /usr/X11R6/bin/X :0 -nolisten tcp vt6 -layout X1 -nopciaccessdisable -novtswitches -delay 6
:1 local /usr/X11R6/bin/X :1 -nolisten tcp vt6 -layout X0 -nopciaccessdisable - Redémarrer ou taper /etc/init.d/dm start
Voilà , c'est déjà fini !!
Problèmes connus
- Une barre noire horizontale apparait parfois sur l'écran primaire s'il n'y a pas d'utilisateur connecté.
- Il ne faut pas déplacer les connexions USB, cela change l'ordre des périphériques d'entrée dans /dev/input/eventX et il faut alors modifier XF86Config-4
Extensions
Philippe LAFORGE propose une solution pour pouvoir en plus utiliser xinemara (le même utilisateur utilise les deux écrans en même temps) :
- Ajouter une section "ServerLayout" du genre :Section "ServerLayout"
Identifier "X2"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Screen "screen1"
Screen "screen2" LeftOf "screen1"
Option "IsolateDevice" "0:12:0"
Option "SingleCard" "True"
Option "Xinerama"
EndSection - Démarrer en mode interactif et ne pas démarrer X
- taper kde -- -layout X2une fois connecté
Sources de documentation
- http://cambuca.ldhs.cetuc.puc-rio.br/multiuser
- http://www.tldp.org/HOWTO/XFree-Local-multi-user-HOWTO/index.html
- http://www.stationlinux.org/articles/?id=16#screen
- http://disjunkt.com/dualhead/#ignusb
@ Retour à la rubrique Matériel
Copyright
Copyright © 19/08/2004, Thierry Chabot
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique, Contexte non commercial 2.0 : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ |