Multiterminal com Ubuntu 6.10 Edgy
Olá a todos hoje inicio uma série de posto ensinado como montar um sistema de multiterminal com o Ubuntu 6.10. Esse documento é baseado em um how-to escrito pela UFPR, que foi melhorado pelo Professor Ronald Costa e pelo que foi descrito no blog Netpatia ensinando como fazer a monstagem.
Bem, vamos comecar com o básico: o que eu utilizei
- Uma CPU, no meu caso e utilizei um Semprom 2200+ com 512mb de Ram que tem som, video, rede onboard;
- Duas (ou mais) placas de vídeo. 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 mose PS2 e outro conjunto USB. Por enquanto ligue somente o segundo monitor.
Começe ativando a segunda placa de vídeo no /etx/X11/xorg.conf:
pege 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
.
.
aqui temos um problema: o X não entede valores hexademais então converta-os para decimais: o “a” equivale a 10 então 01:0a.0 equivale a 01:010.0. Os zeros na frente não fazem diferença entaõ fica:1:10.0.
Faça um backup do arquivo de configuração existente em caso de problemas:
#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:
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 @ 1024x768) EndSectionSection "Monitor" Identifier "Monitor1" Option "DPMS" HorizSync 30-70 VertRefresh 50-160 DisplaySize 320 240 # CRT 17" (81 DPI @ 1024x768) EndSection # ------------------------------------------------------------------------ # Screen section: criando as outras telas # ------------------------------------------------------------------------ Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Card1" Monitor "Monitor1" SubSection "Display" Depth 24 Modes "800x600" "640x480" 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
Repare na outras opções que eu coloquei, são úteis para impedir que um usuário “mate” o outro ;-P .
Reinicie o X (ainda funciona o Ctrl+Alt+Backspace =D )
Se tudo estiver ok você terá uma grande área de trabalho que se se estende ao 2º monitor.
Vamos agora 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.
Um novo problema chega: os números do eventos do teclado e mouse pode muda(acredite muda), para corrigir isso foicriado 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[@]}"
Ssalve(alt+x depois “s” ou “y” dependendo da lingua do seu 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 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 tecldo USB, isso ocorre com os teclados que tem funções especiais, ignore-os use o que tem final 0(zero).
agora vamos ao /etc/gdm/gdm.conf. Apague(ou comente) tudo abaixo de [servers] e coloque o que tem 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.
Um outro problema conhecido é o layout dos teclados, eles ficam faltando teclas ou com um posicionamento incorreto dos botões pra 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"
copie ele 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
Isso você faz para N estações.
Agora reinicie o gdm:
#/etc/init.d/gdm restart
Se tudo estiver certo vai aparecer uma tela de login em cada monitor verifique se os teclados e mouses estão ok
Pronto você terá dois terminais independentes com bom desempenho.
Bug conhecido: insert. Ele abre o Tocador de Musica. Até agora não conseguir resolver isso, porém, eleminando atalho(Sistema>Preferências>Atlhos do teclado) o insert funciona corretamente.
Em breve postarei fotos do multiterminal funcionnado.
Obrigado a todos que leram, em caso de erros comentem.