Vamos aos passos de instalação (Clique aqui.. Veja a receita!)
De Wiki do Ronald
Bem, vamos comecar com o hardware básico: o que foi utilizado?
* Uma CPU, no meu caso e utilizei um Semprom 2600+ com 512mb de Ram que tem som, video e rede onboard; * Duas (ou mais) placas de vídeo. Note que uma das placas é onboard. Neste caso em seu SETUP (BIOS) pode existir uma configuraçao que define o que funcionará primeiro, a placa de PCI ou AGP. Bem a placa mãe que utilizei tem uma pequena particularidade: quando uma placa de vídeo AGP é instalada, ela desativa automaticamente a onboard(chip via), acreditem, não tem qualquer configuração da placa onboard no setup (nem mesmo o tamanho da memória reservada); * Dois conjuntos teclado e mouse sendo um USB; * Dois monitores.
A experiencia foi feita de N formas. Uma utilizando somente uma placa de vídeo(com saídas VGA e DVI) e conjunto teclado e mouse USB e PS2, uma utilizando duas placas de vídeo offboard(uma AGP e uma PCI) com o mesmo conjunto de teclados e mouses, outra com duas placas de vídeo (uma a onboard e uma PCI) com o mesmo conjuto de teclados e mouses e todas as formas a cima utilizando um adaptador USB para teclado e mouse PS2. Com todas as formas obtive sucesso.
Primeiramente vou descrever como fazer com duas placas de vídeo, um conjunto teclado e mouse PS2 e outro conjunto USB.
Começe ativando a segunda placa de vídeo no /etx/X11/xorg.conf:
Obtenha o endereço físico das placas de vídeo :
#lspci |grep VGA 01:00.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1) 01:0a.0 VGA compatible controller: nVidia Corporation TnT1
Devemos observar que o X (servidor gráfico) não entede valores hexademais. Devemos converter os valores para decimais: o “a” em hexadecimal, equivale a 10, então 01:0a.0 torna-se 01:10.0.
Faça um backup do arquivo de configuração existente, no caso de ocorrer algum problema.
#cp /etc/X11/xorg.conf /etc/X11/xorg.conf.orig
Abra o arquivo:
#nano -w /etc/X11/xorg.conf
Na sessão “Devices” duplique a entrada que você tem pra sua placa de vídeo configurada:
Section "Device" Identifier "Card0" # Geforce Fx5200 Driver "nv" BusID "PCI:1:0:0” Screen 0 EndSection Section "Device" Identifier "Card1" # Tnt1 Driver "nv" BusID "PCI:1:10:0” Screen 0 EndSection
Agora duplicamos os monitores (Monitor):
Section "Monitor" Identifier "Monitor0" Option "DPMS" HorizSync 30-70 VertRefresh 50-160 DisplaySize 320 240 # CRT 17" (81 DPI @ 1024x768) EndSection Section "Monitor" Identifier "Monitor1" Option "DPMS" HorizSync 30-70 VertRefresh 50-160 DisplaySize 320 240 # CRT 17" (81 DPI @ 1024x768) EndSection
Lembre-se de trocar o identificador (Identifier) e de configurar de acordo com o seu monitor.
Agora duplicaremos as telas (Screen):
Section "Screen"
Identifier "Screen0"
Device "Card0" #identificador da placa de vídeo Geforce
Monitor "Monitor0" #Identificador do monitor 0
SubSection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Card1" #identificador da placa de vídeo Tnt1
Monitor "Monitor1" #Identificador do monitor 1
SubSection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Agora mexemos no layout do servidor X(apage o existente, ou comente):
Section "ServerLayout" Identifier "Multihead" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" LeftOf "Screen0" InputDevice "Keyboard-base" "CoreKeyboard" InputDevice "Mouse-base" "CorePointer" EndSection
temos o nosso arquivo assim a partir do Input Devices:
# ------------------------------------------------------------------------
# Input devices
# ------------------------------------------------------------------------
Section "InputDevice"
Identifier "Keyboard-base"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse-base"
Driver "mouse"
Option "Device" "/dev/input/mice"
EndSection
# ------------------------------------------------------------------------
# Dual head system.
# ------------------------------------------------------------------------
Section "Device"
Identifier "Card0" # Geforce Fx5200
Driver "nv"
BusID "PCI:1:0:0”
Screen 0
EndSectionSection “Device”
Identifier “Card1″ # Tnt1
Driver “nv”
BusID “PCI:1:10:0”
Screen 0
EndSection
# ————————————————————————
# Monitor
# ————————————————————————
Section “Monitor”
Identifier “Monitor0″
Option “DPMS”
HorizSync 30-70
VertRefresh 50-160
DisplaySize 320 240 # CRT 17″ (81 DPI @ 1024×768)
EndSectionSection “Monitor”
Identifier “Monitor1″
Option “DPMS”
HorizSync 30-70
VertRefresh 50-160
DisplaySize 320 240 # CRT 17″ (81 DPI @ 1024×768)
EndSection
# ————————————————————————
# Screen section: criando as outras telas
# ————————————————————————
Section “Screen”
Identifier “Screen0″
Device “Card0″
Monitor “Monitor0″
SubSection “Display”
Depth 24
Modes “1024×768″ “800×600″ “640×480″
EndSubSection
EndSection
Section “Screen”
Identifier “Screen1″
Device “Card1″
Monitor “Monitor1″
SubSection “Display”
Depth 24
Modes “800×600″ “640×480″
EndSubSection
EndSection
# ————————————————————————
# Layout section
# ————————————————————————
Section “ServerLayout”
Identifier “Multihead”
Screen 0 “Screen0″ 0 0
Screen 1 “Screen1″ LeftOf “Screen0″
InputDevice “Keyboard-base” “CoreKeyboard”
InputDevice “Mouse-base” “CorePointer”
EndSection
# ————————————————————————
# Aqui temos outras opções
# ————————————————————————
# Xephyr NÃO usa DRI então não é habilitado
# Section “DRI”
# Mode 0666
# EndSection
Section “ServerFlags”
# se o mouse falhar o X starta
Option “AllowMouseOpenFail” “yes”
# troca de terminais virtuais desabilitada
Option “DontVTSwitch” “yes”
# X restart (Ctrl+Alt+Backspace) desabilitado
Option “DontZap” “yes”
EndSection
Verifique que existem outras opções, que são úteis para impedir que o usuário, desligue o X, que está sustentando o Xephyr de outros usuários. Isso impede que um termine a sessão do outro ao tentar reiniciar o X, ou ao tentar acessar um terminal (tty).
Reinicie o X (O Ctrl+Alt+Backspace ainda funciona.) Se tudo estiver ok você terá uma grande área de trabalho que se se estende ao 2º monitor. Agora vamos ao que intereça: "o Multiterminal".
Comece baixando e instalando a versão modificada do Xerphir.
# wget http://www.c3sl.ufpr.br/multiterminal/howtos/xephyr-precompiled.tar.bz2 # tar -xjf xephyr-precompiled.tar.bz2 --directory /usr/local/
Agora plugue o outro conjuto de teclado e mouse USB.
Os números do eventos do teclado e mouse pode mudam a cada reiniciar da máquina (acredite muda...). Para corrigir isso foi, criado um script Wrapper para manter a associação de teclado e mouse ao seu respectivo terminal:
# nano -w /usr/sbin/Xephyr.sh
cole isso (shift+insert)
#!/bin/bash# 20060905 - josean - added get_event() function to obtain eventNN from a physical address
# Original version:
# http://en.wikibooks.org/wiki/Multiterminal_with_Xephyr
# http://www.c3sl.ufpr.br/multiterminal/howtos/Xephyr.sh
trap "" usr1
XEPHYR=/usr/local/bin/Xephyr
get_event()
{
evento=`grep -A2 $1 /proc/bus/input/devices | grep 'H: Handlers=' | grep --only-matching -e 'event[0-9]*'`
}
args=()
while [ ! -z "$1" ]; do
if [[ "$1" == "-xauthority" ]]; then
shift
if [ ! -z "$1" ]; then
export XAUTHORITY="$1"
fi
elif [[ "$1" == "-display" ]]; then
shift
if [ ! -z "$1" ]; then
export DISPLAY="$1"
fi
elif [[ "$1" == "-kbdphys" ]]; then
shift
if [ ! -z "$1" ]; then
get_event $1
args=("${args[@]}" "-keyboard")
args=("${args[@]}" "/dev/input/$evento")
fi
elif [[ "$1" == "-mousephys" ]]; then
shift
if [ ! -z "$1" ]; then
get_event $1
args=("${args[@]}" "-mouse")
args=("${args[@]}" "/dev/input/$evento,5")
fi
else
if ! expr match $1 'vt[0-9][0-9]*' >/dev/null; then
args=("${args[@]}" "$1")
fi
fi
shift
done
# echo $XEPHYR "${args[@]}" >> /tmp/logXephyr
exec $XEPHYR "${args[@]}"
Salve.(alt+x depois “s” ou “y” dependendo da lingua do seu editor nano).
Dê permissão de execução para ele:
# chmod +x /usr/sbin/Xephyr.sh
Agora vamos pegar os endereços físicos do teclado e mouse, e editar o gdm.conf:
# cat /proc/bus/input/devices 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/input0 H: Handlers=kbd event0 B: EV=120013 B: KEY=4 2000000 3802078 f840d001 f2ffffdf ffefffff ffffffff fffffffe B: MSC=10 B: LED=7I: Bus=0011 Vendor=0002 Product=0005 Version=0000 N: Name=”ImPS/2 Generic Wheel Mouse” P: Phys=isa0060/serio1/input0 S: Sysfs=/class/input/input1 H: Handlers=mouse0 event1 ts0 B: EV=7 B: KEY=70000 0 0 0 0 0 0 0 0 B: REL=103 I: Bus=0010 Vendor=001f Product=0001 Version=0100 N: Name=”PC Speaker” P: Phys=isa0061/input0 S: Sysfs=/class/input/input2 H: Handlers=kbd event2 B: EV=40001 B: SND=6 I: Bus=0003 Vendor=0d62 Product=001c Version=0202 N: Name=”Darfon USB Combo Keyboard” P: Phys=usb-0000:00:1d.1-1/input0 S: Sysfs=/class/input/input5 H: Handlers=kbd event4 B: EV=120003 B: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe B: LED=7 I: Bus=0003 Vendor=0d62 Product=001c Version=0202 N: Name=”Darfon USB Combo Keyboard” P: Phys=usb-0000:00:1d.1-1/input1 S: Sysfs=/class/input/input6 H: Handlers=kbd event5 B: EV=3 B: KEY=3078 d801d101 1e0000 0 0 0 I: Bus=0003 Vendor=046d Product=c03f Version=2000 N: Name=”Logitech USB-PS/2 Optical Mouse” P: Phys=usb-0000:00:1d.1-2/input0 S: Sysfs=/class/input/input8 H: Handlers=mouse1 event3 ts1 B: EV=7 B: KEY=f0000 0 0 0 0 0 0 0 0 B: REL=103
Repare que hé uma duplicata do teclado USB. Isso ocorre porque os teclados tem funções especiais. Ignore-os, e use apenas os que tem final 0 (zero).
Agora vamos ao /etc/gdm/gdm.conf. Apague(ou comente) tudo abaixo de [servers]. Cole o código abaixo:
[servers]0=Xephyr0 1=Xephyr1 2=Xephyr2 [server-Xephyr0] name=Xephyr0 command=/usr/bin/X -ac -br handled=false flexible=false [server-Xephyr1] name=Xephyr1 command=/usr/sbin/Xephyr.sh -display :0.0 -xauthority /var/lib/gdm/:0.Xauth -fullscreen \ -kbdphys isa0060/serio0/input0 -mousephys isa0060/serio1/input0 -use-evdev handled=true flexible=false [server-Xephyr2] name=Xephyr2 command=/usr/sbin/Xephyr.sh -display :0.1 -xauthority /var/lib/gdm/:0.Xauth -fullscreen \ -kbdphys usb-0000:00:1d.1-1/input0 -mousephys usb-0000:00:1d.1-2/input0 -use-evdev handled=true flexible=false
Pronto, salve.
Pode ocorrer um problema conhecido. Os layouts dos teclados ficam faltando teclas ou com um posicionamento incorreto dos botões. Faça o download desse arquivo:xkb-evdev.tar.gz e descompacte em /etc/X11:
#tar -xf xkb-evdev.tar.gz –directory /etc/X11/
Agora crie o arquivo /usr/X11R6/lib/X11/xkb/X1-config.keyboard com o conteúdo:
rules = "evdev" model = "abnt2" layout = "br"
Faça uma copia deste arquivo, para a outra estação, trocando o 1 pelo 2:
#cp /usr/X11R6/lib/X11/xkb/X1-config.keyboard /usr/X11R6/lib/X11/xkb/X2-config.keyboard
Realize estes passos do arquivo "config.keyboard" para N estações.
Agora reinicie o gdm:
#/etc/init.d/gdm restart
Se tudo estiver certo, vai aparecer uma tela de login para cada monitor. Verifique se os teclados e mouses estão configurados de maneira correta.
Pronto você terá dois terminais independentes com bom desempenho.

