A História dos Multiterminais

A História dos Multiterminais

1. Introdução


Os computadores pessoais (“personal computer” – PC), que eram máquinas para também uso pessoal e não apenas processar ou computar, surgiram em meados de 1968 com valores na ordem de US$ 20.000,00, o que atualmente, em 2008, são valores de “super-computadores pessoais”. No desenrolar da história, foram oferecidos ao mercado por empresas como IBM, Intel, Apple, HP, Xerox, dentre outras, porém hoje, de forma modular, é possível qualquer pessoa comprar peças separadamente, cada uma da marca e valor que achar conveniente, desde que compatíveis entre si, e montar seu próprio PC a custos inferiores a US$ 500,00.

Para uso geral e a custo baixo, surgem os primeiros PCs em 1974 com monitores monocromáticos, pois o desenvolvimento de monitores coloridos se dá em 1975. Chega então ao mercado o Apple II com monitor colorido em 1977, com 16 cores. Seguindo a evolução, surgem as placas de vídeo VGA de 256 cores e a Apple lança em 1987 o Macintosh II com possibilidade de se colocar até 3 placas de vídeo e então até 3 monitores. Em 1991, com mais cores e a necessidade de uma tela maior, surgem experimentos para fazer com que os vários monitores se comportem como um só.

Mas somente em meados de 1999 surge a idéia de se ligar mais teclados e ratos, implementada primeiramente pelo brasileiro Miguel Freitas, utilizando sistema operacional Linux e sistema gráfico X, mantido pela [http://www.xfree86.org XFree86], possibilitando um PC ser usado por duas pessoas de forma independente. Seu processo era fazer uma alteração no X e executar dois Xs ao mesmo tempo, sendo que cada X capturava eventos de teclado e rato específicos e apresentava a tela gráfica em placa de vídeo específica, dando a real impressão de que eram dois PCs. Este método recebeu o nome de multiterminal ou multiseat.

Após Freitas, vieram várias outras tentativas em 2002 a 2003, como a solução proprietária “Desktop Multiplier” da Userful, hoje chamada de “Userful Multiplier”, com um X modificado, e soluções como as de Svetoslav Slavtchev alterando o kernel em vez do X, com trabalhos sobre evdev e faketty, possibilitando dessa forma mais de dois usuários distintos ao mesmo tempo por máquina. Mais adiante, em 2005, a equipe [http://www.c3sl.ufpr.br C3SL] da UFPR cria a forma de se executar um X virtual, inicialmente o Xnest e posteriormente o Xephyr, em cada tela do X real, onde o X real atualmente é mantido pelo projeto [http://www.x.org X.Org], sendo modificados o Xnest e o Xephyr para cada X virtual obter exclusividade sobre um rato e um teclado. Essa equipe tentou em 2007 um sistema intermediário entre os dispositivos teclado e rato para com o X real, batizado de XAT (X Address Translation), mas não obteve o esperado êxito com exclusividade de acesso, o que permitia um usuário capturar entradas de outro, inferindo a segurança do conjunto.

 

2. Surgimento e evolução


2.1. Miguel Freitas em 2000

“Se vc quer fazer um registro histórico, a primeira referencia que eu posso te dar para uma data mais precisa é a data de lançamento do kernel 2.4.0 (isso mesmo, e já estamos no 2.6.muitos!). Eu estava testando os primeiros patches quando na semana seguinte o Linus lançou o tão esperado kernel 2.4.

Como eu fiz várias pesquisas no google antes de começar, posso quase que te garantir que ninguém tinha tentado fazer isso antes. Achei estranho pois seria muito útil e não deveria ser tão difícil assim.

A primeira tentativa foi o mais óbvio: tentar rodar o XFree86 duas vezes já que eu já tinha duas placas de vídeo. Quando fiz isso o XFree86 chaveou o terminal. Só um deles funcionava de cada vez, eu tinha que dar control+alt+f7 e control+alt+f8 pra trocar. Apesar de estarem em telas diferentes, a troca suspendia o acesso e um deles ficava congelado.

Para rodar os dois ao mesmo tempo baixei o fonte do XFree86, futuquei pra ver onde é que ele fazia isso e sai desabilitando todo o código de “virtual terminal”. Após algumas tentativas, travadas etc consegui passar dessa etapa. obs: o tempo que demorava para compilar o XFree86 naquela época é algo digno de nota!!

Então as duas telas funcionavam juntas, cada uma com o seu mouse (um serial e outro ps2) mas com um probleminha: elas compartilhavam o mesmo teclado.

Procurei a alternativa de um teclado USB (coisa BEM dificil de encontrar na época).

Quando liguei no computador descobri que os dois teclados geravam caracteres no mesmo console… e não havia nenhuma forma de separar!

Baixei o fonte do kernel e comecei a investigar como funcionava o console, de onde vinham os dados, quem chamava quem etc. Cheguei no driver de teclado usb (HID) e descobri uma interface alternativa, por dispositivo, que permitia receber os dados do teclado aparentemente num nível mais baixo.

Infelizmente mesmo com essa interface (eventos gerados por dispositivo usb) o teclado ainda continuava produzindo caracteres no console. Então, na primeira versão da minha modificação, eu simplesmente desabilitei esse código que enviava caracteres do teclado usb para o console principal do meu kernel e recompilei.

Voltei para o fonte do XFree86 e comecei a estudar como é que se criava um driver de teclado (desses que vc pode colocar no arquivo de configuração). Fiz um driver novo e copiei a mesma rotina que fazia o mapeamento das teclas dentro do kernel. Digamos que o formato dos dados que o XFree86 esperava era diferente do que a interface de eventos usb produzia, era necessário converter uma coisa na outra… Então, contra todas as probabilidades, o armengue finalmente funcionou :-)

Depois disso vc pode acompanhar o desenvolvimento no site. Várias pessoas do mundo inteiro me ajudaram com patches melhores, sugestões, idéias, pacotes já compilados etc. Por fim, as idéias acabaram sendo incorporadas de uma forma ou de outra no kernel e no x.org:

1) a gambiarra que eu fiz no kernel hoje em dia é um teste que garante exclusividade no acesso.

2) o código que eu desabilitei na marra no X para desligar o chaveamento de VT hoje é uma opção de linha de comando.

3) o driver que eu copiei do kernel foi criado independentemente com o nome de “evdev”.

Então, enfim… Acho que eu posso dizer que estava na direção certa né? :-)

abraços,

Miguel”

Miguel Freitas – 24/09/2008

 [ Lista Multi Linux ]

3. Comunidade MultiLinux em 2005


No ano de 2005, o  Prof. Ronald Costa começou a testar a tecnologia de multiterminais com o objetivo de ampliar os laboratórios de informática em uma Instituição de Ensino Superior de Brasília-DF. Ao testar a solução de multiterminais verificou que os novos usuários interessados em utilizar essa tecnologia e que não tinham grandes conhecimentos encontravam grandes dificuldades para a sua implementação. Esse era um problema interessante: Como facilitar o processo de instalação e ampliar o emprego dessa tecnologia?

Neste mesmo ano ele começou a testar algumas soluções simples para o problema. Iniciou a criação de shell scripts para a instalação de multiterminais. A partir dessa iniciativa surgiu a Comunidade Multilinux, utilizando um Fórum (em 2005), e depois evoluiu para uma lista de discussão (em 2007):  A Lista do MultiLinux. A próxima idéia debatida na lista foi a de se desenvolver um LIVE-CD para facilitar ainda mais esse processo. Essa idéia foi implementada pelo C3SL da UFPR.

O site da Comunidade Brasileira de Multiterminais surgiu no ano de 2007 junto com a lista de discussão.

 

3.1. Objetivos da Comunidade Brasileira de Multiterminais

A comunidade MULTILINUX tem o objetivo difundir o uso de tecnologias para apoio à educação e a inclusão digital, buscando desenvolver scripts de instalação de multiterminais, automação do processo de instalação ou um LIVE CD, permitindo dividir um computador com GNU / Linux entre vários usuário com sessões independentes. A tecnologia de multiterminais é uma excelente ferramenta para Inclusão Digital, ampliação de laboratórios, bibliotecas, quiosques de atendimento, telecentros e pequenas empresas. A comunidade busca apoiar pessoas interessadas em usar essa tecnologia por meio de sua lista de discussão e com artigos voltados para o tema.A comunidade Multilinux é composta por todos os interessados no assunto. Apenas com o objetivo de coordenar e organizar as atividades, bem como o desenvolvimento dos trabalhos de pesquisa, de apoio e divulgação de tecnologias que auxiliem a Educação e a Inclusão Digital, a comunidade possui uma equipe interna, para dar suporte as essas ações.As pessoas aqui relacionadas trabalham em benefício da comunidade, compartilhando seus conhecimentos apoiadas na filosofia do Software Livre. :-)

3.2. Por que fazer?

Com o aumento da capacidade de processadores e memória, um grande número de tarefas pode ser feito sem deixar o [[computador]] mais lento. Entretanto, usando a configuração padrão só é possível haver um usuário utilizando o [[computador]] ao mesmo [[tempo]], e isso limita a utilização do sistema, que fica ocioso a maior parte do tempo. Com um multiterminal, vários usuários podem dividir o mesmo computador, então uma maior parte de sua capacidade será explorada. Por exemplo: se alguém estiver somente utilizando um navegador de [[internet]], ou escrevendo um texto, ninguém mais poderá utilizar o computador, e 90% do sistema estará ocioso. Com multiterminais, outras pessoas poderão utilizar os 90% remanescentes, então o sistema será mais bem-utilizado. Entretanto, se algúem utilizar todos os recursos da máquina (jogando um jogo 3-D, por exemplo), os outros usuários terão um [[sistema]] bem lento.

Uma outra grande vantagem dos multiterminais é o preço: não há necessidade de comprar placas-mãe, microprocessadores, memória [[RAM]], disco rígido e outras coisas para cada usuário. Só é necessário comprar um bom hardware. Por exemplo, comprar um processador ”bom” geralmente custa menos do que comprar mais de um processador ”mediano”.

 

3.3. O que é necessário?

Cada monitor deverá ser conectado a uma saída gráfica. Algumas placas de vídeo têm múltiplas saídas e suportam múltiplos monitores. Teoricamente, é possível trabalhar até em ”split screen”. Por exemplo, para fazer um ”four-head” (um multiterminal para quatro usuários), serão necesários 4 monitores, 4 teclados, 4 mouses (lembre-se de que a maioria das [[placas-mãe]] têm apenas uma porta PS-2 ou serial) e 4 placas de vídeo (novamente, lembre-se de que a maioria das placas-mãe tem apenas um ”slot” AGP, então placas PCI serão necessárias).

3.4. Como fazer?

Há várias maneiras diferentes de se fazer multiterminais, e novas maneiras estão constantemente sendo desenvolvidas. Não existe uma “melhor versão”, mas algumas versões são melhores do que outras.

O texto a seguir foi extraído de [http://web.inf.ufpr.br/vignatti/papers/artigo-fisl2006.pdf], com autorização dos autores.

''Nos sistemas operacionais derivados do UNIX, como o Linux, a interação com o usuário se dá através do Sistema de Janelas X (X Window System). Esse sistema é baseado na arquitetura cliente-servidor, em que o cliente envia requisições de desenho para o servidor e recebe desse os eventos de entrada (teclado e mouse). Os servidores X têm o conceito de recursos, como um dispositivo de entrada ou uma janela, que são disponibilizados aos seus clientes. Tais recursos estão associados a um Display, que pertence a um usuário. Portanto, um sistema multiterminal baseado em UNIX deve prover um Display para cada usuário.''
''O Xorg, implementação mais recente do servidor X, não tem suporte a múltiplos Displays. Seguindo o modelo do computador pessoal, ele é projetado sobre o pressuposto de que apenas um usuário utiliza a máquina de cada vez. A sua camada de entrada é implementada sobre o método padrão de entrada do kernel, os terminais virtuais (VT). Eles recebem esse nome pois simulam o método de entrada dos antigos mainframes. O terminal virtual é implementado inteiramente em software, mas simula o tty, um dispositivo que era conectado através de portas seriais. O kernel Linux tem suporte a vários terminais virtuais, mas apenas um deles pode receber eventos de teclado por vez. Caso mais de um teclado estivesse conectado ao computador, os eventos de todos os teclados seriam enviados ao VT ativo. Isso impede a execução concorrente de dois ou mais servidores X, pois apenas um pode estar ativo num determindado momento, mesmo que utilizem hardware de vídeo distintos.''

Para evitar estes problemas, muitas diferentes soluções foram feitas. Elas estão listadas aqui, em ordem cronológica.
Estes são ”links” para versões existentes em [[Wikibooks]]. Para versões não listadas, veja a seção “Ligações externas”.

* [[Wikibooks:pt:Multiterminais/Multiterminal com Ruby|Multiterminal com Ruby]] (utilizando um ”patch” no kernel)
* [[Wikibooks:pt:Multiterminais/Multiterminal com evdev|Multiterminal com evdev]] (um protocolo)
* [[Wikibooks:pt:Multiterminais/Multiterminal com faketty|Multiterminal com faketty]] (um módulo do kernel)
* [[Wikibooks:pt:Multiterminais/Multiterminal com Xnest|Multiterminal com Xnest]] (um multiterminal aninhado)
* [[Wikibooks:pt:Multiterminais/Multiterminal com Xephyr|Multiterminal com Xephyr]] (um multiterminal aninhado)

Os mais utilizados são o ”faketty” e o ”Xephyr”. A solução do Xephyr é independente de hardware, enquanto a do faketty funciona apenas com um grupo mais restrito de placas de video (ex.: NVIDIA).

 

3.5. Links internos

* [[Paraná Digital]], projeto de informatização de escolas públicas com ”’multiterminais”’.
* [[Ltsp]], Linux Terminal Server Project (LTSP).
* ”’Userful”’, [http://www.userful.com Solução de software Multiterminal para até 10 estações de trabalho (versão para 2 estações Free)]
* ”‘ThinNetworks”’, [http://www.thinnet.com.br/index.php?option=com_content&task=view&id=38&Itemid=78 Hardware desenvolvido específicamente para Multiterminal (placas de vídeo, áudio Hub USB, adaptadores USB/PS2 e cabos extensores)]
* {{en}}[[Wikibooks:Multiterminal with evdev|Multiterminal with evdev]]
* {{pt}} [http://www.ronaldcosta.pro.br/sitio/wordpress/ Comunidade MultiLinux – A Comunidade Brasileira de Multiterminais]
* {{pt}} [http://www.ronaldcosta.pro.br/sistemas/wiki/index.php?title=Receitas_Livres Wiki do MultiLinux (Receitas Livres)]
* {{pt}} [http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/multilinux A Lista de discussão da Comunidade MultiLinux]

 

3.6. Ligações externas

{{Wikibooks|Multiterminais}}
*[http://www.c3sl.ufpr.br/multiterminal/index-pt.php Quatro maneiras diferentes de se fazer um multiterminal]
*[http://www.c3sl.ufpr.br/multiterminal/livecd.html Multiterminal do C3SL/UFPR em LIVE-CD para testes]