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.