Objetivos
Ventajas
Desventajas
Supongamos que queremos N terminales, entonces precisaremos:
Después de conectar todo tenemos que averiguar:
Primero encontraremos los Teclados y Mouses, para eso ejecutaremos
# cat /proc/bus/input/devices I: Bus=0019 Vendor=0000 Product=0002 Version=0000 N: Name="Power Button (FF)" P: Phys=button_power/button/input0 S: Sysfs=/class/input/input0 H: Handlers=kbd event0 B: EV=3 B: KEY=100000 0 0 0 I: Bus=0019 Vendor=0000 Product=0001 Version=0000 N: Name="Power Button (CM)" P: Phys=PNP0C0C/button/input0 S: Sysfs=/class/input/input1 H: Handlers=kbd event1 B: EV=3 B: KEY=100000 0 0 0 I: Bus=0011 Vendor=0001 Product=0001 Version=ab41 N: Name="AT Translated Set 2 keyboard" P: Phys=isa0060/serio0/input0 S: Sysfs=/class/input/input2 'H: Handlers=kbd event2' B: EV=120013 B: KEY=4 2000000 3802078 f840d001 feffffdf ffefffff ffffffff fffffffe B: MSC=10 B: LED=7 I: Bus=0011 Vendor=0002 Product=0005 Version=0000 N: Name="ImPS/2 Generic Wheel Mouse" P: Phys=isa0060/serio1/input0 S: Sysfs=/class/input/input3 'H: Handlers=mouse0 event3' B: EV=7 B: KEY=70000 0 0 0 0 0 0 0 0 B: REL=103 I: Bus=0003 Vendor=1241 Product=1111 Version=0110 N: Name="HID 1241:1111" P: Phys=usb-0000:00:02.0-6/input0 S: Sysfs=/class/input/input4 'H: Handlers=mouse1 event4' B: EV=7 B: KEY=70000 0 0 0 0 0 0 0 0 B: REL=103
Nota: No usar el driver VESA en ningún dispositivo
Section "Files" # FontPath "unix/:7100" RgbPath "/usr/X11R6/lib/X11/rgb" EndSection Section "Module" Load "bitmap" Load "ddc" # Load "dri" Load "extmod" Load "freetype" # Load "glx" Load "int10" Load "vbe" EndSection # --- Desde aquí hay que repetir estas secciones tantas veces como terminales querramos --- # --- cambiando los identificadores y las características del hardware según sea necesario --- # Teclados Section "InputDevice" Identifier "Keyboard0" Driver "evdev" Option "Device" "/dev/input/event0" # Cambiar event0 por lo que corresponda Option "XkbModel" "evdev" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbLayout" "es" EndSection Section "InputDevice" Identifier "Mouse" Driver "mouse" Option "CorePointer" Option "Device" "/dev/input/mouse0" # Cambiar mouse0 por lo que corresponda Option "Protocol" "imPS/2" Option "Buttons" "5" Option "ZAxisMapping" "4 5" EndSection Section "Device" Identifier "Tarjeta0" Driver "ati" BusID "PCI:1:0:0" Option "NoInt10" "Yes" # Anulamos la inicialización de la placa por BIOS Option "DDCMode" "True" Option "MonitorLayout" "CRT, CRT" EndSection Section "Monitor" Identifier "Monitor0" Option "DPMS" HorizSync 30-70 VertRefresh 50-160 EndSection Section "Screen" Identifier "Screen0" Device "Tarjeta0" Monitor "Monitor0" DefaultDepth 24 Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection Section "ServerLayout" Identifier "Layout0" Screen "Screen0" InputDevice "Keyboard0" InputDevice "Mouse0" EndSection # --- De aquí en más lo que sigue no hay que repetirlo --- # Este layout puede ser utilizado para probar las placas usando Xinerama Section "ServerLayout" Identifier "Layout2" Screen "Screen0" 0 0 Screen "Screen1" RightOf "Screen0" Screen "Screen2" RightOf "Screen1" ... InputDevice "Keyboard0" "SendCoreEvents" InputDevice "Mouse0" "SendCoreEvents" Option "Xinerama" "on" EndSection Section "DRI" Mode 0666 EndSection
Precisaremos una copia de esta configuración para inicializar las placas de vídeo. Copiamos la configuración realizada a /etc/xorg.conf.probe, borrando todos los ServerLayout excepto el que usa Xinerama y enumera a todos los Devices, además modificamos para cada Device la opción "NoInt10" a "No" como se muestra a continuación.
Section "Device" Identifier "Tarjeta0" Driver "ati" BusID "PCI:1:0:0" Option "NoInt10" "No" # Habilitamos la inicialización de la placa por BIOS Option "DDCMode" "True" Option "MonitorLayout" "CRT, CRT" EndSection
Para inicializar todos los Devices cada vez que el equipo arranca debemos escribir un script en /etc/init.d/xorg-multiterminal
#!/bin/bash file=/etc/X11/xorg.conf.probe echo Configurando Xorg para MultiHead /usr/X11R6/bin/X -config "$file" -probeonly 2>/dev/null
le cambiamos los permisos con
chmod 755 /etc/init.d/xorg-multiterminal
y agregamos los links en el runlevel correspondiente con
update-rc.d xorg-multiterminal start 70 S
Para que GDM utilice todos los display por defecto tenemos que agregar las siguientes lineas en el archivo /etc/gdm/gdm.conf reemplazando el argumento de isolateDevice por el "BusId" de cada dispositivo
### Configuración del Servidor ### [servers] 0=Server0 1=Server1 ... ### Configuración por terminal ### [server-Server0] name=Server 0 command=/usr/X11R6/bin/X -novtswitch -sharevts -isolateDevice PCI:x:y:z -layout Layout0 flexible=true
[server-Server1] name=Server 1 command=/usr/X11R6/bin/X -novtswitch -sharevts -isolateDevice PCI:p:q:t -layout Layout1 flexible=true ...