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