Multiterminais

Multiterminais

1. O que é um MULTITERMINAL?


“É literalmente dividir um computador…”

Multiterminais são uma tecnologia e uma idéia inovadora ao mesmo tempo. Podem em muito contribuir para um aumento da difusão de conhecimento tecnológico e também de Inclusão Digital. Os multiterminais permitem um melhor emprego do parque de computadores instalados em uma escola ou empresa e que as vezes não está sendo utilizado em todo o seu potencial. Para isso necessitamos compreender o que são multiterminais?

Layout de um sistema Multiterminal
Em casa usando Multiterminal com Ubuntu 6.10 – Eu, Ronald,
(na Esquerda) e o amigo Estáquio (na Direita)

 

Para que possamos nos situar neste conceito podemos fazer uma rápida analogia com os antigos “mainframes”. Os mainframes eram computadores grandes que dividiam seu poder de processamento e possibilitavam que inúmeros usuários o utilizassem ao mesmo tempo através de terminais diretamente conectados a ele, os chamados “terminais burros”. Todo o processamento era feito de maneira centralizada. Um mainframe permitia um grande número de terminais conectados, com sessões de trabalho independentes para cada usuário.
Agora podemos desenvolver um conceito prático de multiterminais então: “Um multiterminal é um computador com uma configuração particular que permite seu uso por várias pessoas de forma simultânea e independente”.

 

2. A Comunidade Multilinux

Saiba mais sobre esse projeto interessante. Visite o site da comunidade de Multiterminais com GNU/Linux no Brasil clicando na imagem abaixo ou no link ao lado: http://ronaldcosta.pro.br/sitio/wordpress.

 

3. O projeto Multilinux

Este PROJETO é para reunir o pessoas interessadas em formar uma equipe em torno desta tecnologia… Todos são bem vindos… Quem estiver interessado entre em contato: scherolt@gmail.com[8] Usuários e desenvolvedores de todas as distribuições GNU/LINUX são bem vindos.

Objetivos Iniciais:

É um projeto LIVRE, e ABERTO, que tem a idéia de divulgar está tecnologia, melhorar e ampliar seu uso e possibilidades.
Metas

- Melhorar o SCRIPT inicial e portar para as maiores distros GNU/LINUX.
- Melhorar o FÓRUM do PROJETO.
- Formar a equipe do PROJETO MULTILINUX.
- Montar um SITE do PROJETO (Pode ser um WIKI)

Quer colaborar com idéias? PARTICIPE !!!

Onde usar?

Multiterminal usando MULTILINUX no Instituto Superior Fátima.

Locais onde se tem a necessidade de um grande número de computadores:

  • Laboratórios
  • Bibliotecas
  • Telecentros
  • Escolas
  • Bureau de serviços
  • Cyber-Café
  • Pequenas e médias empresas
  • Serviços de digitação e acesso a internet…

Como funciona?

Multiterminal em minha casa.

Os multiterminais tem o funcionamento semelhante aos mainframes, onde teremos vários monitores, placas de vídeo, teclados e mouses, conectados a um mesmo computador, compartilhando seu processamento e permitindo que vários usuário utilizem sessões de trabalho independentes. As ligações são físicas, e não são realizadas através de rede de comunicação como é o caso do LTSP[9] (Linux Terminal Server Project). Em multiterminais, as ligações ocorrem pela placa de vídeo, pelos mouses e teclados de maneira local, enquanto em um LTSP através da rede e das placas de rede, com o uso de um servidor central.Para tornar possível o uso de multiterminais exploramos a característica multi-usuário do Linux.

O sistema que emprego[10] e um multiterminal usado Xephyr[11]: O Xephyr é um tipo de servidor gráfico 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 o enxergam como um servidor X normal.

O que é preciso?

Layout de configuração.

A configuração envolve um computador, os teclados e os mouses USB, as placas de vídeo e os monitores. No caso do seu computador possuir poucas saídas USB, pode ser utilizado um HUB USB para aumentar essa quantidade. Não existe uma configuração ideal, mas sim bom senso. Não dá para se pensar em um multiterminal com cinco monitores em um K6-2-500Mhz. Mas um com dois monitores sim, desde que o equipamento possua memória RAM suficiente, para duas instâncias do ambiente gráfico, que neste caso pode ser o XFCE4.

Nos testes que realizei usei um SEMPROM 2.2GHz, com 512 Mb e usei 5 monitores, sem maiores dificuldades. Claro que usar placas de vídeo iguais ajudam, mas não é algo obrigatório. Eu ja montei com quatro placas de vídeo diferente, e inclusive 1 AGP e outras 3 PCI. As placas de vídeo ONBOARD também podem ser usadas. Quem possui NOTEBOOK, ou placas de vídeo com saída DVI, também podem montar multiterminais.

Quais as Vantagens?

  • Menor custo em equipamentos (1 CPU para até 7 Monitores, dependendo da placa mãe e quantidade de slots PCI, do processador empregado e da quantidade de memória);
  • Menor número de pontos de rede (menos fios de rede, menos tomadas, menor tamanho do ativo de rede necessário para o laboratório);
  • Menor número de pontos de energia (menor consumo, menor quantidade de tomadas, menor número de estabilizadores)
  • Facilidade de manutenção (menor quantidade de computadores, emprego de equipamentos reserva para substituição)
  • Facilidade de instalação de software (instalar e manter menos computadores)
  • Excelente desempenho (A relação custo X benefício é excelente !!!)
  • Apropriação de tecnologia (crescimento técnico, possibilidade de projetos para instalação)

Onde começou?

Segundo pesquisas realizadas na internet, e de acordo com os seguinte artigos publicados, os multiterminais já são empregados a bastante tempo.

Em 1999:

Multi-Head Displays in Linux
Using More Than One Screen in Linux
Will Weisner
Saturday, June 19, 1999 11:02:29 AM
http://linuxplanet.com/linuxplanet/reports/820/1/

Em 2003:

XFree Local Multi-User HOWTO
Svetoslav Slavtchev
<users.sourcefourge.net>
Sep 2003
http://www.ltn.lv/~aivils/

Em 2005:

– Miguel Freitas (PUC)[4]

– UFPR [5]

– Instituto Superior Fátima [6]
Em 2006:

– UNIOESTE [7]

 

No Instituto Superior Fátima o início foi em março de 2005, quando um projeto da instituição previa o aumento de laboratórios e eu enquando Gestor de TI da Instituição fui questionado sobre uma solução barata para ampliação de laboratórios.

Busquei uma solução e encontrei os multiterminais. Logo decidi, dominar e disseminar o conhecimento do emprego desta tecnologia. A sua grande aplicação é facilitar o acesso de mais pessoas as TICs e aproveitar os recursos oferecidos pelo crescimento rápido da configuração do computadores hoje disponíveis no mercado. Esse equipamentos possuem uma grande capacidade de processamento e memória e na maior parte não são usados em todo o seu potencial.

 

Existem casos em que não deve ser usado?

  • O som fica concorrido, sendo executado por todos os terminais;
  • O acesso concorrido aos dispositivos removíveis;
  • Limite para aplicações extremamente pesadas (ECLIPSE);
  • Não permite o reboot da máquina;
  • Portas USB ocupadas (necessidade HUB USB para aumentar o número de portas);
  • No caso da CPU precisar manutenção, todos os terminais ficarão indisponíveis;

Solução para o Acesso concorrido aos dispositivos removíveis

No arquivo /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda1 / reiserfs notail 0 1
/dev/hda2 none swap sw 0 0
/dev/hdb /media/cdrom0 udf,iso9660 users,noauto 0 0
/dev/fd0 /media/floppy0 auto,vfat rw,users,noauto,sync 0 0
/dev/sda1 /media/usbdisk auto rw,users,umask=000,sync 0 0

Note que foi adicionado a opção “users” para o CD-ROM, o FLOPPY e a PEN-DRIVE, de maneira que permite que todos os usuários tenham acesso aos dispositivos removíveis.

Como fazer manualmente ???

Meu projeto é baseado no howto (como fazer) da UFPR1, e a minha contribuição é criar um projeto para facilitar ao máximo a instalação através de scripts automáticos, aproximando esta tecnologia do usuário leigo. A aplicação desta solução é bem ampla e permite seu emprego em vários campos, tais como: web cafés, telecentros, projetos de Inclusão Digital, laboratórios escolares, pequenas empresas, locais onde se empregue o computador em tarefas administrativas, etc.

Os objetivos principais desta idéia são a economia de recursos, a diminuição da ociosidade de equipamentos que crescem em performance exponencialmente por força do mercado, o aumento da capacidade já instalada de equipamentos. Fica bem claro que é um excelente solução para laboratórios escolares, porque normalmente usamos acesso internet, digitação e softwares sem grande necessidade de recursos computacionais.

Cabe ressaltar que esta solução não deve ser empregada onde é necessário grande recurso gráfico ou processamento muito pesado, como codificação de vídeo, jogos 3D ou aplicações extremamente pesadas.

Script Automático – Agora Sim !!!

Download do MULTILINUX.SH [12]

Depois de baixar troque as permissões para execução e rode como ROOT.

$ su -
# wget http://www.ronaldcosta.pro.br/sistemas/multilinux/download/multilinux.sh
# chmod +x multilinux_ubuntu610_v1.0_11Mar07.sh
# ./multilinux_ubuntu610_v1.0_11Mar07.sh

RECEITA DE BOLO

#! /bin/bash

##################################################################################
#
#             Script de configuração do MULTILINUX para Ubuntu 6.10
#                 Autor: Ronald Costa   - Fev 2007 - Versão 1.1
#                   E-mail: ronaldcosta@institutofatima.edu.br
#
#       Este script é LIVRE e pode ser usado sem nenhuma restrição !!!
#                    APENAS MANTENHA OS CRÉDITOS AO AUTOR !!!
#
#
##################################################################################

##################################################################################
#    - Abra um terminal como usuário no ambiente gráfico
#    - Digite gksu gedit script.sh
#    - Cole este script no editor e salve
#    - Feche o editor
#    - chmod 777 script.sh
#    - Execute o script
#    - gksu script.sh
##################################################################################

zenity --title="MULTILINUX" --info --text="Sistema MULTILINUX para UBUNTU 6.10
             www.ronaldcosta.pro.br
               scherolt@gmail.com"

zenity --title="MULTILINUX" --info --text="Este sistema não tem fins comerciais.
 Sua licença é GPL. Mantenha este software livre!"

zenity --title="MULTILINUX" --info --text="Este script vai ajudar na instalação 
do MULTILINUX. Você deve ter conectado os teclados e mouses USB, 
bem como ter instalado as placas de vídeo adicionais."

zenity --title="Atenção !!!" --warning --text="Caso ainda não tenha instalado placas de vídeo, 
teclados e mouses, clique em CANCELAR, desligue o computador e realize a instalação.
 Depois execute novamente o script para instalação." &&  RESP=0 || RESP=1

#echo Retorno: $RESP

if [ $RESP -eq 1 ]; then
    zenity --title="MULTILINUX" --info --text="Terminando... Execute novamente o script 
    para instalação, depois de ter instalado as placas, teclados e mouses."
    exit
fi

################################################################
#       Pergunta o PROXY da REDE se for o caso....
################################################################

ACTION=$(zenity --title="Acesso a Internet" --text="Você utiliza PROXY em sua rede?:" --list --column "Ação" SIM NÃO);

case "$ACTION" in
"SIM" )
XPROXY=$(zenity --title="Endereço do Proxy da Rede !" --entry --text="Insira o endereço de PROXY da rede aqui ! (Ex: http://10.67.120.35:3128)");
;;
"NÃO" )
zenity --info --title "Sem Proxy !" --text "O Instalador vai considerar que você não usa PROXY !";
;;
*)
zenity --error --title "Alerta" --text "Nenhuma ação foi selecionada. O Instalador vai considerar que você não usa PROXY !";
;;
esac 

export http_proxy="$XPROXY"

export ftp_proxy="$XPROXY"

################################################################
#       Verifica se o USUARIO é ROOT....
################################################################

#verifica se o usuário tem privilégios de ROOT para poder alterar 
# configurações do sistema [ "$USER" != "root" ]

if ! [ "$USER" = "root" ]; then
    zenity --title="MULTILINUX" --info --text="É necessário privilégios de ROOT. 
    O usuário não tem permissão para alterar configuração do sistema necessárias 
    para o funcionamento dos MULTITERMINAIS..."
    exit
fi

################################################################
#     Verifica a Quantidade de PLACAS, TECLADOS E MOUSES....
################################################################

QT_PLACAS=`lspci | grep -c VGA | cut -d" " -f1`

#Sai se existir apenas uma placa de video
if [ $QT_PLACAS = 1 ]; then
    zenity --title="MULTILINUX" --info --text="Não será possível configurar o MULTILINUX,
    existe apenas UMA PLACA de vídeo..."
    exit
fi

cd /tmp

cat /proc/bus/input/devices > /tmp/devices.txt

QT_TECLADOS=`cat devices.txt |grep keyboard -A 2| grep Phys |grep input0|wc -l`

#Sai se existir apenas um teclado
if [ $QT_TECLADOS = 1 ]; then
    zenity --title="MULTILINUX" --info --text="Não será possível configurar o MULTILINUX,
    existe apenas UM TECLADO conectado..."
    exit
fi

QT_MOUSES=`cat devices.txt |grep Mouse -A 2| grep Phys |grep input0|wc -l`

#Sai se existir apenas um mouse
if [ $QT_MOUSES = 1 ]; then
    zenity --title="MULTILINUX" --info --text="Não será possível configurar o MULTILINUX,
    existe apenas UM MOUSE conectado..."
    exit
fi

zenity --title="MULTILINUX" --info --text="Foram detectadas $QT_PLACAS placas de vídeo. 
O sistema vai tentar configurar $QT_PLACAS MULTITERMINAIS..."

############################################################
# ---- Executa a configuracao do XORG
############################################################

Xorg -configure :3

cp /etc/X11/xorg.conf /tmp

cd /tmp

sed '/Section \"ServerLayout\"/,/EndSection/d' xorg.conf > novo.xorg.conf

cp novo.xorg.conf novo.xorg.conf.aux

sed '/Section \"DRI\"/,/EndSection/d' novo.xorg.conf.aux > novo.xorg.conf

cp novo.xorg.conf novo.xorg.conf.aux

sed '/Section \"Screen\"/,/EndSection/d' novo.xorg.conf.aux > novo.xorg.conf

cp novo.xorg.conf novo.xorg.conf.aux

sed '/Section \"Monitor\"/,/EndSection/d' novo.xorg.conf.aux > novo.xorg.conf

cp novo.xorg.conf novo.xorg.conf.aux

sed '/Section \"Device\"/,/EndSection/d' novo.xorg.conf.aux > novo.xorg.conf

cp /root/xorg.conf.new /tmp

sed '/Section \"Files\"/,/EndSection/d' xorg.conf.new > novo.xorg.conf2

cp novo.xorg.conf2 novo.xorg.conf.aux

sed '/Section \"Module\"/,/EndSection/d' novo.xorg.conf.aux > novo.xorg.conf2

cp novo.xorg.conf2 novo.xorg.conf.aux

sed '/Section \"InputDevice\"/,/EndSection/d' novo.xorg.conf.aux > novo.xorg.conf2

cat novo.xorg.conf2 >> novo.xorg.conf

sed 's/Mouse0/Configured Mouse/g' novo.xorg.conf > novo.xorg.conf2

cp novo.xorg.conf2 novo.xorg.conf.aux

sed 's/Keyboard0/Generic Keyboard/g' novo.xorg.conf.aux > novo.xorg.conf

rm -rf /root/xorg.conf.new 

#########################################
#   DONT VT SHITCH
#########################################

######################################
# Novo XORG OK esta em novo.xorg.conf
######################################

# Remove o /etc/X11/xorg.conf e coloca o novo !!!
mv /etc/X11/xorg.conf /etc/X11/xorg.conf.antes.do.multiterminal

# Move o /tmp/novo.xorg.conf para /etc/X11/xorg.conf
mv /tmp/novo.xorg.conf /etc/X11/xorg.conf

######################################
#     Seleciona uma RESOLUCAO
######################################

RESOLUCAO=$(zenity --text="Escolha a Resolução desejada !" --list --column "Opção" 1024x768 800x600 640x480);

cp /etc/X11/xorg.conf /tmp/xorg.conf.teste

touch /tmp/resolucao.txt
echo "                Modes           \"$RESOLUCAO\"" > /tmp/resolucao.txt

sed '/Depth     8/r resolucao.txt' xorg.conf.teste > xorg.conf.ok
sed '/Depth     15/r resolucao.txt' xorg.conf.ok > xorg.conf.teste
sed '/Depth     16/r resolucao.txt' xorg.conf.teste > xorg.conf.ok
sed '/Depth     24/r resolucao.txt' xorg.conf.ok > xorg.conf.teste

rm /tmp/xorg.conf.ok
mv /tmp/xorg.conf.teste /etc/X11/xorg.conf

######################################
# Montar o novo GDM.CONF
######################################

# prepara o GDM.CONF removendo o que está depois de [servers]
cd /tmp

QT_TERMINAIS=$QT_PLACAS

sed '/\[servers\]/,$d' /etc/X11/gdm/gdm.conf > /tmp/gdm.conf2
echo>>gdm.conf2

# montando... o novo gdm
echo "[servers]" >> gdm.conf2

for ((i=0;i<=$QT_TERMINAIS;i++))
 do
  echo "$i=Xephyr$i" >> gdm.conf2
 done

echo >> gdm.conf2
echo >> gdm.conf2

echo "[server-Xephyr0]" >> gdm.conf2
echo "name=Xephyr0" >> gdm.conf2
echo "command=/usr/bin/X -ac -br" >> gdm.conf2
echo "handled=false" >> gdm.conf2
echo "flexible=false" >> gdm.conf2

echo >> gdm.conf2
echo >> gdm.conf2

for ((i=1;i<=$QT_TERMINAIS;i++))
 do
  t=$((i-1))
  echo "[server-Xephyr$i]" >> gdm.conf2
  echo "name=Xephyr$i" >> gdm.conf2
  echo "command=/usr/sbin/Xephyr.sh -display :0.$t -xauthority /var/lib/gdm/:0.Xauth -fullscreen -kbdphys \
TECLADO$i -mousephys MOUSE$i -use-evdev" >> gdm.conf2
  echo "handled=true" >> gdm.conf2
  echo "flexible=false" >> gdm.conf2
  echo >> gdm.conf2
  echo >> gdm.conf2
 done

######################################
# Detectar os teclados e mouses (USB)
######################################

cd /tmp

cat /proc/bus/input/devices > /tmp/devices.txt

QT_TECLADOS=`cat devices.txt |grep keyboard -A 2| grep Phys |grep input0|wc -l`
cat devices.txt |grep [kK]eyboard -A 2| grep Phys |grep input0|cut -d "=" -f2 > teclados.txt

QT_MOUSES=`cat devices.txt |grep Mouse -A 2| grep Phys |grep input0|wc -l`
cat devices.txt |grep [mM]ouse -A 2| grep Phys |grep input0|cut -d "=" -f2 > mouses.txt

echo "QT de Teclados = $QT_TECLADOS"
echo "-----------------------------------------"
cat teclados.txt
echo
echo "QT de Mouses = $QT_MOUSES"
echo "-----------------------------------------"
cat mouses.txt
echo

################################################################
# Trocando endereços dos TECLADOS no GDM.CONF
################################################################
echo "TROCANDO TECLADOS"
echo "-----------------------------------------"

i=1
cat teclados.txt | while read ENDERECO ; do NOME="TECLADO$i"; sed s,$NOME,$ENDERECO,g gdm.conf2 > gdm.conf3;\
 mv gdm.conf3 gdm.conf2; i=$((i+1)) ; done

echo "OK"
echo "-----------------------------------------"
echo "TROCANDO MOUSES"
echo "-----------------------------------------"

# Trocando endereços dos MOUSES no GDM.CONF
i=1
cat mouses.txt | while read ENDERECO ; do NOME="MOUSE$i"; sed s,$NOME,$ENDERECO,g gdm.conf2 > gdm.conf3;\
 mv gdm.conf3 gdm.conf2; i=$((i+1)) ; done

echo "OK"
echo "-----------------------------------------"

# troca nome para GDM.CONF.OK
mv gdm.conf2 gdm.conf.ok

# faz BACKUP do GDM.CONF original
cp /etc/X11/gdm/gdm.conf /etc/X11/gdm/gdm.conf.antes.do.multiterminal

# Coloca no local o GDM.CONF
cp /tmp/gdm.conf.ok /etc/X11/gdm/gdm.conf

echo "GDM.CONF"
echo "-----------------------------------------"

######################################
# Baixar o Xhephyr e instalar
######################################

cd /tmp

wget http://www.c3sl.ufpr.br/multiterminal/howtos/xephyr-precompiled.tar.bz2
tar -xjf xephyr-precompiled.tar.bz2 --directory /usr/local/

echo "DOWNLOAD OK"
echo "-----------------------------------------"

wget http://www.ronaldcosta.pro.br/sistemas/multilinux/download/Xephyr.sh
cp /tmp/Xephyr.sh /usr/sbin/Xephyr.sh

chmod +x /usr/sbin/Xephyr.sh

echo "Xephyr.sh - OK"
echo "-----------------------------------------"
######################################
# Acertar o erro do teclado
######################################

cd /tmp
wget http://www.c3sl.ufpr.br/multiterminal/howtos/xkb-evdev.tar.gz
tar -zxf xkb-evdev.tar.gz --directory /etc/X11/

for ((i=0;i<=$QT_TERMINAIS;i++))
 do
  echo 'rules = "evdev"' >> /usr/X11R6/lib/X11/xkb/X$i-config.keyboard
  echo 'model = "abnt2"' >> /usr/X11R6/lib/X11/xkb/X$i-config.keyboard
  echo 'layout = "br"' >> /usr/X11R6/lib/X11/xkb/X$i-config.keyboard
 done

cp /etc/X11/xkb/rules/evdev /etc/X11/xkb/rules/evdev.antes.do.multilinux
cat /etc/X11/xkb/rules/evdev | sed 's/pc\/pc(pc104)+pc\/br/pc(pc104)+br/'>/etc/X11/xkb/rules/evdev.ok
rm /etc/X11/xkb/rules/evdev 
mv /etc/X11/xkb/rules/evdev.ok /etc/X11/xkb/rules/evdev

######################################
#  TERMINADO !!!
######################################

# Solicitar o REBOOT ou recarregar o X...

zenity --title="Atenção !!!" --warning --text="Atenção!!! O Sistema será reiniciado para finalizar as configurações. Clique em OK para reiniciar. Clique em CANCELAR para não reiniciar." &&  RESP=0 || RESP=1

if [ $RESP -eq 1 ]; then
    zenity --title="MULTILINUX" --info --text="Terminando... O Sistema precisa ser reiniciado."
    exit
fi

reboot

######################################################################
#           Agradecimentos aos amigos que colaboraram:
######################################################################

# * Eustáquio Mendes Guimarães
# * Luiz Felipph
# * Elder Max

Dicas.

Observação: nas novas versões do Debian Etch (ubuntu 6.10), 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:

   abnt2               br      =       pc/pc(pc104)+pc/br

Para:

   abnt2               br      =       pc(pc104)+br

 

Colabore e Participe – LISTA do MULTILINUX

Qualquer dúvida ou discussão no sentido de colaborar com o PROJETO, acesse a LISTA do MULTILINUX:

LISTA DO MULTILINUX [13]

Qualquer colaboração para melhorar o PROJETO é bem vinda…

Ajude, teste, aponte melhorias, dê novas idéias….

 

Entre em contato…

Acesse meu site e entre em contato:

Ronald Emerson Scherolt da Costa – www.ronaldcosta.pro.br [14]

e-mails: scherolt@gmail.com

 

 

 

Deixe uma resposta