Multiterminal/Usando evdev

De Wikilibros, la colección de libros de texto de contenido libre.

Sistema Operativo[editar]

Debian Sarge Hardware:

Tarjetas de video:

  • 4 tarjetas marca SiS

Dispositivos de entrada:

  • 1 PS/2 keyboard
  • 1 PS/2 mouse
  • 3 USB keyboards
  • 3 USB mice

Asegurate que el kernel este compilado con el modulo evdev .

También necesitas instalar udev, el cual provee de un directorio /dev actualizado con los dispositivos disponibles.

apt-get install udev

El sistema udev requiere un kernel 2.6.12 o mayor.

Instalando el driver SiS[editar]

1. Agrega estas lineas al archivo /etc/apt/sources.list:

http://www.winischhofer.net/sis/debian/stable ./

2. Actualiza la base de datos de los paquetes e instala el paquete x-driver-sis :

apt-get update
apt-get install x-driver-sis

Hotplug[editar]

Instala el paquete hotplug :

apt-get update
apt-get install hotplug

Dispositivos de entrada[editar]

Antes de proceder, necesitamos estar seguros que los dispositivos de entrada ( teclados y ratones) están detectados apropiadamente. Lee el contenido de /proc/bus/input/devices, éste archivo contiene los detalles de los dispositivos de entrada detectados por el kernel . Un ejemplo de este archivo se muestra a continuación. Únicamente dos campos son de nuestro interés : el nombre de dispositivo, contenido en las líneas que empiezan con “N: Name=”, y la dirección física, en las líneas que empiezan con “P: Phys”.

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
H: Handlers=kbd event0
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 f2ffffdf 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
H: Handlers=mouse0 event1
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-0000:00:10.2-1/input0
H: Handlers=kbd event2
B: EV=120003
B: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: LED=7

I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-0000:00:10.2-1/input1
H: Handlers=kbd event3
B: EV=3
B: KEY=1f 0 20000 3878 d801d101 1e0000 0 0 0

I: Bus=0003 Vendor=04fc Product=0013 Version=06b0
N: Name="USB OpticalWheel Mouse"
P: Phys=usb-0000:00:10.2-2/input0
H: Handlers=mouse1 event4
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

Nota que el archivo parece mostrar que existen tres teclados, aunque solo haya dos. La razón para ésto, es que muchos teclados incluyen teclas especiales ( como los botones multimedia o las teclas rápidas a internet ), cuando son detectados por el kernel son convertidas a un teclado secundario. Los teclados secundarios tienen una dirección física que termina en “input1”. Trataremos únicamente con los teclados primarios, los cuales en su dirección física terminan en “input0”. Las secciones con teclados que en su dirección física terminen con “usb-0000:00:10.2-1/input1” serán ignoradas.

Servidor XOrg[editar]

El siguiente paso es instalar el servidor XOrg.

1. Realiza un backup y quita el archivo /etc/init.d/xfree-common.

2. Agrega las siguientes líneas a /etc/apt/sources.list:

deb http://people.debian.org/~nobse/xorg-x11/ sarge main
deb-src http://people.debian.org/~nobse/xorg-x11/ sarge main

3. Instala el paquete xserver-xorg :

apt-get update
apt-get install xserver-xorg
apt-get upgrade

Configuración del servidor XOrg[editar]

xorg.conf[editar]

Ésta configuración será usada cuando el multiterminal esté corriendo. El archivo tendrá secciones adicionales acorde al número de terminales. Por cada terminal, tendremos que crear un sección para el mouse, teclado, graphic device, monitor, screen y layout. Por ejemplo, en una multiterminal con cuatro terminales, el archivo tendrá cuatro secciones para mouse, cuatro para teclado, y así sucesivamente.

Los valores del “Identificador” pueden ser cualquiera. Pero deben ser consistentes en todo el archivo.

La opción de dirección física (“Dev Phys”) puede ser obtenida desde el archivo /proc/bus/input/devices, como lo habíamos explicado anteriormente.

Aquí hay un exemplo para cada tipo de sección.

Section "InputDevice"
        Identifier      "Generic Keyboard 0"
        Driver          "kbd"

        # Cambia el valor de la opción  "Dev Phys" 
        # para que corresponda con el teclado, ésta la encuentras en el archivo:
        # /proc/bus/input/devices .
        Option          "Protocol"      "evdev"
        Option          "Dev Phys"      "isa0060/serio0/input0"

        # Configure your keyboard as usual
        Option          "XkbRules"      "xorg"
        Option          "XkbModel"      "pc104"
        Option          "XkbLayout"     "us"
        Option          "CoreKeyboard"
EndSection


Section "InputDevice"
        Identifier      "Configured Mouse 0"
        Driver          "mouse"

        # Cambia el valor de la opción  "Dev Phys" 
        # para que corresponda con el mouse, ésta la encuentras en el archivo:
        # /proc/bus/input/devices .
        Option          "Protocol"      "evdev"
        Option          "Dev Phys"      "isa0060/serio1/input0"

        # All mice should have "CorePointer"
        Option          "CorePointer"
        Option          "ZAxisMapping"          "4 5"
EndSection


Section "Device"
        Identifier      "Generic Device 0"
        Driver          "sis"
        Screen          0

        # All cards must have an explicit BusID.  The addresses may be
        # obtained with "lspci | grep VGA".  Be careful with the
        # values, since lscpi displays hexadecimal addresses and XOrg
        # expects decimal.  For conversion, use
        # "echo $((0xVALOR_HEXADECIMAL))".
        BusID           "PCI:1:0:0"

        # This option disables VGA and VBE calls on IRQ 10, to avoid
        # calls for a card interfering with the others.  See also the
        # file "xorg.conf.probe".
        Option          "NoInt10"       "Yes"

        # This SiS driver options prevent problems when switching
        # virtual terminals or finishing the X server.
        Option          "RestoreBySetMode"      "no"

EndSection


# These are default values.  Configure your monitors as usual.
Section "Monitor"
        Identifier      "Generic Monitor 0"
        HorizSync       30-60
        VertRefresh     50-75
        Option          "DPMS"
EndSection


# The screen configuration is also illustrative, change it to your
# preference.
Section "Screen"
        Identifier      "Default Screen 0"
        Device          "Generic Device 0"
        Monitor         "Generic Monitor 0"
        DefaultDepth    24
        SubSection "Display"
        Depth           24
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
EndSection


Section "ServerLayout"
        # The Identifier value will be used in the command-line call.
        Identifier      "Layout0"
        Screen          "Default Screen 0"
        InputDevice     "Generic Keyboard 0"
        InputDevice     "Configured Mouse 0"

        Option          "SingleCard"
EndSection

xorg.conf.probe[editar]

Además del archivo estándar xorg.conf necesitaremos otro archivo de configuración, xorg.conf.probe. Mientras el multiterminal esté corriendo, debemos deshabilitar la interrupciones del (IRQ 10) para eliminar las interferencias entre las tarjetas de video cuando se inicializan. Sin embargo,sin estas llamadas las tarjetas secundarias ( extras ) no serán inicializadas. Para resolver éste problema, durante la inicialización del sistema, el servidor XOrg se correrá con el archivo xorg.conf.probe . Éste probará las tarjetas extra con las llamadas al IRQ 10 activadas durante la prueba, ésto las inicializará correctamente.

Para crear tu archivo xorg.conf.probe, toma el archivo xorg.conf como base, quita las secciones relacionadas con la tarjeta primaria (la cual es inicializada por el BIOS cuando la computadora enciende) y pon todas las opciones NoInt10 a "No". Un único layout es suficiente, en él incluye a todas las tarjetas secundarias ( extras ) Abajo se muestran algunas secciones de el archivo xorg.conf.probe el cual fue derivado del xorg.conf previo:

# In all Device (graphics card) sections, toggle NoInt10 to:
        Option          "NoInt10"               "no"

# Declare only one layout, and without the "SingleCard" option.
# All the secondary screens should be present.  Their position
# (LeftOf, etc.) is not significant, nor the input devices.

Section "ServerLayout"
        Identifier      "probe"
        Screen          "Default Screen 1"
        Screen          "Default Screen 2"   LeftOf  "Default Screen 1"
        Screen          "Default Screen 3"   LeftOf  "Default Screen 2"
        InputDevice     "Generic Keyboard 1"
        InputDevice     "Configured Mouse 1"
EndSection

Para correr la prueba debemos crear el script xorg-multiterminal . Éste corre el servidor X in modo probeonly (checa cada adaptador de video y sale ), usando el archivo xorg.conf.probe como el archivo de configuración. Como explicamos antes, este paso inicializa las tarjetas de video. El contenido del archivo son :

file=/etc/X11/xorg.conf.probe

[[ -f "file" ]] && /usr/X11R6/bin/X -config "$file" -probeonly 2>/dev/null

Guárdalo con el bit de ejecutable activado y configura la inicialización del sistema para correr el script. En Debian, el path deberia ser /etc/init.d/xorg-multiterminal, y aquí hay dos modos de configurar el sistema:

  • A través del comando update-rc.d . Este funciona tanto para los usuario con el sistema default de Debian (sysv-rc) y los usuarios del paquete file-rc .
update-rc.d xorg-multiterminal start 70 S .
  • Manualmente:

En un sistema Debian con el sistema de inicio default, crea un link simbólico:

<pre.ln -s /etc/init.d/xorg-multiterminal /etc/rcS.d/S70xorg-multiterminal

En un sistema debian con el paquete file-rc , agrega la siguiente linea en el lugar apropiado del archivo /etc/init.d/runlevel.conf :

70        -        S        /etc/init.d/xorg-multiterminal

GDM[editar]

El último paso es configurar el manejador de login para que inicie todos los servidores X. Únicamente veremos como configurar uno: GDM. Otros manejadores de login como XDM y KDM pueden ser configurados de manera similar.

La sección “[servers]” del archivo /etc/gdm/gdm.conf deberá tener múltiples entradas, como en el siguiente ejemplo de cuatro terminales:

[servers]
0=XServer0
1=XServer1
2=XServer2
3=XServer3

El nombre de los servidores es arbitrario. Una sección deberá ser agregada por cada una, con el contenido como se muestra abajo:

[server-XServer0]
name=Standard server
command=/usr/X11R6/bin/X -br -audit 0 -layout Layout0 :0 vt7 -sharevts
flexible=true

[server-XServer1]
name=Standard server
mmand=/usr/X11R6/bin/X -br -audit 0 -layout Layout1 :1 vt8 -sharevts
flexible=true

[server-XServer2]
name=Standard server
mmand=/usr/X11R6/bin/X -br -audit 0 -layout Layout2 :2 vt9 -sharevts
flexible=true

[server-XServer3]
name=Standard server
mmand=/usr/X11R6/bin/X -br -audit 0 -layout Layout3 :3 vt10 -sharevts
flexible=true

Problemas[editar]

Cuando hay problemas en la inicialización de las terminales estas son reportadas a los archivos /var/log/Xorg.*.log. Cada terminal X crea su propio archivo de logs.

Veja también[editar]