Multiterminais em um PC

Atualmente o poder de processamento dos computadores são superiores as necessidades básicas como acessar a internet, ler e-mails, editar textos e planilhas. Vemos a necessidade de reduzir o custo da informática para que se torne mais acessível a todas as camadas da população. Essa é a intenção de utilizar um único computador (CPU) para gerenciar vários terminais utilizando software livre.

[ Hits: 62.189 ]

Por: Ralph Liebessohn em 14/06/2006 | Blog: http://ralph.einet.com.br


Configurações



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".

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

Os dados necessários estão destacados. 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.

Servidor XOrg


xorg.conf

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.

Section "ServerLayout"
  Identifier  "Layout"
  Screen      "Default Screen 1"
  Screen      "Default Screen 2"   Below   "Default Screen 1"
  Screen      "Default Screen 3"   Below   "Default Screen 2"
  .
  .
  Screen      "Default Screen N"   Below   "Default Screen N-1"
  InputDevice "Generic Keyboard"
  InputDevice "Configured Mouse 1"
EndSection

OBS: A disposição das telas apresentadas no layout acima não é relevante.

2. Defina as seções das N placas de vídeo.

Section "Device"
  Identifier   "Placa de Vídeo Genérica 1"
  Driver      "sis"   
  BusID      "PCI:0:5:0"   
  Screen      0   
EndSection   
#
# Substitua o driver da placa de vídeo de acordo com 
# o seu hardware.
#
# A opção BusId identifica qual o endereço da placa de 
# vídeo que está sendo utilizada.
# Para obter o BusId de suas placas digite "lspci | grep VGA"
# Tome cuidado com os valores, pois o endereço fornecido 
# por lspci é em Hexadecimal enquanto que o X
# espera um valor em decimal. Para conversão use 
# "echo $((0xVALOR_HEXADECIMAL))"
.
.
.
Section "Device"
  Identifier   "Placa de Vídeo Genérica N"
  Driver      "sis"
  BusID      "PCI:0:6:0"
  Screen      0   
EndSection

3. Defina as seções dos N monitores.

Section "Monitor"
  Identifier   "Monitor 1"
  HorizSync    30-71
  VertRefresh  50-160
  Option       "DPMS"
EndSection         
.
.
.      
Section "Monitor"
  Identifier   "Monitor N"
  HorizSync    30-71
  VertRefresh  50-160
  Option       "DPMS"
EndSection

4. Defina as seções das N screen's. Recomenda-se utilizar 24 bits pois em alguns testes os navegadores não conseguiam executar animações em flash se essa configuração fosse inferior.

Section "Screen"
  Identifier   "Screen 1"
  Device       "Placa de Vídeo Genérica 1"
  Monitor      "Monitor 1"
  DefaultDepth 24   
  SubSection   "Display"
     Depth     24
     Modes     "1024x768" "800x600" "640x480"
  EndSubSection
EndSection
.
.
.
Section "Screen"
  Identifier   "Screen N"
  Device       "Placa de Vídeo Genérica N"
  Monitor      "Monitor N"
  DefaultDepth 24   
  SubSection   "Display"
     Depth     24
     Modes     "1024x768" "800x600" "640x480"
  EndSubSection
EndSection

5. A definição de teclado pode continuar igual a 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 dispositivo /dev/input/mice:

Section "InputDevice"
  Identifier   "Configured Mouse 1"
  Driver       "mouse"
  Option       "CorePointer"
  Option       "Device"       "/dev/input/mice"
  Option       "Protocol"     "ImPS/2"
EndSection

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:

Section "ServerFlags"
  Option "AllowMouseOpenFail"   "yes"
EndSection

OBS: Isso não afetará o multiterminal, pois os dispositivos mouses/teclados serão passados como parâmetros, 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:

Section "ServerFlags"
  ...
              
  # Desativar VT Switching
  Option    "DontVTSwitch" "yes"

  # Desativa o uso das teclas Ctrl+Alt+Backspace
  Option    "DontZap"       "yes"
  ...
EndSection

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:

# apt-get install xdialog

2. Descomprima o arquivo xkb-evdev.tar.gz no diretório /etc/X11.

3. Remova ou renomeie o arquivo /etc/gdm/gdm.conf:

# mv /etc/gdm/gdm.conf /etc/gdm/gdm.conf.backup

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:

# update-rc.d configuracao_automatica start 70 S .

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.

# invoke-rc.d configuracao_automatica start

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 em diante.

Um exemplo de um arquivo de configuração para um teclado ABNT2 pode ser visto a seguir:

rules = "evdev"
model = "abnt2"
layout = "br"

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.

gdm.conf

Edite o arquivo /etc/gdm/gdm.conf na seção [servers] inserindo o seguinte:

[servers]
0=Hardware
# Hardware será o servidor X principal, naquele onde serão executados os demais N servidores Xephyr's

1=Xephyr1
2=Xephyr2
3=Xephyr3
.
.
N=XephyrN
# Xephyr{1..N} é cada um dos servidores Xephyr's.

[server-Hardware]
name=Hardware
command=/usr/X11R6/bin/X
handled=false
flexible=false
# A opção handled=false impede que seja carregado o gerenciador de login no servidor X principal.

[server-Xephyr1]
name=Xephyr1
command=/usr/sbin/Xephyr.sh -display :0.0 -xauthority /var/lib/gdm/:0.Xauth -geometry 1024x768+0+0
-keyboard /dev/input/event0 -mouse /dev/input/event1,5 -use-evdev -dpi 92
handled=true
flexible=false
#
# A opção -keyboard e -mouse identificam, respectivamente, qual teclado e mouse
#serão associados ao servidor Xephyr1, conforme analisado no
#arquivo /proc/bus/input/devices. Se a opção
#-mouse terminar em ",5", como no exemplo, a roda do mouse será habilitada.
#
#
# Xephyr.sh é o script que carrega o servidor Xephyr.
.
.
.
[server-XephyrN]
name=XephyrN
command=/usr/sbin/Xephyr.sh -display :0.(N-1) -xauthority /var/lib/gdm/:0.Xauth -geometry 1024x768+0+0
-keyboard /dev/input/eventXX -mouse /dev/input/eventYY -use-evdev -dpi 92
handled=true
flexible=false
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação de requisitos
   3. Configurações
   4. Considerações
Outros artigos deste autor

Asterisk - O PBX de código aberto

Leitura recomendada

Backup remoto usando SSH

YUMI - Criando pendrives multiboot pelo GNU/Linux

Técnicas de memorização para facilitar o uso VI (Comandos básicos)

Rust - Uma nova linguagem de programação

Servidor de monitoramento Nagios

  
Comentários
[1] Comentário enviado por aprendiz_ce em 14/06/2006 - 22:01h

Parabéns pelo artigo!

Mas me tira umas dúvidas:

Como é que e feita a conexão em uma única CPU de diversos monitores, mouses e teclados?

Posso execucar e processar o que for necessário em cada terminal de forma independente, sem problemas?

Obrigado e aguardo retorno.

[2] Comentário enviado por jmhenrique em 15/06/2006 - 10:05h

Mardonio, acho que aqui tem algo sobre o mesmo tema, com fotos e até uma listinha de materiais.
http://br-linux.org/linux/multiterminais_com_linux_-_como_fazer

[ ]s, Henry

[3] Comentário enviado por aprendiz_ce em 15/06/2006 - 19:45h

Beleza!

Eu dei uma olhada, mas não vi nada referente as conexões.

Qualquer novidade posta aí.

Obrigado.

[4] Comentário enviado por winchester em 15/06/2006 - 21:06h

!!!!!!!!!!!!!!
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4185
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4442
Tem esses artigo daqui do vol tbm

[5] Comentário enviado por rattus em 16/06/2006 - 10:23h

mardonio,


para diversos monitores a gente utiliza várias placas de vídeo e para os teclados e mouses usamos as saidas USB que podem fazer cascateamento.
Problemas de concorrencia podem ocorrem, isso vai depender de cada aplicativo.

Ralph

[6] Comentário enviado por liviocf em 10/07/2006 - 12:00h

Parabéns pelo artigo! Sempre é bom ver essas soluções no mundo Linux!! Agora tenho uma pergunta: poderia implementar essa solução multiterminal com o Ubuntu? Pois como ele é baseado no Debian poderia ser compatível! Antes que alguém pergunte já é conhecido por alguns usuários daqui da UFAM e então gostaria de aplicar o multiterminal para aumentar o número de usuários com um menor custo para os nossos Labs.

[7] Comentário enviado por rattus em 10/07/2006 - 12:52h

liviocf,

no fórum do Ronald tem uma área para discutir sobre implantação de multiterminal em outras distribuições (inclusive Ubuntu).
Basicamente o que você precisa para usar essa receita é trabalhar com XOrg e GDM.
Atualmente tenho usado multiterminais em Slackware para trabalhar com a versão 6.8 do XOrg, a versão 6.9 está dando uns problemas para iniciar a segunda placa de vídeo.

Ralph Liebessohn

[8] Comentário enviado por liviocf em 28/07/2006 - 10:41h

Tenho uma dúvida que surgiu quando comecei a planejar como faria para implantar um sistema Multi-Ubuntu aqui na UFAM: o ubuntu vem ativado a montagem automática para CD-R e pen-drive, então o que aconteceria se colocasse um desses dispositivos quando o sistema estiver trabalhando com vários "terminais", ou seja, ele montara o drive para todos os usuários? Quero saber isso porque usamos os computadores não só para acessar a internet, mas trabalhar com arquivos em unidades removíveis!!!
Agradeço antecipadamente,

Lívio Figueirêdo

[9] Comentário enviado por rattus em 31/07/2006 - 08:40h

Livio,

repare que o linux é um sistema multiusuário. Se ao montar uma unidade automaticamente ela pode ser acessada por qualquer usuário que logue em uma tty, ela também será acessível para usuários que se loguem nas sessões gdm.

Ralph Liebessohn

[10] Comentário enviado por emersonsan em 13/12/2006 - 10:29h

Tentei com o kurumin, Debian BR, Ubuntu...
Mas continuo não conseguindo configurar mouses e teclados...
Estou usando aqueles adaptadores USB/PS2...
Hardware: 1 placa NV, 3 ATI, 1 mouse e 1 teclado PS/2 e o restante dos mouse e teclados também são PS/2, mas estão ligados com adaptadores USB/PS2...

quando termino tudo e digito "invoke-rc.d..." fica tudo preto

Alguém se habilita...

[11] Comentário enviado por rattus em 13/12/2006 - 10:52h

Oi Emersonsan,


observe que em http://www.scherolt.homelinux.org/multilinux já relataram problemas com esses adaptadores.
Não sei como o linux enxerga os periféricos atrás desses adaptadores.

[ ]

Ralph Liebessohn

[12] Comentário enviado por nandotux em 05/06/2007 - 18:48h

galera esses tutoriais q postam não esta claro bastante pra fazer esse multiterminal funcionar, eles postam como se todo mundo fosse fera no linux, tem q postar para pessas q estão começando agora, sem muita liguagem tecnica, eu já tentei fazer esse multitermnal de varias formas e nada, eu axo q alguem pega de um site em Inglês e tenta traduzir para o português ai fica uma Porcaria!!! se alguem já colocou esses sistema pra rodar eu gostaria de entrar em contato o por email o por telefone obrigado

[13] Comentário enviado por celsopimentel em 05/10/2007 - 11:34h

Posso utilizar qualquer placa de vídeo, tipo, posso utilizar o vídeo on-board e um vídeo PCIExpress? Ou existe algumas interfaces de vídeo que são comatíveis outras não?

[14] Comentário enviado por rattus em 10/10/2007 - 13:17h

Oi Celso,

desse modo que está descrito no tutorial as interfaces de vídeo são direcionadas pelo endeço delas que aperece no `lspci`.
Dá para usar a onboard sim, mas não cheguei a brincar com placas de vídeo que possuem duas saídas ou semelhantes e nem PCI Express.

Até.

Ralph Liebessohn

[15] Comentário enviado por assiscarvalho em 03/01/2009 - 17:59h

OLA AMIGOS. ESTOU COM UM PROJETO MEU DE CRIAR UMA LAN-HOUSE EM SISTEMA DE MULTI-TERMINAIS COM UMA VERSÃO LINUX. JA FIZ ESTE TRABALHO EM UMA LAN-HOUSE MINHA MAS COM WINDOWS E DEVIDO O MEU INTERESSE POR LINUX EU QUERIA SABER SE SERIA POSSIVEL ISSO. ENCONTREI UMA VERSÃO DE LINUX QUE SE ASSEMELHA A O WINDOWS XP MAS PODERIA USAR QUALQUER VERSÃO QUE ME FOSSE UTIL. MONTEU UMA LAN EM MULTI-TERMINAIS EM WINDOWS DE SEIS ESTAÇÕES. CONFESSO QUE NÃO HOUVE DIFICULDADE NENHUMA EM REALIZAR ESSE TRABALHO, MAS JA EM LINUX SIM, EU SINTO ALGUMA DIFICULDADE POIS POUCO CONHEÇO O SISTEMA, APESAR DE SER FAN DO PINGUIN.
POR GENTILEZA SE PUDEREM ME INSTRUIR EU AGRADECERIA.

[16] Comentário enviado por jmhenrique em 03/01/2009 - 18:19h

responda rápido:

0 - qual o seu ambiente? detalhadamente, por favor.
1 - já leu TODA a documentação para iniciar o projeto?
2 - qual(is) ?
3 - o que vc chegou a fazer ? detalhadamente, por favor.
4 - quais os problemas encontrados? detalhadamente, por favor.
5 - já se inscreveu em algum forum ou lista especializada sobre o tema?
6 - já considerou fazer esta pergunta na área de perguntas/respostas?

Uma critica construtiva:

Se vc pouco conhece o sistema, não deveria abraçar um projeto comercial. Antes familiarize-se usando o linux com "vivência própria". Seguir receita de bolo sem conhecimento é fonte de desastres, qualquer virgula fora do lugar causará efeitos que podem não ser previstos pela receita de bolo, e para olhos treinados, tudo é facil.

Ah, outra dica: não diga que já fez a mesma coisa usando outro sistema qualquer. As vezes a pessoa mais indicada para lhe ajudar pegará antipatia muito fácil somente de ouvir/ler você falar em outro sistema.

[ ]s. e divirta-se.
Henry

[17] Comentário enviado por aantunes em 04/03/2010 - 11:21h

Ralph Liebessohn,
Bom dia, tem como fazer esse processo sem sem o GDM, KDM ou XDM?
Pois tenho estações sem a tela de login.
As estações faz login automatico com um usuario

[18] Comentário enviado por miltinhocientist em 17/03/2010 - 19:04h

Bom dia pessoal, gosraria de saber se é possivel construir um sistema que tranforme o computador em multiterminal após o sistema operacional ter sido iniciado.

Do tipo, você clica em um ícone no desktop e um script abre em um outro monitor em modo telacheia, um terminal pedindo login e senha, apos isso, o xephir inicia o modo grafico, e uma janela com atalhos para os programas.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts