You are on page 1of 10

08/05/12

Multihead

Programao Linux

Artigos

Multi-Head
Unixtron Headsets Fabricao Headset,- base discadora amplificadora,VoIP,Multimidia,acess
www.unixtron.com.br

Antena Wifi de batata Pringles Guia de programao Shell Script Guia de programao Javascript Compactao de dados Eletrnica do bsico ao microprocessador Como recuperar uma bateria viciada Qual a importncia de um layout em um website Extreme Programming e a sua relao com Software Livre Porque Linux no serve para desktops Como configurar um ambiente Multi-Head (deprecated)

Servidor no Brasil Servidor dedicado com 20Mbps de banda. Hardware certificado Under.com.br/Dedicados Soluo USB over IP Use hardlock com VMware, XEN, VBox. Conecte dispositivos USB na rede IP
www.albacore.com.br

Introduo

MultiHead vm do ingls "cabeas mltiplas". Na prtica como colocar vrias pessoas usando a mesma mquina sem uma atrapalhar a outra. Muitos dos usurios de computadores no imaginam o que os computadores ainda podem fazer. Vemos nos filmes de fico coisas engenhosas que controlam e facilitam a vida das pessoas. O que geralmente um erro de se pensar que muitas das inovaes s viro com a evoluo tcnica da engenharia e arquitetura. Na prtica basta uma idia simples para que tudo que se evoluiu at o presente momento possa ser abandonado ou potencializado. Ento, alm de aumentar a capacidade dos recursos importante us-los de forma plena. A idia do multi-head baseado nesta otimizao e melhor aproveitamento dos recursos que temos. Essa uma idia que surgiu basicamente da comunidade de software livre. Acho que a maior e primeira referncia no assunto foi Alvils Stoss um leto (nascido na Letnia) que escreveu um patch para o kernel chamado Backstreet Ruby. Esse patch foi bem assimilado pela comunidade e mais tarde possibilitou o servidor X a suportar nativamente o conceito sem adaptaes. O servidor X "um captulo a parte". Na verdade a concepo dos sistemas Unix definem os recursos de vdeo atravs de uma aplicao remota cliente-servidor (X). E pelo X j ter esta natureza possibilitou configuraes diversas de computadores e terminais. Na prtica pode at ser que isso traga um desempenho um pouco menor mas traz um recurso poderoso.

Os requesitos no so muitos. Os recursos que voc precisa para rodar pelo menos 2 terminais so muito baixos. Se voc tiver 1 teclado usb, 1 mouse usb, e uma placa com duas sadas de vdeo (at mesmo 1 sada de TV) j existe a possibilidade de configurar o seu multihead. Na teoria o nmero de usurios podem usar simultaneamente apenas uma CPU bem grande. Existem placas Desktop com at 6 slots PCI mais 1 AGP ou video onBoard. Todos os slots podem ser usados, e se considerarmos cada slot com uma placa de duas sadas conseguiramos rodar praticamente um laboratrio inteiro! No tem quem veja uma soluo pronta rodando e no fique igual criana com brinquedo novo. . . Essa soluo deu novas perspectivas a montagem de um laboratrio e pode reduzir e muito os custos dos mesmos.

Os micro-processadores evoluram muito ao longo da sua histria. Os computadores que temos hoje so computadores de grande capacidade de processamento. Enquanto as tarefas bsicas, mesmo com todos os recursos grficos, no so um verdadeiro desafio para o processamento em geral. Os usurios que gostam de ter grficos com histrico do uso da CPU podem constatar que, h um grande perodo que a CPU fica ociosa. Voc pode fazer um teste habilitando o monitor do sistema na barra do Gnome ou usando o Superkaramba. No uso geral o grfico se mostra mais ou menos com picos: Exemplo:

www.afms.com.br/multihead.html

1/10

08/05/12

Multihead

Supondo que este um histrico de uso esperado dos usurios, se os picos no coincidirem entre eles o resultado(sensao do usurio) vai ser igual a de um computador dedicado. Por outro lado se os picos coincidirem voc ter diviso do desempenho pela quantidade de coincidncias que ocorrero. Para teorizar estas informaes podemos usar um exemplo. Consideremos "picos" os momentos que a CPU passou de 50% de uso e se manteve por pelo menos 1 segundo e no mximo 2 segundos. Durante o meu teste de uso que abri alguns emails e editei este texto tive 2 picos em 2 minutos. Se tivssemos 2 usurios, com o mesmo tipo de uso, a probabilidade de haver um momento de coliso dos picos muito baixa (perto de 5%, dvidas?). Porm quanto mais usurios, mais alta essa probabilidade vai ser e mais rpido ela cresce ( que ela no uma funo linear). possvel fazer mais estudos dessa forma, mas isto pode no ser adequado pois no podemos prever o que cada usurio vai fazer. Ento a nica ferramenta adequada pode ser uma pesquisa com os usurios perguntando a sensao que cada um teve ao usar o computador.

claro que algumas aplicaes como jogos por exemplo exigem um processamento grande e contnuo. Mas tarefas como tarefas de escritrio este grfico bem exemplificado. Ento podemos partir do princpio que seus usurios no vo jogar pesados jogos 3D (no mximo jogos em flash da internet). Porm nem tudo num computador CPU. Esse tipo de ambiente traz outros tipos de desafios. Por exemplo: o acesso a disco! Os discos rgidos so dispositivos que eu, particularmente, considero verdadeiros dinossauros da informtica. Eles so lentos e tem uma latncia muito grande. Pior que isso, tendem a ficar mais lentos quando os acessos so no seqenciais ou seja em setores distantes. O que nos leva a concluir que um ambiente de multiterminais o pior ambiente possvel para acesso a discos (visto que os usurios so independentes). Mesmo tendo estes desafios o Linux nativamente j usa as melhores alternativas de amenizao dos problemas. Como por exemplo: Cache de disco em memria. Bibliotecas compartilhadas. Filosofia Unix de multi-usurio. Alm da atribuio do Linux como sistema para servidores.

O cache de disco em memria possibilita que pequenos acessos sejam imperceptveis. Por outro lado o uso de bibliotecas compartilhadas faz com que programas j abertos sejam aproveitados entre vrios usurios de forma transparente. O administrador da mquina pode (e desejvel) configurar o sistema de forma a no possibilitar diversas implementaes que no so compartilhadas. Por exemplo, numa mesma mquina instalado KDE e GNOME. Visto que um usa QT e o outro GTK e no compartilham nada entre eles. Essas facilidade que o linux apresenta faz com que o multiterminal funcione bem at em um Celeron 1.6 Ghz com 128 mb de RAM. Pelo menos 512MB de RAM e HD Sata recomendado. Outra coisa que vale a pena ressaltar: Para configurar seu ambiente multiterminal necessrio ter uma certa experincia com Linux.

Colocando as placas e achando elas no sistema

Bom, tanto faz a ordem dos dispositivos USB ou ento das placas, s coloque-as em qualquer ordem. Procure no fazer a instalao do Linux com elas plugadas. Em distros como o Mandriva, alguns programas de deteco automtica travam ou ento tentam configurar automaticamente todas elas e ocorrem problemas.

Agora verifique se est instalado o Xorg, hotplug, udev e tudo configurado no boot. Dentre as formas de fazer escolherei a mais simples. Mais pra frente passarei rapidamente sobre as outras. Tendo tudo funcionando, entre no shell e d um lspci: $ lspci .... 0000:00:09.0 VGA compatible controller: ATI Technologies Inc Rage 128 RK/VR 0000:00:0a.0 VGA compatible controller: ATI Technologies Inc Rage 128 RK/VR 0000:00:0b.0 VGA compatible controller: ATI Technologies Inc Rage 128 RK/VR 0000:01:00.0 VGA compatible controller: Silicon Integrated 661FX/M661FX/M661MX/741/M741/760/M760 PCI/AGP

Systems

[SiS]

www.afms.com.br/multihead.html

2/10

08/05/12

Multihead

Anote os endereos que esto ali no primeiro campo, caso saiam muitos dispositivos, um "grep VGA" ajuda. Descubra tambm quais mdulos so carregados pra cada dispositivo. Agora est na hora de verificar os dispositivos USB. Pode parecer bobagem eu falar isso, mas verifique mesmo se esto plugados um nmero muito grande assim de dispositivos sempre tem um mal encaixado e voc perde um dia inteiro toa. No shell mesmo d um cat no /proc: $ cat /proc/bus/input/devices 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=event1 mouse0 ts0 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:03.0-1/input0 H: Handlers=kbd event2 I: Bus=0003 Vendor=0a81 Product=0101 Version=0110 N: Name="CHESEN USB Keyboard" P: Phys=usb-0000:00:03.0-1/input1 H: Handlers=kbd event3 I: Bus=0003 Vendor=0566 Product=3002 Version=0100 N: Name="0566:3002" P: Phys=usb-0000:00:03.0-2/input0 H: Handlers=kbd event4 I: Bus=0003 Vendor=1267 Product=0210 Version=0001 N: Name="PS/2+USB Mouse" P: Phys=usb-0000:00:03.0-3/input1 .... (e tudo mais l pra baixo)

Veja que o mesmo teclado "CHESEN USB Keyboard" tem o mesmo endereo fsico, mas tem duas entradas. Isso se deve as teclas especiais como desligar, suspender, navegao na internet e "Windows" que o kernel trata como um teclado separado. Aqui iremos s usar o primeiro input. Anote o endereo fsico (PHYS) de cada um. Tendo isso agora vamos para o prximo passo.

Comeando a por a mo na massa

Dentre os problemas que envolvem os multiheads, existem alguns realmente chatos. As placas no so projetadas pra funcionar de forma independente. Uma placa sempre derruba a outra, s vezes aparecem caracteres estranhos em uma delas e a tela misteriosamente comea a rodar com um simples mount ou swapon. Por exemplo, uma interrupo pode ser "entendida" por todas elas. Isto acontece com a int 10. Quando a placa inicializada. Porm simplesmente tirando a interrupo 10 faz com que as placas secundrias no tenham memria suficiente para inicializar (sem modos de tela vlidos). Mas calma, no o fim do mundo. Para isso d-se um jeito, colocando um script simples no boot que chamaremos de "Xorg-multiterminal". Ele s inicializar as placas sem a interrupo 10 pra que depois elas sejam usadas. Mas primeiro vamos configurar o xorg.conf, edite o /etc/X11/xorg.conf mais ou menos com a seguinte configurao, mudando os endereos pelo qual voc anotou: .... Section "InputDevice" Identifier "Keyboard0" Driver "kbd" Option "Protocol" "evdev" Option "Dev Phys" "isa0060/serio0/input0" Option "XkbRules" "xorg" Option "XkbModel" "pc104" Option "XkbLayout" "us" Option "CoreKeyboard" EndSection Section "InputDevice" Identifier "Keyboard1"
www.afms.com.br/multihead.html 3/10

08/05/12

Multihead

Driver Option Option Option Option Option Option EndSection

"kbd" "Protocol" "evdev" "Dev Phys" "usb-0000:00:03.0-1/input0" "XkbRules" "xorg" "XkbModel" "pc104" "XkbLayout" "us" "CoreKeyboard"

Section "InputDevice" Identifier "Keyboard2" Driver "kbd" Option "Protocol" "evdev" Option "Dev Phys" "usb-0000:00:03.0-2/input0" Option "XkbRules" "xorg" Option "XkbModel" "pc104" Option "XkbLayout" "us" Option "CoreKeyboard" EndSection Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "evdev" Option "Dev Phys" "usb-0000:00:03.2-1/input1" Option "CorePointer" Option "ZAxisMapping" "4 5" EndSection Section "Device" Identifier Driver BusID Option Option EndSection Section "Device" Identifier Driver BusID Option Option EndSection "Device0" "sis" "PCI:1:0:0" "NoInt10" "Yes" "RestoreBySetMode"

"no"

"Device1" "ati" "PCI:0:9:0" "NoInt10" "Yes" "RestoreBySetMode"

"no"

Section "ServerLayout" Identifier "Layout0" Screen "Screen0" InputDevice "Keyboard0" InputDevice "Mouse0" Option "SingleCard" EndSection Section "ServerLayout" Identifier "Layout1" Screen "Screen1" InputDevice "Keyboard1" InputDevice "Mouse1" Option "SingleCard" Option "DontZap" "on" EndSection Aqui omiti vrias informaes, porm o principal ainda se encontra a. Interessante tambm desabilitar a acelerao 3D, j que no vai ser necessrio mesmo, coloque Option "NoAccel" em cada device. A opo Dontzap no layout impede que o usurio feche o X com Ctrl+Alt+Backspace. Isso faz com que todos os usurios caiam. Ateno! o BusID usa endereos em decimal.. ento converta a =10, b=11, c=12... Outra coisa muito importante o driver evdev (event devices), ele o responsvel pela separao dos dispositivos em distros como Mandriva e evdev no vem compilado no Xorg. Infelizmente voc vai ter que compilar e o trabalho vai durar semanas. Outra soluo usar o /dev/input ao invs do endereo fsico, mas sua distro deve suportar os protocolos. Agora precisamos configurar o "Xorgmultiterminal" no boot. Pra isso crie um arquivo "xorg.conf.probe", que ser baseado no xorg.conf. Ele habilita as placas no boot. Ento crie o /etc/X11/xorg.conf.probe comeando j da placa secundria: Section "Device" Identifier Driver Screen BusID Option Option Option EndSection
www.afms.com.br/multihead.html

"Device1" "ati" 0 "PCI:0:9:0" "NoInt10" "no" "NoAccel" "RestoreBySetMode"

"no"

4/10

08/05/12

Multihead

..... Section "ServerLayout" Identifier "probe" Screen "Screen1" Screen "Screen2" LeftOf "Screen1" Screen "Screen3" LeftOf "Screen2" InputDevice "Keyboard1" InputDevice "Mouse1" EndSection A ordem das telas no importa. Note que s so inicializadas as placas secundrias. E a interrupo 10 est como "NO". Agora precisamos colocar na inicializao. Crie um script /etc/init.d/xorgmultiterminal com a seguinte linha de comando: [[ -f "/etc/X11/xorg.conf.probe" ]] && /usr/X11R6/bin/X -config /etc/X11/xorg.conf.probe -probeonly Agora descubra qual runlevel corresponde ao modo multi-usurio com X11 na sua distro dando um cat no /etc/inittab. Vamos supor que seja o Debian, que 3. Ento entre em /etc/rc3.d e crie um link simblico com: $ ln -s /etc/init.d/xorgmultiterminal S80xorgmultiterminal O nmero 80 corresponde a prioridade que esse script tem no boot. Quando voc parar o X, execute sempre ele novamente na mo pra no precisar reiniciar. Por exemplo: $ /etc/init.d/gdm stop $ /etc/init.d/xorgmultiterminal ....... $ /etc/init.d/gdm start

Configurando o gerenciador de displays (gdm)


Acredito que o gerenciador mais modular de todos o GDM, justamente por isso que todos os lugares que descrevem contedo sobre multiheads explicam mais do GDM. Na verdade no altera muito de um pra outro. Primeiro vamos testar o X. Abra no terminal: $ Xorg -layout Layout0 Depois feche o X e teste um por um dos layouts: $ Xorg -layout Layout1 $ Xorg -layout Layout2 $ Xorg -layout Layout3 Tendo todos os layouts funcionando, teste o teclado com o numlock, se todos os leds piscarem juntos, no est funcionando. Tem que ser independente. Configure o gdm em /etc/gdm/gdm.conf da seguinte maneira na seo servidores: 0=XServer0 1=XServer1 .... [server-XServer0] name=Standard_server0 command=/usr/X11R6/bin/X -layout Layout0 :0 vt7 -sharevts flexible=true [server-XServer1] name=Standard_server1 command=/usr/X11R6/bin/X -layout Layout1 :1 vt8 -sharevts flexible=true Em algumas distros como o Mandrake, necessrio um mdulo do kernel chamado Faketty, que cria terminais virtuais 50, 51, 52.... ao invs de 7, 8, 9. Estes vts "falsos" tem menos rigor no controle dos dispositivos. Mas isso desnecessrio pra distros menos userfriendlys, como Debian, Slackware, Gentoo e SuSE. Para usar o XDM ou KDM praticamente a mesma coisa, s chame a mesma linha de comando pra cada servidor. Em cada um deles voc provavelmente tenha um resultado diferente. Mas o que eu tenho percebido que GDM e XDM so os mais adequados.

DESAPEGA
E COMPRE O QUE PRECISA NA OLX

Yamaha Crypton
A PA RTIR DE

Honda XRE 300


A PA RTIR DE

Kawasaki Ninja 250


A PA RTIR DE

R$ 1.500

R$ 6.000

R$ 12.500

Testando e usando

Agora s usar. Procure no logar dois usurios iguais. Eles costumam interferir um no outro. Note tambm que com um "ps -aux" d pra ver vrios X sendo executados. Sempre procure logar 1 gerenciador de janela s, faa testes de desempenho e veja com ruim usar vrios gerenciadores grandes diferentes.

Essa configurao ainda tem problemas de estabilidade, mas nada preocupante. Voc como administrador do sistema pode colocar s uma categoria de software e fazer com que os usurios usem da forma que voc
www.afms.com.br/multihead.html 5/10

08/05/12

Multihead

quiser. Outro problema so as mensagens de erro. O kernel no se d conta do multihead e sempre imprime na tela principal. Isso causa uma rotao da tela. Pode-se ser resolvido com redirecionamento do erro 1> para /dev/null ou recompilar o kernel sem suporte a console.

Um problema que tive e ainda no resolvi o logout. Todos os usurios caem, mas isso no acontece em todas as placas. Isso depende muito do driver da placa de vdeo.. alguns so mal escritos. Agradeo ao site http://www.ltn.lv/~aivils/ Que de um carinha que desenvolveu um patch pro kernel pra fazer multiheads. Ele explica MUITA coisa! A melhor fonte da net com certeza. Outro link interessante de onde tirei bastante informao: http://www.c3sl.ufpr.br/multiterminal/

Multi-head usando udev e Xnest

Esta montagem contempla uma soluo usada em algumas ferramentas proprietrias de multi terminais. Utiliza-se apenas um servidor X estendido (no xinerama) e coloca vrias janelas do tamanho da tela para o uso do usurio. Cada janela um processo que recebe o event fornecido pelo udev. A camada de baixo (X) o usurio no pode ver, s o Xnest que est na sua tela, que no pode ser redimensionado. Para ter acesso ao servidor X nest modificado pelo patch desenvolvido na UFPR faa o download aqui: http://www.c3sl.ufpr.br/multiterminal/howtos/multiXnest-0.1.3 http://www.c3sl.ufpr.br/multiterminal/howtos/multiXnest.sh Voc precisar tambm do script feito por mim :) http://www.vivaolinux.com.br/scripts/download.php?arquivo=veevent.sh Tendo todos estes arquivos vamos comear a por a mo na massa.

Plugando e achando tudo


Primeiro precisamos nos certificar que as placas esto devidamente conectadas. Verifique isso executando o comando abaixo como root: # lspci | grep VGA 00:0a.0 VGA compatible controller: (FABRICANTE / MARCA) 00:0b.0 VGA compatible controller: (FABRICANTE / MARCA) Cada linha corresponde a uma placa do seu computador. O primeiro campo corresponde a identificao do barramento pci. Anote estes endereos para configurar o servidor X. Agora edite o arquivo /etc/X11/xorg.conf da seguinte maneira: OBS: Note que os dispositivos recebem endereo BusID em decimal e o lspci mostra em hexa-decimal, para isto, substituir a por 10, b por 11 e assim por diante... preciso tambm conhecer previamente qual driver adequado para cada placa. Section "Device" Identifier "Device 1" Driver "vesa" # vai depender do driver da sua placa de vdeo BusID "PCI:0:10:0" EndSection Section "Device" Identifier "Device 2" Driver "vesa" # vai depender do drvier da sua placa de vdeo BusID "PCI:0:11:0" EndSection Section "Monitor" Identifier EndSection Section "Monitor" Identifier EndSection "Monitor X"

"Monitor Y"

Section "Screen" Identifier "Screen X" Device "Device 1" Monitor "Monitor X" DefaultDepth 16 SubSection "Display" Depth 16
www.afms.com.br/multihead.html 6/10

08/05/12

Multihead

Modes "1024x768" EndSubSection EndSection

Section "Screen" Identifier "Screen Y" Device "Device 2" Monitor "Monitor Y" DefaultDepth 16 SubSection "Display" Depth 16 Modes "1024x768" EndSubSection EndSection Section "ServerLayout" Identifier "Layout" Screen "Screen X" Screen "Screen Y" Below "Screen X" InputDevice "Keyboard1" InputDevice "Mouse1" Option "DontZap" "on" # evita que o usurio derrube o X com ctrl alt backspace Option "DontVTSwitch" "on" # evita que o usurio troque os vts Option "BlankTime" "0" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" EndSection

Aqui a configurao est feita para dois terminais. Para fazer com mais s usar a mesma coisa, mas com vrios devices, vrios monitores, vrios screens. Se no conseguir editar o arquivo, use o xorgcfg. Agora execute o X e teste se abre todos os monitores. Se no, volte a configurao do X. Esta parte no deve ser complicada, pois o prprio configurador deve fazer. Depois renomeie e mova o arquivo com os comandos: # mv multiXnest-0.1.3 /usr/local/bin/multiXnest # mv multiXnest.sh /usr/sbin/ Para verificar se os dispositivos esto devidamente conectados, execute: # cat /proc/bus/input/devices Ento olhe em cada seo se est plugado o dispositivo. Agora vem a parte automtica e legal. Execute o script veevent.sh que est linkado na primeira pgina e descubra qual o event de cada dispositivo. Edite o arquivo /etc/X11/gdm/gdm.conf na seo "Servers": [servers] 0=Principal 1=Xnest1 2=Xnest2 [server-Principal] name=Principal command=/usr/X11R6/bin/X handled=false # faz com que este servidor no seja usado para login flexible=false [server-Xnest1] name=Xnest1 command=/usr/sbin/multiXnest.sh -display :0.0 -xauthority /var/lib/gdm/:0.Xauth -geometry 1024x768+0+0 -kbd /dev/input/event0 -ptr /dev/input/event1 -dpi 92 handled=true flexible=false [server-Xnest2] name=Xnest2 command=/usr/sbin/multiXnest.sh -display :0.1 -xauthority /var/lib/gdm/:0.Xauth -geometry 1024x768+0+0 -kbd /dev/input/event2 -ptr /dev/input/event5 -dpi 92 handled=true flexible=false Agora mude event0, event1, event2, event5 pelos valores que voc descobriu no veevent.sh. Para cada terminal mude o valor do display 0.X. Agora s configurar o GDM no boot e usar. O MultiXnest possui alguns probleminhas de visualizao, menus do qt e etc.. A acelerao 3D por exemplo desabilitada. Mesmo assim esta soluo eu considero bem melhor que a anterior (MultiHeads no Linux
www.afms.com.br/multihead.html 7/10

08/05/12

Multihead

Exemplos de uso

Muitos laboratrios j foram montados dessa forma. A reduo de custos gira em torno de 50% visto que os monitores ainda so uma parcela expressiva. No departamendo de informtica da UFPR os multiterminais rodam como servidores remotos sem HD. Ento as mquinas no so responsveis por imprimir uma tela somente, mas 4 telas de uma vez s. Por sua vez cada mquina dessa no processa nada localmente.

Direitos autorais Alexandre Felipe Muller De Souza 2006-2010,

www.afms.com.br/multihead.html

8/10

08/05/12

Multihead

www.afms.com.br/multihead.html

9/10

08/05/12

Multihead

www.afms.com.br/multihead.html

10/10

You might also like