Lihuen
RSSRSS AtomAtom

Diferencia entre revisiones de «Multiterminales con Xorg»

(Lo que precisamos saber del hardware)
Línea 49: Línea 49:
 
  P: Phys=isa0060/serio0/input0
 
  P: Phys=isa0060/serio0/input0
 
  S: Sysfs=/class/input/input2
 
  S: Sysfs=/class/input/input2
  'H: Handlers=kbd event2'
+
  ''H: Handlers=kbd event2''
 
  B: EV=120013
 
  B: EV=120013
 
  B: KEY=4 2000000 3802078 f840d001 feffffdf ffefffff ffffffff fffffffe
 
  B: KEY=4 2000000 3802078 f840d001 feffffdf ffefffff ffffffff fffffffe
Línea 59: Línea 59:
 
  P: Phys=isa0060/serio1/input0
 
  P: Phys=isa0060/serio1/input0
 
  S: Sysfs=/class/input/input3
 
  S: Sysfs=/class/input/input3
  'H: Handlers=mouse0 event3'
+
  ''H: Handlers=mouse0 event3''
 
  B: EV=7
 
  B: EV=7
 
  B: KEY=70000 0 0 0 0 0 0 0 0
 
  B: KEY=70000 0 0 0 0 0 0 0 0
Línea 68: Línea 68:
 
  P: Phys=usb-0000:00:02.0-6/input0
 
  P: Phys=usb-0000:00:02.0-6/input0
 
  S: Sysfs=/class/input/input4
 
  S: Sysfs=/class/input/input4
  'H: Handlers=mouse1 event4'
+
  ''H: Handlers=mouse1 event4''
 
  B: EV=7
 
  B: EV=7
 
  B: KEY=70000 0 0 0 0 0 0 0 0
 
  B: KEY=70000 0 0 0 0 0 0 0 0

Revisión de 22:06 20 nov 2007

Preparación

Objetivos

  • Obtener múltiples terminales con solo una estación de trabajo
  • Aprovechar monitores en desuso
  • Aprovechar el poder de procesamiento de un equipo nuevo

Ventajas

  • Menores costos de hardware
  • Administración centralizada
  • Ahorro de energía

Desventajas

  • Un único punto de falla

Materiales necesarios

Supongamos que queremos N terminales, entonces precisaremos:

  • Al menos N - 1 Teclados USB
  • Al menos N - 1 Mouses USB
  • Si son necesarios un teclado y/o un mouse miniPS/2
  • N monitores
  • N placas de vídeo (notar que algunas placas de vídeo integradas no pueden ser utilizadas al agregar una placa de vídeo extra)
  • Una motherboard con suficientes slots PCI/AGP/PCI-E libres para conectar todas las placas y suficientes conectores USB para todos los teclados y mouses

Lo que precisamos saber del hardware

Después de conectar todo tenemos que averiguar:

  • Donde encontrar el dispositivo de cada Mouse
  • Donde encontrar el dispositivo de cada Teclado
  • Driver de cada placa de vídeo
  • BusId de cada placa de vídeo

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


Configuración de Xorg

  • Ejemplo de xorg.conf:
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
 

Inicializando las placas de vídeo

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

Configurando GDM

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