Multiterminais/Multiterminal com Ruby
Um Multiterminal com Ruby é um multiterminal que permite o uso de consoles independentes. Foi o primeiro método de se fazer multiterminais desenvolvido. Ele utiliza um patch no kernel.
Como fazer
[editar | editar código-fonte]Introdução
[editar | editar código-fonte]Backstreet Ruby é um patch para o kernel, desenvolvido com a finalidade de fornecer vários consoles independentes. Uma das desvantagens é que o patch é específico para um determinado kernel. Sendo assim, ao fazer uma atualização de kernel, deve-se dispor também de uma versão do patch para o mesmo kernel.
Sistema Operacional
[editar | editar código-fonte]Debian Sarge (outras distribuições de Linux também podem ser facilmente utilizadas).
Hardware
[editar | editar código-fonte]Placas de Vídeo:
- 4 Placas SiS (outras placas de vídeo também podem ser utilizadas, mas nem todas).
Dispositivos:
- 1 teclado PS/2
- 1 mouse PS/2
- 3 teclados USB
- 3 mouses USB
Instalando driver da placa SiS
[editar | editar código-fonte]1. Adicione esta linha ao arquivo /etc/apt/sources.list:
deb http://www.winischhofer.net/sis/debian/stable ./
2. Atualize a base de dados dos pacotes e instale o pacote x-driver-sis
apt-get update apt-get install x-driver-sis
Instalando pacote pré-compilado do kernel 2.6.7 já com o patch ruby
[editar | editar código-fonte]1. Faça o download do arquivo kernel-image-2.6.7-ruby_10.00.Custom_i386.deb 2. Instale o pacote
dpkg -i kernel-image-2.6.7-ruby_10.00.Custom_i386.deb
Hotplug
[editar | editar código-fonte]1. Instale o pacote hotplug:
apt-get update apt-get install hotplug
2. Substitua os arquivos /etc/hotplug/input.agent e /etc/hotplug/input.rc pelos seguintes: input.agent e input.rc.
3. Crie dois arquivos, mouse.conf e kbd.conf. Esses dois arquivos identificam dispositivos(mouses e teclados) de acordo com seu endereço físico, relacionando-os a um link simbólico, no caso dos mouses, e a um VT(Terminal Virtual), no caso dos teclados. Veja exemplos de configuração de cada um deles respectivamente:
mouse0br isa0060/serio1/input0 mouse1br usb-0000:00:10.0-2/input0 mouse2br usb-0000:00:10.1-2/input0 mouse3br usb-0000:00:10.2-2/input0
Cada linha identifica um dos mouses. A primeira informação, mouse0br, é um link simbólico para o mouse que está conectado ao endereço físico isa0060/serio1/input0. As demais linhas seguem a mesma lógica.
VT0 isa0060/serio0/input VT1 usb-0000:00:10.0-1/input0 VT2 usb-0000:00:10.1-1/input0 VT3 usb-0000:00:10.2-1/input0
Cada linha identifica um dos teclados. A primeira informação, VT0, associa um VT ao teclado conectado ao endereço físico isa0060/serio0/input. As demais linhas seguem a mesma lógica.
Observações:
Quando um dispositivo é conectado, o HotPlug automaticamente cria o respectivo link em /dev/input/
O endereço físico de cada dispositivo pode ser obtido através do arquivo /proc/bus/input/devices
Dispositivos de Entrada
[editar | editar código-fonte]Antes de proceder, verifique se os teclados e mouses foram detectados corretamente. Leia o conteúdo do arquivo /proc/bus/input/devices, que contém informações sobre os dispositivos detectados pelo kernel.
Veja um exemplo deste arquivo. Daremos destaque para dois campos: nome dos dispositivos, presente em linhas que começam com “N: Name=”, e o endereço físico, mostrado em linha que começan com “P: Phys”.
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
Note que o arquivo parece mostrar a presença de três teclados, quando na verdade existem apenas dois. A razão para o dispositivo adicional é que muitos teclados USB incluem teclas especiais(como de acesso à internet), as quais são detectadas pelo kernel como um teclado secundário. Teclados secundários tem o endereço físico terminado por “input1”. Estamos interessados somente no primeiro teclado, cujo endereço físico termina com “input0”. Sendo assim, a seção referente ao teclado secundário com endereço físico “usb-0000:00:10.2-1/input1” será ignorada.
Configuração do Servidor X(XFree86)
[editar | editar código-fonte]Deve-se realizar a configuração de dois arquivos. O /etc/X11/XF86Config-4 e o /etc/X11/XF86config-4.probe.
Durante a inicialização do multiterminal, o arquivo /etc/X11/XF86Config-4.probe é utilizado antes do /etc/X11/XF86Config-4. Porém, para um melhor entendimento, geraremos primeiro o arquivo /etc/X11/XF86Config-4 e, a partir deste, geraremos o segundo arquivo(/etc/X11/XF86Config-4.probe).
XF86Config-4
[editar | editar código-fonte]Essa configuração é aquela que será utilizada durante o funcionamento do multiterminal. Neste arquivo devem ser criadas seções adicionais de acordo com o número de terminais que estamos configurando. Deve ser criada uma seção para cada mouse, placa de vídeo, monitor, screen e layout. Sendo assim, se estivermos interessados em configurar um multiterminal com 4 terminais, teremos 4 seções de mouses, 4 de placas de vídeo, e assim por diante.
Atenção: para o teclado deve ser criado apenas uma seção!
Os valores sugeridos para "Identifier" em cada seção não é rígido. Podendo ser alterado desde que seja mantida a coerência com o restante da configuração. Veja um exemplo de arquivo onde deve ser adicionada cada seção.
#Seção Mouse Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "CorePointer" Option "Device" "/dev/input/IDENT_MOUSE" . . EndSection # # Na opção "Device", IDENT_MOUSE é o mesmo link simbólico descrito para cada mouse no arquivo mouse.conf. # Por exemplo, mouse0br, mouse1br, mouse2br e mouse3br. #Seção Placa Vídeo SiS Section "Device" Identifier "Card0" Driver "sis" BusId "PCI:1:0:0" Option "noInt10" "yes" Option "RestoreBySetMode" "No" EndSection # # A opção BusId identifica qual o endereço da placa de vídeo que está sendo utilizada # Para obter o BusId de suas placas digite "lspci | grep VGA" # Tome cuidado com os valores, pois o endereço fornecido por lspci eh em Hexadecimal enquando que o X # espera um valor em decimal. Para conversão use "echo $((0xVALOR_HEXADECIMAL))" # # noInt10: Desabilita o modulo que usa a chamada int10 da BIOS das placas de vídeo. Essa chamada é # responsável por inicializar as placas de vídeo e será usada somente no arquivo XFree86Config-4.probe # durante a execução "probeonly" do servidor X. Quando utilizada a opção -probeonly, # o servidor X apenas faz um teste dos dispositivos e termina sua execução. # # RestoreBySetMode(para placas de vídeo sis): É utilizada para evitar problemas em monitores LCD # enquanto a máquina alterna entre terminais virtuais ou então quando esta finaliza o servidor X. #Seção Monitores Section "Monitor" Identifier "Monitor0" HorizSync 30-71 VertRefresh 50-160 Option "DPMS" EndSection # #Screen Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection # #layout Section "ServerLayout" Identifier "X0" Screen "Screen0" InputDevice "kbd0" InputDevice "Mouse0" Option "IsolateDevice" "PCI:1:0:0" EndSection # # Obs: Para todos os layouts, deve-se usar o mesmo teclado. # Neste exemplo, os demais layouts teriam a ocorrência: InputDevice "kbd0" # # O valor da opção IsolateDevice é o endereço físico da placa de vídeo utilizada # pela Screen deste mesmo layout. Por exemplo: O layout X0 utiliza Screen0, que por # sua vez está relacionada a Card0, de endereço físico 1:0:0 #
XF86Config-4.probe
[editar | editar código-fonte]Se o multiterminal fosse inicializado diretamente, utilizando o arquivo XF86Config-4, não obteríamos sucesso. Isso acontece pelo fato das placas de vídeo secundárias não terem sido inicializadas corretamente. Quando a opção noInt10 está setada como yes, como eh o caso do arquivo XF86Config-4, esta inicialização é inibida.
Dessa forma, o arquivo XF86Config-4.probe fornece uma configuração para que o servidor X possa ser inicializado, em primeira instância, com a opção noInt10="no". Logo após, o X poderá usar com sucesso o arquivo XF86Config-4.
Veja o que modificar para gerar o arquivo XF86Config-4.probe:
#Nas seções das placas de vídeo, use a opção: # Option "noInt10" "no" #Quanto aos layouts, declarar apenas um(como mostrado abaixo) e também sem utilizar a opção: # # Option "IsolateDevice" "PCI:1:0:0" # Section "ServerLayout" Identifier "X0" Screen "Screen0" Screen "Screen1" LeftOf "Screen0" Screen "Screen2" Below "Screen0" Screen "Screen3" LeftOf "Screen2" InputDevice "kbd0" InputDevice "Mouse0" EndSection # # A disposição das telas apresentadas no Layout X0 é simplesmente ilustrativa, podendo sofrer váriações.
xfree86-multiterminal
O arquivo xfree86-multiterminal eh responsável pela inicialização probeonly (conforme citado na na seção do arquivo XFree86Config-4) do servidor X, utilizando o arquivo de configuração XFree86Config-4.probe, e garantindo uma correta inicialização das placas de vídeo. Logo após, o servidor X será executado utilizando o arquivo de configuração XFree86Config-4.
1. Salve o arquivo xfree86-multiterminal em /etc/init.d/ 2. Linke-o da seguinte forma:
update-rc.d xfree86-multiterminal start 70 S .
Criando um link S70xfree86-multiterminal em /etc/rcS.d para o arquivo /etc/init.d/xfree86-multiterminal.
Obs: O comando update-rc.d existe somente nas distribuições baseadas no Debian. Alternativamente, crie manualmente um link com nome S70xfree86-multiterminal.
Configuração do Gdm
[editar | editar código-fonte]Edite o arquivo /etc/gdm/gdm.conf na seção [servers] inserindo o seguinte:
[servers] 0=XServer0 1=XServer1 2=XServer2 3=XServer3 [server-XServer0] name=Standard server command=/usr/X11R6/bin/X -audit 0 -layout X0 :0 vt7 flexible=true [server-XServer1] name=Standard server command=/usr/X11R6/bin/X -audit 0 -layout X1 :1 vt17 flexible=true [server-XServer2] name=Standard server command=/usr/X11R6/bin/X -audit 0 -layout X2 :0 vt18 flexible=true [server-XServer3] name=Standard server command=/usr/X11R6/bin/X -audit 0 -layout X3 :1 vt19 flexible=true # Repare que os VT's utilizados no arquivo gdm.conf podem parecer "diferentes" daqueles criados no arquivo # kdb.conf. Porém, na verdade, são os mesmos. Isso acontece pelo fato do gdm se comunicar diretamente com o kernel, # ao invés de utilizar a interface /proc. #
Configuração GRUB/LILO
[editar | editar código-fonte]Finalmente, é necessário passar um parâmetro para o kernel indicando quantos VT's(teclados virtuais) adicionais devem ser criados:
GRUB
[editar | editar código-fonte]Edit o arquivo /boot/grub/menu.lst.
kernel /boot/vmlinuz-2.6.7-ruby /root/dev/hd"xy" ro dumbcon=N # Onde x e y identificam o disco rígido e sua partição respectivamente # O valor de N indica o número de teclados adicionais que devem ser criados. # Para um FourHead, por exemplo, N=3 é suficiente.
LILO
[editar | editar código-fonte]No arquivo de configuração do lilo, /etc/lilo.conf, insira o seguinte:
append="dumbcon=N" # O valor de N indica o número de teclados adicionais que devem ser criados. # Para um FourHead, por exemplo, N=3 é suficiente.
Verificando problemas
[editar | editar código-fonte]Problemas na inicialização do multiterminal podem ser analizados em: /var/log/Xorg.*.log. Cada Servidor X criará seu próprio arquivo de log.