Parte final

Configurando o gerenciador de displays (gdm)

Na época que este artigo foi escrito o gerenciador mais modular era o GDM, o KDM não se mostrou muito amigável pra este tipo de configuração. Possívelmente possa até fazer as mesmas coisas porém isso não é trivial. Justamente por isso que todos os lugares que descrevem conteúdo sobre multiheads explicam mais do GDM. Se você entender o conceito do GDM configurar no KDM será mais fácil.

Configure o gdm em /etc/gdm/gdm.conf da seguinte maneira na seção “servers”:

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

Para usar os outros DM é praticamente a mesma coisa, só chame a mesma linha de comando pra cada servidor. Isso vai depender de como eles funcionam e vai exigir um pouco de leitura no assunto.

Testando e usando

Depois de configurado, quando você parar o X, sempre execute o “probe” novamente na mão pra não dar problema.
Por exemplo:

$ /etc/init.d/gdm stop
$ /etc/init.d/xorgmultiterminal

…….
$ /etc/init.d/gdm start

Procure não logar dois usuários iguais (mesmo nome, home e id) eles costumam interferir um no outro. Note também que com um “ps -aux” dá pra ver vários X sendo executados. Agora é só usar, faça testes de desempenho e veja o que é ruim para evitar que seus usuários façam o mesmo.

Outro problema são algumas mensagens de erro. Acontece quando o kernel não se dá conta do multihead e sempre imprime na tela principal (primeiro monitor). Isso causa uma rotação da tela no primeiro monitor sem que o usuário saiba porque. Pode-se ser resolvido com redirecionamento do erro para /dev/null ou recompilar o kernel sem suporte a console.

Multi-head usando Xnest

O Xnest como a própria “manpage” dele diz é um servidor X “aninhado”. Quando você abre um Xnest você coloca um servidor X dentro de uma janela. É como um servidor X dentro de outro. Depois de alguns problemas insanáveis com vários Xorg rodando com placas Ati eu tive a idéia de usar o Xnest. Então eu passei essa idéia ao Fabiano do C3SL quando ele me deu aula de “Algoritmos e Estrutura de Dados 3” em 2005 e um tempinho depois eles tinham desenvolvido um patch pro Xnest.
Utiliza-se apenas um servidor X estendido (como se fosse um xinerama) e coloca várias janelas (Xnest) do tamanho da tela para o uso do usuário. Cada janela é um processo que recebe o event fornecido pelo udev. A camada de baixo (X) o usuário não se pode ver, só o Xnest que está na sua tela, que não pode ser redimensionado. Para ter acesso ao servidor X nest modificado pelo patch desenvolvido na UFPR faça o download aqui:

Você precisará também do script feito por mim:

Tendo estes arquivos já podemos trabalhar:

Primeiro precisamos nos certificar que as placas estão 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 (exemplo 00:0a.0) corresponde a identificação do barramento pci. Anote estes endereços para configurar o servidor X. Agora edite o arquivo /etc/X11/xorg.conf da seguinte maneira:

OBS: Note que os dispositivos recebem endereço BusID em decimal e o lspci mostra em hexa-decimal, para isto, substituir a por 10, b por 11 e assim por diante… preciso também conhecer previamente qual driver adequado para cada placa.

Section “Device”
Identifier “Device 1”
Driver “vesa” # vai depender do driver da sua placa de vídeo
BusID “PCI:0:10:0”
EndSection

Section “Device”
Identifier “Device 2”
Driver “vesa” # vai depender do drvier da sua placa de vídeo
BusID “PCI:0:11:0”
EndSection

Section “Monitor”
Identifier “Monitor X”
EndSection

Section “Monitor”
Identifier “Monitor Y”
EndSection

Section “Screen”
Identifier “Screen X”
Device “Device 1”
Monitor “Monitor X”
DefaultDepth 16
SubSection “Display”
Depth 16
Modes “1024×768”
EndSubSection
EndSection

Section “Screen”
Identifier “Screen Y”
Device “Device 2”
Monitor “Monitor Y”
DefaultDepth 16
SubSection “Display”
Depth 16
Modes “1024×768”
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 usuário derrube o X com ctrl alt backspace
Option “DontVTSwitch” “on” # evita que o usuário troque os vts
Option “BlankTime” “0”
Option “StandbyTime” “0”
Option “SuspendTime” “0”
Option “OffTime” “0”
EndSection

Aqui a configuração está feita para dois terminais. Para fazer com mais é só usar a mesma coisa, mas com vários devices, vários monitores, vários screens. Se não conseguir editar o arquivo, use o xorgcfg.

Agora execute o X e teste se abre todos os monitores. Se não, volte a configuração do X. Esta parte não deve ser complicada, pois o próprio configurador do x faz isso geralmente.

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 estão devidamente conectados, execute:

# cat /proc/bus/input/devices

Então olhe em cada seção se está plugado o dispositivo. (vide a solução com vários servidores X caso não tenha entendido). Depois disso você não precisa anotar os valores. O script é capaz de te informar que dispositivo está sendo usado.

Execute o script veevent.sh que está linkado na primeira página e anote qual o event de cada dispositivo.

Edite o arquivo /etc/X11/gdm/gdm.conf na seção “Servers”:

[servers]
0=Principal
1=Xnest1
2=Xnest2

[server-Principal]
name=Principal
command=/usr/X11R6/bin/X
handled=false # faz com que este servidor não 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 1024×768+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 1024×768+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 visualização, menus do qt e etc.. A aceleração 3D por exemplo é desabilitada. Mesmo assim esta solução pode ser bem mais estável que a anterior porém com desempenho pior (perda de frames e etc). Existe outra solução também com o Xephyr, que é basicamente igual o Xnest, mas é mais atualizado.

Exportando o Som

Quando não configurado todos os sons saem no mesmo lugar. A separação do som não é uma configuração difícil. Tendo placas de som usb isso se torna possível e até simples de configurar. Basta que o usuário mude a configuração no seu ambiente gráfico para o dispositivo que está no seu terminal.

Exemplos de uso

Muitos laboratórios já foram montados dessa forma. A redução de custos gira em torno de 50% visto que os monitores ainda são uma parcela expressiva.
No departamendo de informática da UFPR os multiterminais rodam como servidores remotos sem HD. Então as máquinas não são responsáveis por imprimir uma tela somente, mas 4 telas de uma vez só. Por sua vez cada máquina dessa não processa nada localmente.

Diagrama de exemplo:
ufpr

Outro exemplo notável é o professor Ronald Costa do DF, ele tem documentado muita coisa no seu site pessoal. Ele mostra diversos exemplo e fotos, de laboratórios já montados.
multiubuntu

Ótimo exemplo de como pode ser feito o layout, foi usado cabos mais compridos.

multi

Também do site do Ronald Costa, usuários do laboratório

Alexandre Felipe Müller de Souza, escreve o seu site pessoal http://www.inf.ufpr.br/afms03 que possui informações de Linux e interesses. Além de um blog com dicas e discussões técnicas.

Comente este tutorial em: https://www.hardware.com.br/comunidade/tutorial-multhead/779004/

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X