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
editarSistema operacional
editarHardware
editarPlacas 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
editar1. 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
editarInstale o pacote hotplug:
apt-get update apt-get install hotplug
Dispositivos de Entrada
editarAntes 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
editarO 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
editarxorg.conf
editarEssa 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
editarAlé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
GDM
editarO ú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
editarProblemas 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.