Multiterminais/Multiterminal com evdev

Esta página ensina como um Multiterminal com evdev funciona, e como fazê-lo. Esse método elimina o uso de patches no kernel, e então, configura o multiterminal utilizando o protocolo evdev.

Como fazer

editar

Sistema operacional

editar

Hardware

editar

Placas de Vídeo:

  • 4 placas SiS (outras placas de vídeo também podem ser utilizadas, mas nem todas funcionam)

Teclados e Mouses:

  • 1 teclado PS/2
  • 1 mouse PS/2
  • 3 teclados USB
  • 3 mouses USB

Certifique-se de que seu kernel (núcleo do sistema) esteja compilado com suporte ao módulo evdev.

É necessária também a instalação do udev, que provê um diretório /dev dinâmico e atualizado de acordo com os dispositivos conectados:

apt-get install udev

O udev exige o kernel 2.6.12 ou mais novo.

Instalação do driver para placa de vídeo SiS

editar

1. Adicione a seguinte linha ao arquivo /etc/apt/sources.list:

http://www.winischhofer.net/sis/debian/stable ./

2. Atualize as informações de pacotes do sistema e instale o driver x-driver-sis:

apt-get update
apt-get install x-driver-sis

Hotplug

editar

Instale o pacote hotplug:

apt-get update
apt-get install hotplug

Dispositivos de Entrada

editar

Antes de prosseguir, é preciso verificar se os dispositivos de entrada (mouses e teclados) foram detectados. Para isso analise o arquivo /proc/bus/input/devices, que informa detalhes sobre os dispositivos de entrada encontrados pelo kernel. Um exemplo deste arquivo é apresentado abaixo. Apenas dois campos nos interessam: o nome de cada dispositivo, indicado nas linhas que começam com “N: Name=”, e o endereço físico, mostrado nas linhas que começam 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 indicar a presença de três teclados, embora no sistema aferido existam apenas dois. A razão do dispositivo adicional é que muitos teclados USB contém teclas especiais (por exemplo, de controle multimídia ou acesso à Internet), detectadas pelo kernel como pertencentes a um teclado secundário, cujo endereço físico termina em “input1”. Configuraremos apenas os teclados primários, com endereço físico terminado em “input0”. Portanto, a seção correspondente ao teclado secundário de endereço físico “usb-0000:00:10.2-1/input1” será ignorada.

Instalação do servidor XOrg

editar

O próximo passo é a instalação do servidor XOrg.

1. Faça uma cópia de segurança (backup) e remova o arquivo /etc/init.d/xfree-common. 2. Adicione as seguintes linhas ao arquivo /etc/apt/sources.list:

 2.1 Caso sua distribuição do Debian seja a Sarge use:
deb http://people.debian.org/~nobse/xorg-x11/ sarge main
deb-src http://people.debian.org/~nobse/xorg-x11/ sarge main
 2.2 Caso sua distribuição do Debian seja a Etch use as fontes oficiais:
deb http://ftp.br.debian.org/debian etch main
deb-src http://ftp.br.debian.org/debian etch main

3. Instale o pacote xserver-xorg:

apt-get update
apt-get install xserver-xorg
apt-get upgrade

OBS: Caso use o Debian Etch sempre prefira usar o comando aptitude ao invés do apt-get, senão você poderá causar instabilidade em seu sistema de dependências.

Configuração do servidor XOrg

editar

xorg.conf

editar

Essa configuração será usada durante o funcionamento do multiterminal. Neste arquivo serão criadas seções adicionais de acordo com o número de terminais que estamos configurando. Para cada terminal, criaremos uma seção para o mouse, teclado, placa de vídeo, monitor, tela (screen) e layout. Por exemplo, no caso de um multiterminal com quatro terminais, o arquivo terá quatro seções de mouse, quatro de teclado, e assim por diante.

Os valores sugeridos para “Identifier” em cada seção não são mandatórios. Eles podem ser alterados, desde que mantida a coerência dos nomes na configuração toda.

O endereço físico (opção “Dev Phys”) de cada dispositivo pode ser obtido através do arquivo /proc/bus/input/devices, como visto anteriormente.

A seguir, um exemplo para cada tipo de seção.

Section "InputDevice"
        Identifier      "Generic Keyboard 0"
        Driver          "kbd"

        # Substitua o valor da opção "Dev Phys" pelo endereço físico do
        # teclado correspondente, obtido a partir do arquivo
        # /proc/bus/input/devices
        Option          "Protocol"      "evdev"
        Option          "Dev Phys"      "isa0060/serio0/input0"

        # As opções abaixo são adequadas a um teclado brasileiro
        # com cedilha (ABNT2).
        Option          "XkbRules"      "xorg"
        Option          "XkbModel"      "abnt2"
        Option          "XkbLayout"     "br"
        Option          "XkbVariant"    "abnt2"
        Option          "XkbOptions"    "abnt2"
        Option          "CoreKeyboard"
EndSection


Section "InputDevice"
        Identifier      "Configured Mouse 0"
        Driver          "mouse"

        # Substitua o valor da opção "Dev Phys" pelo endereço físico do
        # mouse correspondente, obtido a partir do arquivo
        # /proc/bus/input/devices .
        Option          "Protocol"      "evdev"
        Option          "Dev Phys"      "isa0060/serio1/input0"

        # Todos os mouses devem ter a opção "CorePointer"
        Option          "CorePointer"
        Option          "ZAxisMapping"          "4 5"
EndSection


Section "Device"
        Identifier      "Placa de Vídeo Genérica 0"
        Driver          "sis"
        Screen          0

        # É obrigatório explicitar o BusID de todas as placas. Para
        # obtê-los, use "lspci | grep VGA". Cuidado com os valores,
        # pois o endereço fornecido pelo lspci é em base hexadecimal
        # e o XOrg espera um valor decimal.  Para a conversão use
        # "echo $((0xVALOR_HEXADECIMAL))".
        BusID           "PCI:1:0:0"

        # Esta opção desabilita as chamas VGA e VBE da IRQ 10, para
        # evitar que uma placa interfira com as demais.  Ver também o
        # arquivo "xorg.conf.probe".
        Option          "NoInt10"       "Yes"

        # Esta opção para placas SiS evita problemas ao alternar entre
        # terminais virtuais ou ao encerrar o servidor X.
        Option          "RestoreBySetMode"      "no"

EndSection


# Os valores abaixo são default.  Mantenha a configuração que você
# usaria normalmente para seus monitores.
Section "Monitor"
        Identifier      "Monitor Genérico 0"
        HorizSync       30-60
        VertRefresh     50-75
        Option          "DPMS"
EndSection


# A configuração da tela abaixo também é ilustrativa, personalize-a
# de acordo com sua preferência.
Section "Screen"
        Identifier      "Default Screen 0"
        Device          "Placa de Vídeo Genérica 0"
        Monitor         "Monitor Genérico 0"
        DefaultDepth    24
        SubSection "Display"
        Depth           24
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
EndSection


Section "ServerLayout"
        # O Identifier será usado na chamada em linha de comando.
        Identifier      "Layout0"
        Screen          "Default Screen 0"
        InputDevice     "Generic Keyboard 0"
        InputDevice     "Configured Mouse 0"

        Option          "SingleCard"
EndSection

xorg.conf.probe

editar

Além do arquivo padrão xorg.conf, será necessário criar um segundo arquivo de configuração, o xorg.conf.probe. Durante o uso do multiterminal, desabilitamos as interrupções no canal 10 (IRQ 10) para evitar que chamadas VGA (e VESA VBE) de uma placa interfiram com as demais. Porém, com essas chamadas desabilitadas as placas secundárias não são inicializadas. Para resolver este problema, durante o processo de inicialização do sistema o XOrg será rodado com o arquivo xorg.conf.probe. Ele fará uma checagem (probe) pela presença destas placas, com a IRQ 10 ativa durante o teste, de forma a inicializá-las.

Para criar o xorg.conf.probe, tome o xorg.conf como base, remova as seções relativas à placa de vídeo primária (que é inicializada pela BIOS ao ligar o computador) e troque a opção NoInt10 para "No". Será necessário um único layout, mas incluindo todas as placas secundárias. Como exemplo, alguns trechos do arquivo xorg.conf.probe derivado do xorg.conf acima:

# Em todas as seções Device (das placas de vídeo), troque a opção
# NoInt10 para:
        Option          "NoInt10"               "no"

# Declarar apenas um layout, e sem usar a opção "SingleCard".
# Todas as telas (screens) secundárias devem ser incluídas. A
# disposição das telas (LeftOf, etc.) não é importante, tampouco
# os dispositivos de entrada usados.
Section "ServerLayout"
        Identifier      "probe"
        Screen          "Default Screen 1"
        Screen          "Default Screen 2"   LeftOf  "Default Screen 1"
        Screen          "Default Screen 3"   LeftOf  "Default Screen 2"
        InputDevice     "Generic Keyboard 1"
        InputDevice     "Configured Mouse 1"
EndSection

Para rodar o teste (probe) é fornecido o arquivo xorg-multiterminal. Ele executa o servidor X no modo probeonly (apenas testar por dispositivos e encerrar), com o arquivo xorg.conf.probe. Como explicado acima, este passo inicializa as placas de vídeo secundárias. O conteúdo do arquivo é:

file=/etc/X11/xorg.conf.probe

[[ -f "file" ]] && /usr/X11R6/bin/X -config "$file" -probeonly 2>/dev/null

Salve-o como um script executável e configure o sistema de inicialização para rodá-lo. No caso do Debian, o caminho deve ser /etc/init.d/xorg-multiterminal, e existem duas maneiras de configurar o sistema:

  • Através do comando update-rc.d. Este comando funciona tanto para usuários do sistema padrão do Debian (sysv-rc) quanto para usuários do pacote file-rc.
update-rc.d xorg-multiterminal start 70 S .
  • Manualmente:

Em um sistema Debian usando o esquema padrão de inicialização, crie um link:

ln -s /etc/init.d/xorg-multiterminal /etc/rcS.d/S70xorg-multiterminal

Em um sistema Debian com o pacote file-rc instalado, acrescente a seguinte linha em um lugar apropriado no arquivo /etc/init.d/runlevel.conf:

70        -        S        /etc/init.d/xorg-multiterminal

O último passo é configurar o gerenciador de login para iniciar todos os servidores X. Trataremos apenas do GDM. Outros gerenciadores como o XDM e o KDM podem ser configurados por um processo similar.

Deve-se editar a seção “[servers]” do arquivo /etc/gdm/gdm.conf para que contenha múltiplas entradas, como no exemplo seguinte para quatro terminais:

[servers]
0=XServer0
1=XServer1
2=XServer2
3=XServer3

Os nomes dos servidores são arbitrários, mas deve-se adicionar uma seção para cada servidor, com o conteúdo como abaixo:

<pre>[server-XServer0]
name=Standard server
command=/usr/X11R6/bin/X -br -audit 0 -layout Layout0 :0 vt7 -sharevts
flexible=true

[server-XServer1]
name=Standard server
mmand=/usr/X11R6/bin/X -br -audit 0 -layout Layout1 :1 vt8 -sharevts
flexible=true

[server-XServer2]
name=Standard server
mmand=/usr/X11R6/bin/X -br -audit 0 -layout Layout2 :2 vt9 -sharevts
flexible=true

[server-XServer3]
name=Standard server
mmand=/usr/X11R6/bin/X -br -audit 0 -layout Layout3 :3 vt10 -sharevts
flexible=true

Solução de Problemas

editar

Problemas na inicialização do multiterminal podem ser analisados nos arquivos em /var/log/Xorg.*.log. O servidor X de cada terminal criará seu próprio arquivo de registro.

Veja também

editar
 
Wikipedia
A Wikipédia tem mais sobre este assunto:
multiterminal