Multiterminal/Usando faketty

Introducción

editar

Este COMO describe los pasos necesarios para configurar un sistema multiterminal usando el módulo faketty.

Este módulo fue desarrollado por Aivils Stoss, el cual asocia los archivos de dispositivo /dev/fttyXX (donde XX es un número que identifica el teclado), los cuales el servidor X usa para leer los eventos producidos por el teclado. Este módulo usa el mismo protocolo que X usualmente utiliza para leer los eventos del teclado:, el protocolo TTY, lo cual elimina el tener que usar evdev.

Una ventaja sobre éste método es que no es necesario algun parche para el núcleo, la desventaja en ésta solución es que se necesita de tener un módulo compilado para el kernel que se esté utilizando.

Sistema Operativo

editar

Debian Sarge

Hardware usado

editar

Tarjetas de video:

  • 4 SiS 315 video cards

Keyboards y Mouses:

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

Compilando y cargando el módulo faketty

editar

Verifica que los archivos de cabecera del kernel que estés usando estén instalados.En caso de que estés usando Debian introduce estos comandos :

apt-get install linux-headers-$(uname -r) 

El siguiente paso es compilar el modulo faketty para tu kernel.Puedes encontrar el código fuente del modulo aquí: http://www.ltn.lv/~aivils/files/faketty-0.04.tar.bz2

Desempaqueta el archivo y ejecuta el siguiente comando en el directorio donde se encuentre el archivo "Makefile", para compilar e instalar el módulo :

make && make install

Para cargar el módulo del kernel ejecuta el siguiente comando:

modprobe faketty

Creando los enlaces a los archivos /dev/fttyXX

editar

Para hacer esto es necesario verificar el archivo /proc/bus/input/devices para saber que dispositivo ftty está asociado a qué teclado. Un ejemplo de un archivo /proc/bus/input/devices se muestra abajo:

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 ftty1
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 ftty2
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 ftty3
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=100

Es posible notar que aquí hay tres teclados , donde el primero está asociado al archivo /dev/ftty1 y el segundo a /dev/ftty2. Los teclados con el atributo "P: Phys" que terminan con input1 en vez de input0 deben ser descartados ya que se refieren a las teclas especiales del mismo teclado ( como es el caso de los teclados multimedia).

También es posible ver en el archivo de ejemplo, la presencia de dos mouse (ratones) los cuales están asociados a /dev/input/mouse0 y /dev/input/mouse1, respectivamente.

El servidor X, cuando inicializa, abre el archivo /dev/ttyXX para leer los eventos del teclado, donde XX es el número de VT( terminal virtual ) que recibe como parámetro. Dado que no es posible solicitar a X abrir otro archivo, es necesario crear enlaces a los archivos /dev/ttyXX para que apunten a los archivos ftty indicados en el archivo /proc/bus/input/devices. En el siguiente ejemplo se hicieron 4 enlaces, uno para cada teclado, iniciando con /dev/tty50 .

rm -f /dev/tty5[0-3]
ln -s /dev/ftty1 /dev/tty50
ln -s /dev/ftty2 /dev/tty51
ln -s /dev/ftty3 /dev/tty52
ln -s /dev/ftty4 /dev/tty53

Instalación del driver de la tarjeta de video Sis

editar

1. Agregar la siguiente línea al archivo /etc/apt/sources.list

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

2. actualizar la información del sistema de paquetes e instalar el driver x-driver-sis driver:

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

Hotplug

editar

Instalar el paquete hotplug

apt-get update
apt-get install hotplug

Instalación del servidor Xorg

editar

El siguiente paso es instalar el servidor Xorg.

1. Haga un respaldo y borre el archivo /etc/init.d/xfree-common .

2. Agregue las siguientes líneas: al archivo /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. Instale el paquete xserver-xorg

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

Configuración del servidor Xorg

editar

xorg.conf

editar

Esta configuración se usará para correr la multiterminal En este archivo se crearán secciones para cada terminal a ser configurada. Por cada terminal, debemos crear una sección para el mouse, teclado, tarjeta de video, monitor, screen y layout. Por ejemplo en el caso de un multiterminal para cuatro terminales, el archivo tendrá cuatro secciones mouse, cuatro secciones para teclado y así sucesivamente.

La dirección física de cada dispositivo puede ser obtenida del archivo /proc/bus/input/devices, el cual ya ha sido visto previamente

Adelante, un ejemplo de cada tipo de sección:

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

        # The options below are adjusted to a brazilian keyboard
        # with cedilha (ABNT2).
        Option          "XkbRules"      "xorg"
        Option          "XkbModel"      "abnt2"
        Option          "XkbLayout"     "br"
        Option          "XkbVariant"    "abnt2"
        Option          "XkbOptions"    "abnt2"
        Option          "CoreKeyboard"
EndSection


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

        # Substitute the value of "Device" option by the correspondent
        # mouse file, obtained from /proc/bus/input/devices file        
        Option          "Protocol"      "ImPS/2"
        Option          "Device"      "/dev/input/mouse0"

        # All mouses should have the "CorePointer" option
        Option          "CorePointer"
        Option          "ZAxisMapping"          "4 5"
EndSection


Section "Device"
        Identifier      "Placa de Vídeo Genérica 0"
        Driver          "sis"
        Screen          0

        # It's mandatory to explicit the BusID of all cards. 
        # To obtain it, use "lspci | grep VGA". Be carefull with the values,
        # while the address supplied by lspci is in hexadecimal base
        # the XOrg wait a decimal value.  To convert this, use
        # "echo $((0xHEXADECIMAL_VALUE))".
        BusID           "PCI:1:0:0"

        # This option disables the VGA and VBE calls of IRQ 10, to 
        # prevent that some card intervenes with others.  See also the
        # "xorg.conf.probe" file.
        Option          "NoInt10"       "Yes"

        # This option to sis video cards, prevents problems during alternating between
        # virtual terminals or while exiting X server.
        Option          "RestoreBySetMode"      "no"

EndSection


# The values below are default.  Maintain the configuration that you normally would use
# to your monitors.
Section "Monitor"
        Identifier      "Monitor Genérico 0"
        HorizSync       30-60
        VertRefresh     50-75
        Option          "DPMS"
EndSection


# The screen configuration below also is illustrative, personalize it
# in accordance with your preferences.
Section "Screen"
        Identifier      "Default Screen 0"
        Device          "Placa de Vídeo Genérica 0"
        Monitor         "Monitor Genérico 0"
        DefaultDepth    24
        SubSection "Display"
        Depth           24
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
EndSection


Section "ServerLayout"
        # The Identifier will be used at the call in command line.
        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 default xorg.conf ,será necesario crear un segundo archivo de configuración, el archivo xorg.conf.probe. Durante el uso de la multiterminal, deshabilitamos la interrupción 10 ( int 10, interrupción del bios ) (IRQ 10) para prevenir que llamadas VGA o VESA de las otras tarjetas interfieran entre sí. Sin embargo, con estas llamadas deshabilitadas las tarjetas extra no pueden ser inicializadas, para resolver este problema, durante el proceso de inicialización, el servidor X se correrá con el archivo xorg.conf.probe. Éste checará la presencia de las otras tarjetas, con la IRQ 10 activada durante la prueba, con lo cual serán correctamente inicializadas.

Para crear el archivo xorg.conf.probe, se tomará el xorg.conf como base, se dejarán las secciones diferentes a la tarjeta primaria ( la cual es inicializada por el bios cuando es encendida la computadora) y cambia la opción NoInt10 a "No". Es necesario tener únicamente un "layout" , en el cual están incluidos todas las tarjetas secundarias ( extra). Como ejemplo vea lo siguiente: xorg.conf.probe archivo derivado de el xorg.conf:

# At all Device sections (of video cards), change the option
# NoInt10 to:
        Option          "NoInt10"               "no"

# Declare only one layout, and without to use the "SingleCard" option.
# All the secondary screens should be included. The
# screens disposal (LeftOf, etc.) isn't important, so little
# the input devices used.
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

Corra el archivo de inicialización (probe) xorg-multiterminal. Este ejecuta el servidor X en el modo de solo prueba o probeonly mode (el cual únicamente prueba los dispositivos y termina) , xorg.conf.probe Aquí está el contenido del archivo:

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

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

Guarde y ejecute el script para que que corra cuando el sistema se inicializa. En el caso de Debian, el parche debería ser /etc/init.d/xorg-multiterminal, y existen dos formas de configurar el sistema.

  • Además del comando update-rc.d . Este comando funciona en la misma forma en que funciona en los sistemas estándar debian. (sysv-rc) as to file-rc package users.
update-rc.d xorg-multiterminal start 70 S .
  • Manualmente:

En un sistema Debian usando el esquema de inicialización, crea un enlace:

ln -s /etc/init.d/xorg-mucriará seus próprios arquivosltiterminal /etc/rcS.d/S70xorg-multiterminal

En un sistema Debian con el paquete file-rc instalado, agrega la siguiente linea de comando en el lugar apropiado /etc/init.d/runlevel.conf file:

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

El último paso es configurar el manejador de login el cual inicializa todos los servidores X. Únicamente trataremos el GDM. Otros manejadores como el XDM y el KDM pueden ser configurados por un proceso muy similar.

Es necesario editar la sección “[servers]” del archivo /etc/gdm/gdm.conf el cual contiene múltiples entradas, como las cuatro terminales que aparecen en el siguiente ejemplo:

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

El nombre de los servidores es arbitrario, pero es necesario agregar una sección por cada servidor, como el expuesto abajo:

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

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

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

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

Observa que los cuatro servidores están usando el VT 50, 51, 52 y 53 , respectivamente. Esto es los servidores X usarán para leer los eventos del teclado, los archivos /dev/tty50, /dev/tty51, /dev/tty52 y /dev/tty53, los cuales ya deben estar apuntando por medio de enlaces a los archivos /fttyXX , que ya debieron haber sido creados previamente.

Solución de problemas

editar

Problemas en la inicialización de multiterminales pueden ser analizados en los archivos: /var/log/Xorg.*.log . El Servidor X crea un archivo por cada lanzado.

Veja también

editar