Multiterminal/Usando Xephyr
Sistema Operativo
editarDebian Sarge
Introducción
editarXephyr es un cliente X y un servidor X a la vez, que corre dentro de otro servidor X. Xephyr es cliente de un servidor X real, pero también es un servidor que tiene sus propios clientes. Este programa se usa normalmente para permitir trabajar en dos o más escritorios al mismo tiempo, sin embargo, hemos hechos modificaciones en su código para hacer posible que Xephyr implemente un sistema multiterminal.
El sistema trabaja en la siguiente manera. Únicamente un servidor X "real" está corriendo, configurado para usar varios screens o pantallas, de las cuales cada una será asociada a una tarjeta de video . Después del inicio de X, un Xephyr estará corriendo dentro de cada pantalla. Cada usuario usará un Xephyr, en una forma transparente
El Xephyr original obtiene los eventos de los dispositivos de entrada de su servidor X padre. Sin embargo, para permitir Xephyr sea usada en la multiterminal modificamos su código fuente para que leyera directamente desde la interfaz de eventos del kernel, saltando al servidor X.
La ventaja de esto es la posibilidad de tener multiterminales con cualquier combinación de tarjetas de video, siempre y cuando esta sea soportada por el servidor X. Además de esto, Xephyr tiene varias ventajas sobre Xnest(otro programa similar): Xephyr tiene soporte, es mas rápido que Xnest, y soporta la implementación de extensiones mas fácilmente.
Evdev y Udev
editarAsegurate de que tu kernel este compilado con la opción evdev .
Además instala udev, el cual provee de un directorio /dev dinámico, actualizado de acuerdo a los dispositivos conectados:
apt-get install udev
Udev requiere un kernel 2.6.12 o mayor.
Dispositivos de entrada
editarAhora, necesitas checar si tus dispositivos de entrada (ratones y teclados) han sido correctamente detectados por el kernel. Al hacer esto, analiza el archivo /proc/bus/input/devices, el cual muestra los detalles sobre los dispositivos de entrada detectados por el kernel.
Un ejemplo de este archivo es mostrado abajo. Únicamente dos campos son de nuestro interés: el nombre de cada dispositivo, encontrado en las lineas que inician con “N: Name=”, y el nombre del archivo relacionado con cada dispositivo, encontrado en las líneas que inician con “H: Handlers”.
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 indicar la presencia de 3 teclados, el sistema en cuestión solo tiene dos. Pero esto pasa debido a que muchos teclados USB tienen teclas especiales (para control multimedia o de acceso a internet) los cuales son detectados por el kernel como teclados adicionales, siendo aquellos cuya dirección física termine con “input1”. Necesitar configurar únicamente los teclados primarios, los cuales son los que terminan en su dirección física con “input0”.
El ejemplo dado abajo muestra la presencia de 2 teclados "primarios", relacionados a los archivos /dev/input/event0 y /dev/input/event2, respectivamente, y 2 ratones, relacionados a los archivos /dev/input/event1 y /dev/input/event4, respectivamente.
Instalacion de XOrg
editarEn este COMO describiremos los pasos necesarios para configurar multiterminales usando XOrg , pero también es posible usar XFree86, con pocos cambios. Para instalar XOrg, en un Debian Sarge, has lo siguiente:
1. Crea un backup y borrar los archivos /etc/init.d/xfree-common.
2. Agrega los siguientes líneas /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
Descarga el Xephyr modificado
editar1. Descarga el binario de Xephyr aqui. Descomprimelo dentro del directorio /usr/local. Los parches estan en aqui.
2. Descarga el wrapper script, necesario para correr Xephyr: Xephyr.sh. El script debe ser copiado a /usr/sbin.
Configuración de X(XOrg)
editarPara configurar una multiterminal con N terminales, edita el archivo /etc/X11/xorg.conf, y has lo siguiente:
1. Crea un layout con N screens.
Section "ServerLayout" Identifier "Layout" Screen "Screen 1" Screen "Screen 2" Below "Screen 1" Screen "Screen 3" Below "Screen 2" . . Screen "Screen N" Below "Screen N-1" InputDevice "Generic Keyboard 1" EndSection
2. Crea una sección Device para cada tarjeta de video:
Section "Device" Identifier "Video Card 1" Driver "sis" BusID "PCI:0:5:0" Screen 0 EndSection # # Cambia el driver de la tarjeta de video y el BusID de acuerdo a tu hardware. # # El BusID identifica tu tarjeta de video. Para obtener el BusIDs de tu tarjeta de video, #usa el comando "lscpi | grep VGA". # Beware: el comando lscpi muestra la dirección en hexadecimal, mientras que X espera números decimales. #El comando "echo $((0xHEX_NUMBER))" es tu amigo . . . Section "Device" Identifier "Video Card N" Driver "sis" BusID "PCI:0:6:0" Screen 0 EndSection
3. Crea la sección Monitor.
Section "Monitor" Identifier "Monitor 1" HorizSync 30-71 VertRefresh 50-160 Option "DPMS" EndSection . . . Section "Monitor" Identifier "Monitor N" HorizSync 30-71 VertRefresh 50-160 Option "DPMS" EndSection
4. Crea la sección Screen
Section "Screen" Identifier "Screen 1" Device "Video Card 1" Monitor "Monitor 1" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection . . . Section "Screen" Identifier "Screen N" Device "Video Card N" Monitor "Monitor N" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection
5. Xorg.conf debe tener únicamente una sección teclado, como esto:
Section "InputDevice" Identifier "Keyboard0" Driver "kbd" EndSection
La sección de mouse puede ser eliminada, lo cual es recomendado, pero debes agregar la opción AllowMouseOpenFail en la sección ServerFlags, como se muestra abajo , de otra manera el servidor X no iniciara.
6. Asegurate de tener lo siguiente en la sección ServerFlags:
Section "ServerFlags" ... # These options keep the X Server from entering in power saving mode: Option "BlankTime" "0" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" # Allow the server to start without mouse Option "AllowMouseOpenFail" "yes" # Disable VT Switching Option "DontVTSwitch" "yes" # This disallows the use of the Ctrl+Alt+Backspace sequence Option "DontZap" "yes" ... EndSection
Configuración de XKB
editarPara permitir a Xephyr usar las extensiones de XKB , tu debes descomprimir el archivo xkb-evdev.tar.gz dentro del directorio /etc/X11. Después de esto, es necesario crear un archivo XKB por cada Xephyr. La configuración de XKB para el primer Xephyr debe ser puesta como /usr/X11R6/lib/X11/xkb/X1-config.keyboard, para el segundo Xephyr como /usr/X11R6/lib/X11/xkb/X2-config.keyboard, y así sucesivamente. Puedes ver un ejemplo de un archivo de configuración XKB abajo.
rules = "evdev" model = "pc105" layout = "us"
Configuración de GDM
editarEl último paso para configurar el login manager para iniciar el servidor X principal y correr los wrapper scripts que abrirá al Xephyr. Solo explicaremos como hacer esto en GDM, pero para otros managers, como XDM y KDM, pueden ser configurados de formas similar. gdm.conf
Edita el archivo /etc/X11/gdm.conf en la sección [servers] , agregando lo siguiente:
[servers] 0=Hardware # Hardware is the main X server 1=Xephyr1 2=Xephyr2 3=Xephyr3 . . N=XephyrN [server-Hardware] name=Hardware command=/usr/X11R6/bin/X handled=false flexible=false [server-Xephyr1] name=Xephyr1 command=/usr/sbin/Xephyr.sh -display :0.0 -xauthority /var/lib/gdm/:0.Xauth -geometry 1024x768+0+0 -keyboard /dev/input/event0 -mouse /dev/input/event1,5 -use-evdev -dpi 92 handled=true flexible=false # # The options -keyboard and -mouse identify, respectively, to which keyboard and mouse Xephyr will be associated, #as seen in the file /proc/bus/input/devices. If the mouse option finishes with ",5", as in #the example, the mouse wheel will be activated. # # Xephyr.sh is the wrapper that runs Xephyr server. . . . [server-XephyrN] name=XephyrN command=/usr/sbin/Xephyr -display :0.(N-1) -xauthority /var/lib/gdm/:0.Xauth -geometry 1024x768+0+0 -keyboard /dev/input/eventXX -mouse /dev/input/eventYY[,5] -use-evdev -dpi 92 handled=true flexible=false