Hardware-hard plus-pca2

De Lea Linux
Aller à la navigation Aller à la recherche


Deux utilisateurs simultanément sur un seul PC

Deux utilisateurs simultanément sur un seul PC
Avec Deux écrans, deux cartes graphiques deux souris, deux clavier MAIS un seul PC, on peut travailler à deux en même temps.

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...

  1. Télécharger et installer les sources du noyau 2.6.3-7
    urpmi kernel-source
    Si vous travaillez déjà avec ce noyau.
  2. 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/
  3. Patcher le noyau (en mode root)
    cd /usr/src/linux-2.6.3-7mdk/

    patch -p0 < linux-2.6.2-disable-usb-keyboard.patch
  4. 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)
  5. Copier le nouveau noyau dans le répertoire /boot
    cp arch/i386/boot/bzImage /boot/vmlinux-2.6.3-7-usb
  6. Ajouter le nouveau noyau dans /etc/lilo.conf
    image=/boot/vmlinux-2.6.3-7-usb
    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
    *Je n'ai changé que les deux premières lignes par rapport aux autres images de lilo.
  7. Exécuter lilo pour que les changements soient pris en compte.
    lilo

Vérifier si la modification a fonctionné  :

cat /proc/bus/input/devices


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

  1. 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-xfree

    cd sources-xfree/

  2. 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
  3. Télécharger le patch
    *Le patch est fait pour XFree4.3, mais a fonctionné sans erreur avec XFree4.4.
  4. Patcher les sources de XFree dans le répertoire créé en décompressant  :
    patch -p1 < XFree86-4.3.0-unified.patch
  5. Entrer dans le répertoire créé lors de la décompression
    cd xc
  6. compiler (c'est à peu près aussi long que pour le noyau)
    make World >& world.log
    (en faisant dans un autre terminal un
    tail -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...)
  7. Installer le nouveau XFree. Passer en mode root et taper:
    make install
    (il ne faut pas avoir changé de répertoire....)
  8. 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.rpm
    mv /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

Section "InputDevice"
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  :

cat /dev/input/eventX

et essayez les. Celui concerné envoie alors des caractères (n'importe quoi) sur la console.

Les souris

Section "InputDevice"
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

Section "Monitor"
Identifier "monitor0"
....vos paramètres
EndSection
Section "Monitor"
Identifier "monitor1"
....vos paramètres
EndSection

Les cartes graphiques

Section "Device"
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  :

lspci| grep VGA

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

Identifier "screen0"
Device "device0"
Monitor "monitor0"

et pour l'autre

Identifier "screen1"
Device "device1"
Monitor "monitor1"

Enfin la section ServerLayout

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  :

kde -- -layout X0

(ça doit marcher d'un coté)

kde -- -layout X1

(ç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  !!

NOTE : Je viens de réinstaller le driver propriétaire NVIDIA sans problème après ces manipulations. Il faut faire attention à ne pas avoir la ligne Load "dri" dans la section Modules et changer nv par nvidia, comme avant. Celui qui veut la 3D sur ses deux cartes (si les 2 ne sont pas des NVIDIA), se reportera au "XFree-Local-multi-user-HOWTO" (le lien est ci-dessous).

Problèmes connus

  1. Une barre noire horizontale apparait parfois sur l'écran primaire s'il n'y a pas d'utilisateur connecté.
  2. 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 X2
    une fois connecté

Sources de documentation




@ Retour à la rubrique Matériel

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Thierry Chabot le 19/08/2004.

Copyright

Copyright © 19/08/2004, Thierry Chabot

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
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/