Multiterminal/Usando faketty
Introducción
editarEste 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
editarDebian Sarge
Hardware usado
editarTarjetas 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
editarVerifica 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
editarPara 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
editar1. 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
editarInstalar el paquete hotplug
apt-get update apt-get install hotplug
Instalación del servidor Xorg
editarEl 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
editarxorg.conf
editarEsta 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
editarAdemá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
GDM
editarEl ú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
editarProblemas 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.