# Multiterminais/Multiterminal com faketty

Esse artigo ensina como um Multiterminal com faketty funciona, e como fazê-lo. Ele utiliza o módulo faketty, desenvolvido por Aivils Stoss, e não precisa nem do protocolo evdev nem de patches no kernel. Este método é um dos mais famosos de todos para se fazer multiterminais.

# Como fazer
## Introdução

Este texto descreve os passos necessários para se configurar um sistema multiterminal utilizando o módulo faketty. O faketty é um módulo do kernel, desenvolvido por Aivils Stoss, que associa os teclados do sistema a arquivos de dispositivo chamados /dev/fttyXX (sendo XX um número que identifica o teclado), os quais o X utiliza para ler os eventos do teclado. Esse módulo usa o mesmo protocolo que o X normalmente utiliza para ler eventos do teclado, isto é, o protocolo TTY, o que dispensa a utilização do evdev. Outra vantagem desse método é que não é necessário nenhum patch para o kernel.
As desvantagens são que esta solução necessita que um módulo do kernel seja compilado, e que esta abordagem só funciona de maneira estável com poucas combinações de placas de vídeo.

## Sistema operacional

Debian Sarge (mas outras distribuições de linux também podem ser utilizadas de maneira muito similar).
e
Ubuntu 6.10 Edgy

## Hardware utilizado

Placas de Vídeo
* 4 placas SiS 315 (outras placas também podem ser utilizadas, mas nem todas funcionam corretamente).
Teclados e Mouses:
* 1 teclado PS/2
* 1 mouse PS/2
* 3 teclados USB
* 3 mouses USB
Nos testes com Ubuntu 6.10, foram utilizadas:
* 4 placas de vídeo PCI Nvidia Riva TNT2 Model 64/Model 64 Pro.
* 1 placa de vídeo SIS 6326 AGP
* 1 teclado e 1 mouse PS/2
* 4 teclados e 4 mouses USB
OBS.: para o funcionamento correto das placas de vídeo, a SIS AGP deve ser iniciada por primeiro em X0, card0 etc., bem como na BIOS definir como preferencial, pois como secundário, a tela trava logo após a inicialização do X.

## Instalação do udev

É necessária a instalação do udev, que provê um diretório /dev dinâmico e atualizado de acordo com os dispositivos conectados:
O udev exige o kernel 2.6.12 ou mais novo.
** Já instalado por default no Ubuntu 6.10.

## Compilação e carregamento do módulo faketty

Certifique-se que estão instalados os headers (cabeçalhos) do kernel que você está usando. Se você utiliza o Debian, faça o seguinte comando:
O próximo passo é compilar o módulo faketty para seu kernel. Você pode encontrar o código fonte do módulo aqui: http://www.ltn.lv/~aivils/files/faketty-0.04.tar.bz2
Para o Ubuntu 6.10 é necessária a versão 0.05 do faketty, senão o módulo não será inicializado corretamente. Encontra-se no link: http://www.ltn.lv/~aivils/files/faketty-0.05.tar.bz2
Descompacte o arquivo, e execute o seguinte comando no diretório onde se encontra o arquivo "Makefile", para compilar e instalar o módulo:
Para carregar o módulo no kernel, execute o seguinte comando:

## Criação dos links para os arquivo /dev/fttyXX

Em seguida, é necessário verificar o arquivo /proc/bus/input/devices para saber a qual arquivo ffty cada teclado foi associado. Um exemplo do arquivo /proc/bus/input/devices é dado a seguir:
É possível notar que existem três teclados sendo mostrados, sendo que o primeiro está associado ao arquivo /dev/ftty1 e o segundo ao arquivo /dev/ftty2. Os teclados cujo campo "P: Phys" terminem em input1, ao invés de input0, como o terceiro teclado do arquivo, devem ser desconsiderados, pois se referem às teclas e funções especiais de algum teclado.
Também é possível ver, no arquivo de exemplo, a presença de dois mouses, que estão associados aos arquivos /dev/input/mouse0 e /dev/input/mouse1, respectivamente.
O X, ao ser inicializado, para fazer a leitura dos eventos do teclado abre o arquivo /dev/ttyXX, sendo XX o número do VT (Terminal Virtual) que o X recebe como parâmetro. Como não é possível pedir para o X abrir outro arquivo, é necessário fazer com que os arquivos /dev/ttyXX sejam links para os arquivos ftty indicados no arquivo /proc/bus/input/devices. No exemplo a seguir, criamos 4 links, um para cada teclado, dos arquivos /dev/tty50 em diante.

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

1. Adicione a seguinte linha ao arquivo /etc/apt/sources.list:
2. Atualize as informações de pacotes do sistema e instale o driver x-driver-sis:
OBS.: Para Ubuntu 6.10, não foi necessária instalação do driver acima, utilizado driver padrão "sis" no xorg. Apesar disso, foi necessária instalação do driver para linux da Nvidia, disponível em:
http://download.nvidia.com/XFree86/Linux-x86/1.0-7184/NVIDIA-Linux-x86-1.0-7184-pkg1.run
Salve o arquivo, dê permissão de execução ao mesmo (chmod +x NVIDIA-Linux-x86-1.0-7184-pkg1.run) e execute-o. É importante que esse passo seja feito sem o gerenciador gráfico rodando (GDM ou KDM), caso contrário, retornará um erro. Feito isso, o driver "nvidia" terá que ser instanciado posteriormente no xorg.conf.

## Hotplug

Instale o pacote hotplug:
obs.: Para Ubuntu, não é necessário esse procedimento.

## Instalação do servidor XOrg

O próximo passo é a instaçã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:
3. Instale o pacote xserver-xorg:

## Configuração do servidor XOrg
### xorg.conf

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.

### xorg.conf.probe

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:
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 é:
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.
* Manualmente:
Em um sistema Debian usando o esquema padrão de inicialização, crie um link:
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:

## GDM

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:
Observe que os 4 servidores estão utilizando os VT's 50, 51, 52 e 53, respectivamente. Dessa forma, os servidores X irão utilizar, para ler o eventos do teclado, os arquivos /dev/tty50, /dev/tty51, /dev/tty52 e /dev/tty53, que na verdade são links para os arquivos /dev/fttyXX, conforme criamos anteriormente.

## Solução de Problemas

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.