# Multiterminais/Multiterminal com Xephyr

Vamos descrever aqui como fazer um Multiterminal com Xephyr. Há muitas maneiras de se fazer multiterminais, pra vê-las, veja a seção Veja também.
A partir de uma modificação realizada no servidor Xephyr, foi possível implementar uma nova solução para multiterminal. O sistema funciona de maneira muito parecida ao multiXnest, só que utiliza o Xephyr ao invés do Xnest. O Xephyr possui várias vantagens, pois está sendo mantido, é mais rápido, e permite a implementação de extensões do X mais facilmente.

# Como fazer

Você deve seguir o tutorial abaixo, passo a passo. Outras informações podem ser obtidas na página do C3SL da UFPR aqui. No Item 3, há um link para o LIVE-CD desenvolvido recentemente.

## Sistema operacional

Debian Etch

## Introdução

O Xephyr é um tipo de servidor X que utiliza outro servidor X (Xorg) para a exibição das imagens. O Xephyr funciona como cliente do Xorg, mas é também servidor para outros aplicativos, que enxergam o Xephyr como se fosse um servidor X normal. O Xephyr pode ser utilizado para se trabalhar em dois ou mais desktops simultaneamente, no entanto, fizemos alterações em seu código para permitir que ele seja utilizado para implementar um sistema multiterminal.
O sistema opera da seguinte maneira. Roda-se apenas um servidor X, configurado para utilizar várias telas (screens), sendo que cada tela estará associada a uma placa de vídeo. Após a inicialização do X, abre-se, em tela cheia, um Xephyr para cada tela, o qual será utilizado pelo usuário, de maneira transparente.
O Xephyr original obtêm os eventos de mouse e teclado a partir do servidor X pai. No entanto, para permitir a utilização do Xephyr no multiterminal, tivemos que alterar seu código fonte para que ele lêsse os eventos diretamente dos dispositivos, sem intermediação do servidor X. Para ler os eventos do mouse e do teclado utiliza-se o protocolo evdev.
A vantagem de se utilizar o Xephyr é que o gerenciamento das diversas placas de vídeo é feito por um único X, o que elimina os problemas de compatibilidade e conflitos presentes nas outras maneiras de implementar o multiterminal. Isso significa que o multiterminal funciona com qualquer combinação de placas de vídeo que o X consiga gerenciar.
A vantagem de se utilizar o Xephyr ao invés do Xnest é que o Xephyr está sendo mantido atualmente, é mais rápido, e permite a implementação de extensões do X mais facilmente.

## Instalação do servidor XOrg

Aqui descreveremos os passos para configurar o multiterminal utilizando o servidor XOrg, mas é possível utilizar o XFree86, com poucas alterações. Para utilizar o XOrg, você precisa utilizar a versão Etch ou superior do Debian, pois a versão Sarge não possui o servidor XOrg. Se você está utilizando o Debian Sarge, proceda da seguinte maneira para atualizá-lo para Etch:
1. Altere as ocorrências de "sarge" ou "stable" dos mirrors do debian no arquivo /etc/apt/sources.list para "etch", por exemplo:
Deve ficar:
2. Atualize o sistema e instale o pacote xserver-xorg: .

## Evdev e Udev

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:
O udev exige um kernel 2.6.

## Dispositivos de Entrada

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 nome do arquivo relacionado ao dispositivo, mostrado nas linhas que começam com “H: Handlers”.
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.
Podemos perceber, pelo arquivo de exemplo, a presença de 2 teclados, relacionados aos arquivos /dev/input/event0 e /dev/input/event2, respectivamente, e 2 mouses, associados aos arquivos /dev/input/event1 e /dev/input/event4, respectivamente. Esses arquivos são importantes, pois são utilizados, como descreveremos posteriormente, para relacionar cada cabeça do multiterminal aos dispositivos de entrada corretos.

## Ldconfig

Adicione a seguinte linha no arquivo /etc/ld.so.conf:
Em seguinte, rode o comando ldconfig:

## Download do Xephyr modificado

1. Faça o download do servidor Xephyr modificado aqui. Extraia o arquivo no diretório /usr/local. Caso queira obter os patches, baixe-os clicando aqui. 2. Faça o download do script "wrapper" Xephyr.sh, responsável por carregar o servidor Xephyr. O script deve ser copiado para o diretório /usr/sbin e ter permissão de execução. Para dar permissão de execução para o arquivo, execute o seguinte comando:

## Configuração do Servidor X(XOrg)

Para um multiterminal de N terminais, o arquivo /etc/X11/xorg.conf deve ser configurado da seguinte forma:
1. Defina um layout contendo N screen's.
Obs: A disposição das telas apresentadas no layout acima não é relevante.
2. Defina as seções das N placas de vídeo.
3. Defina as seções dos N monitores.
4. Defina as seções das N screen's.
5. A definição de teclado pode continuar igual à já existente em seu xorg.conf, no entanto, certifique-se de que o nome do teclado (Identifier) está de acordo com a Seção Layout (isto é, "Generic Keyboard"). O mouse você deve fazer apontar para o dispositovo /dev/input/mice:
6. Para evitar problemas na inicialização do Servidor X devido ao não reconhecimento do mouse, você pode incluir, sem problemas, a seguinte seção:
Obs: Isso não afetará o multiterminal pois os dispositivos mouses/teclados serão passados como parametros, posteriormente, para o Xephyr.
7. Finalmente, para desabilitar a troca de VT's e as teclas Ctrl+Alt+Backspace, verifique que a seção "ServerFlags" possui as seguintes opções:

## Configuração do Layout

Como a detecção dos dispositivos de entrada (mouses e teclados) feita pelo kernel (veja seção "Dispositivos de Entrada") nem sempre segue a mesma ordem, é possível que o kernel associe o mesmo dispositivo a arquivos diferentes, em cada inicialização, o que poderá "embaralhar" os mouses e teclados.
Para evitar o problema, fizemos scripts que automatizam o processo de associação de mouses e teclados a seus respectivos monitores. Você só precisa configurar o layout (qual teclado e mouse estão associados a qual monitor) uma vez, e o script irá armazenar esse "layout" no arquivo /etc/X11/devices.conf. Para utilizar o script, siga os seguintes passos:
1. Instale o pacote xdialog:
2. Descomprima o arquivo xkb-evdev.tar.gz no diretório /etc/X11.
3. Remova ou renomeie o arquivo /etc/gdm/gdm.conf:
4. Descompacte o arquivo public.tgz e copie os arquivos "configura_layout" e "select.out" para o diretório /usr/local/sbin. Depois copie o arquivo "configuracao_automatica" para o diretório "/etc/init.d".
5. Configure para que o script configuracao_automatica seja executado na inicialização do sistema:
6. Execute o seguinte comando, para configurar o layout do sistema. O script irá fazer perguntas em cada uma das telas do seu multiterminal para saber qual teclado e qual mouse serão associados a cada monitor.
O script irá gerar automaticamente o arquivo /etc/gdm/gdm.conf, se ele não existir, e os arquivos de configuração do XKB (/usr/X11R6/lib/X11/xkb/XX-config.keyboard). O script irá criar links no diretório /dev/input, chamados kbd0mt, kbd1mt, etc, que se referem, respectivamente, ao teclado do primeiro terminal, ao teclado do segundo terminal, e assim por diante. O script também irá criar links chamados mouse0mt, mouse1mt, etc, que se referem, respectivamente, ao mouse do primeiro terminal, ao mouse do segundo terminal, e assim por diante.
Após você responder às perguntas, o script irá gerar o arquivo /etc/X11/devices.conf, que irá conter as associações de mouse e teclado a cada terminal, além da configuração dos teclados (regras, modelo e layout).

## Configuração Manual

Se você utilizou o script da seção anterior, você não deve realizar os passos das próximas seções. No entanto, para completude, apresentaremos os procedimentos manuais para a configuração do XKB e o GDM, caso você não tenha utilizado o script.

### Configuração XKB

Para permitir que o Xephyr utilize a extensão XKB, você deve descomprimir o arquivo xkb-evdev.tar.gz no diretório /etc/X11. Depois é necessário criar um arquivo de configuração XKB para cada Xephyr, para configurar os teclados. O arquivo de configuração do primeiro Xephyr deve ser colocado no arquivo /usr/X11R6/lib/X11/xkb/X1-config.keyboard, o do segundo em /usr/X11R6/lib/X11/xkb/X2-config.keyboard, e assim por diante. Um exemplo de um arquivo de configuração para um teclado ABNT2 pode ser visto a seguir:
Em algumas situações, o proposto acima pode não funcionar, quando o Xephyr for compilado para procurar as definições do layout de keyboard em /usr/X11/lib/xkb. Nesse caso, é necessário fazer também o seguinte link simbólico e copiar o xkbcomp para essa pasta:
Observação: nas novas versões do Debian Etch, houve algumas mudanças, e pode ser que o teclado fique todo desconfigurado. Para isso, basta modificar a linha 70 do arquivo /xkb/rules/evdev
Mude a linha de:
Para:

### Configuração do Gdm

O último passo é configurar o gerenciador de login para iniciar o servidor X principal e também para rodar os scripts "wrappers" que serão responsáveis por abrir o Xephyr em cada tela. Trataremos apenas do GDM. Outros gerenciadores como o XDM e o KDM podem ser configurados por um processo similar.
Edite o arquivo /etc/gdm/gdm.conf na seção servers inserindo o seguinte:

## Foto exemplo

Licença da imagem:
* É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.2 ou qualquer versão posterior publicada pela Free Software Foundation. Uma cópia da licença está inclusa na seção intitulada "Licença de Documentação Livre GNU"
* Deutsch - English - Español - Français - http://www.gnu.org/copyleft/fdl.html

# LIVE-CD

O Centro de Computação Científica e Software Livre (C3SL) da Universidade Federal do Paraná desenvolveu um LIVE-CD baseado na distribuição UBUNTU Feisty (7.04) com o objetivo de testar a tecnologia de multiterminais nas mais diversas variedades de hardware e também como forma de apresentar o multiterminal sem a necessidade de instalação prévia no computador.
Esta ainda é uma versão BETA e possui problemas de segurança de rede, mas está plenamente funcional. A todos que tiverem interesse em testar, aprimorar, fazer sugestões, críticas ou simplesmente conhecer a tecnologia, sejam bem-vindos e sintam-se encorajados a baixar a imagem do CD no seguinte link:
multiterminal-0.1BETA_ubuntu704.iso multiterminal-0.1BETA_ubuntu704.iso.md5
Os scripts que controlam o multiterminal estão em /multiterminal que é montado quando o LIVE-CD está em execução. Comentários, sugestões, otimização do código dos scripts, idéias novas ou um simples feedback sobre o funcionamento do multiterminal serão bem-vindos.
Mais informações podem ser obtidas em http://www.c3sl.ufpr.br/multiterminal/livecd.html
Agora ficou mais fácil tornar seu Ubuntu 7.04 em Multiterminais, o script que acabou de sair do forno, deixa essa tarefa muito mais fácil e agradável. Para quem ainda não conhece ou nunca ouviu falar sobre esse maravilhoso projeto leia um pouco sobre o mesmo e verá as vantagens de se usar GNU/Linux como Sistema Operacional. Veja abaixo onde encontrar informações sobre o mesmo.
Grupo Multilinux - http://groups.google.com.br/group/multilinux?hl=pt-BR
Lista de discussão do Multilinux - http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/multilinux