FuncionamentoDoAssistenteDeConfiguracaoDoMultiterminal - UFSC/moodle-provas-livecd-provas GitHub Wiki

Funcionamento do Assistente de Configuração do Multiterminal

Esta página contém informações sobre o funcionamento do assistente de configuração do multiterminal do LiveCD, presente no pacote moodle-multiseat e que é ativado quando o usuário seleciona a opção de Multiterminal no menu de inicialização. Ela contêm também algumas informações históricas sobre o hardware e software utilizado onde o sistema foi testado durante o desenvolvimento.

O Assistente de Configuração do Multiterminal

Algoritmo simplificado do assistente de configuração

  1. Identifica o BusId de cada placa de vídeo e grava os arquivos de configuração do Xorg de cada terminal em /etc/X11/xorg-config#.conf e /etc/X11/xorg-seat#.conf (onde # é o número do terminal) a partir dos modelos em /opt/provas/multiseat/templates/
  2. Identifica quais dispositivos em /dev/input/event* são mouses e quais são teclados.
  3. Inicia um processo do Xorg no primeiro monitor do computador.
  4. Inicia a interface gráfica do assistente de configuração no Xorg iniciado anteriormente.
  5. Iniciar uma thread para cada teclado monitorando o evento KEY_F1, exibe a tela da tecla F1 para o usuário e aguarda ele pressionar F1.
  6. Inicia uma thread para cada mouse, monitorando o evento BTN_MOUSE, exibe a tela do Mouse para o usuário e aguarda ele pressionar o botão esquerdo do mouse.
  7. Criar uma regra no udev para o teclado e o mouse selecionados pelo usuário e as carregada no udev.
  8. Finaliza o programa de configuração que está rodando no Xorg do terminal que já foi configura e deixa o Xorg do usuário iniciar.
  9. Repete o processo para o segundo terminal (a partir do terceiro passo).

Dependências de software

Python 2.7

Procedimento de instalação:

apt-get install python2.7

Versão utilizada: 2.7.3-0ubuntu3.1

Módulo python-evdev - http://packages.python.org/evdev/

Procedimento de instalação:

apt-get install python-pip python2.7-dev pip install evdev

Versão utilizada: 0.3.1

Módulo python-gi - Equivalente ao python-glade2, mas dá suporte para Gtk3

Procedimento de instalação: apt-get install python-gi

Versão utilizada: 3.2.2-1~precise

Módulo python-zmq

Procedimento de instalação:

apt-get install python-zmq

Versão utilizada: 2.1.11-1

Módulo python-yaml

Procedimento de instalação:

apt-get install python-yaml

Versão utilizada: 3.10-2

Editor de interface gráfica com GTK/Glade

OBS: Este pacote é necessário apenas para editar as janelas do assistente de configuração do multiseat, arquivo /etc/multiseat/interface/interface.glade.

Procedimento de instalação: Apt-get install glade

Versão utilizada: 3.12.1-0ubuntu1

Imagens originais utilizadas no programa

As imagens acima foram editadas com o software Inkscape (versão 0.48.3.1-1ubuntu1.1), disponível no repositório oficial do Ubuntu.

Configuração do Xorg em um Multiterminal com 2 placas de vídeo independentes

Especificação do Hardware usado nos testes

  • Processador: Intel Core2Duo E8500 @3.16GHz
  • Placa mãe: ECS GF7100/7050PVT-M3 MCP73 - BIOS Release 26/03/2008
  • Placa de vídeo onboard: NVIDIA Corporation C73 [GeForce 7100 / nForce 630i] (rev a2)
  • Placa de vídeo offboard: NVIDIA Corporation G72 [GeForce 7300 SE/7200 GS] (rev a1)
  • Memória RAM: 4GB
  • Disco rígido: SAMSUNG HD322HJ 1AC0 320GB
  • Monitor 1: LG Flatron L1755S
  • Monitor 2: LG Flatron W1952TQ
  • IMPORTANTE: O parâmetro da BIOS PCI/PnP Setup -> Init Display First foi configurado com o valor Onboard VGA, quando ele estava configurado com PCI-E, a placa de vídeo offboard desligava o monitor após 10 minutos, mesmo com o gerenciamento de energia do monitor desativado no Xorg (DPMS).

Versão dos programas utilizados

  • Sistema operacional: Ubuntu 12.04.1 LTS 32-bit
  • Kernel: 3.2.0-32-generic-pae i686 ($ uname -a)
  • xserver-xorg: X.Org X Server 1.11.3 (7.6+12ubuntu1) ($ X -version)
  • LXDE: 0.5.0-4ubuntu3 ($ dpkg-query -W lxde)
  • Python: 2.7.3

Algumas observações importantes

  • Tanto o driver nouveau quanto o driver nvidia funcionaram bem na configuração final, só ocorreram problemas quando utilizava-se o gerenciador de login lightdm (padrão do ubuntu), nesse caso usando o driver nouveau, um dos terminais não carregava o vídeo. OBS: O driver nvidia tem melhor perfomance 3D.

  • O driver dos dispositivos de entrada (input) no Xorg deve ser o evdev, ele é uma interface direta com os dispositivos em /dev/input/event# (Onde # é o número associado ao dispositivo, esse número não é fixo, ele pode mudar a cada boot, principalmente se for conectado algum novo dispositivo de entrada na máquina). O driver mouse faz interface apenas com os /dev/input/mouse# e no nosso caso ele não é útil.

  • Nas versões atuais do Xorg não é necessário especificar o driver de vídeo, pois ele identifica o modelo da placa de vídeo e sabe qual driver carregar, caso exista mais de um driver para aquela placa de vídeo, ele tenta carregar cada um deles e para quando carrega um com sucesso, respeitando a ordem de prioridade do driver (TODO: descobrir se essa lista de prioridade é do Xorg mesmo). No caso das placas de vídeo da nvidia, existem 4 drivers possíveis, sendo que o vesa é um driver genérico, são eles em ordem de prioridade: nvidia, nouveau, nv, vesa.

  • Os monitores LCD testados também funcionaram corretamente sem precisar especificar a resolução, todos carregaram com a resolução nativa (resolução correta do monitor).

Configuração inicial - Pontos chave

  • Os terminais (seats) são numerados a partir do número 1 (um).

  • Os scripts de inicialização do Xorg devem ser separados para que cada X possa ser iniciado por um usuário diferente, tendo em vista que não é carregado um gerenciador de login, nesse caso é necessário alterar a permissão de inicialização do X, para que usuários comuns consigam iniciá-lo. O procedimento é editar o arquivo: /etc/X11/Xwrapper.config e deixar a seguinte linha assim: allowed_users=anybody . OBS: O comando # dpkg-reconfigure x11-common também permite alterar esse arquivo via uma interface em modo texto no terminal.

  • Para um multiterminal com dois seats, devem existir quatro arquivos de configuração do Xorg, dois são para execução do assistente de configuração (xorg-config1.conf e xorg-config2.conf) e dois são a configuração final do Xorg que servem para configurar o Xorg que o usuário utilizará (xorg-seat1.conf e xorg-seat2.conf).

  • Os arquivos xorg-config#.conf são arquivos que especificam apenas o BusID da placa de vídeo onde o X deve carregar, nenhum dispositivo de entrada está associado, pois nesse momento o servidor X deve aceitar eventos de qualquer teclado ou mouse, é o momento da associação destes dispositivos.

  • Os arquivos xorg-seat#.conf são arquivos que além de especificar o BusID da placa de vídeo onde o X deve carregar, também contêm a definição do mouse e do teclado associados àquele seat. O caminho dos dispositivos de entrada será padrão, o do mouse será /dev/multiseat/mouse# e do teclado será /dev/multiseat/keyboard# (onde # é o número do seat).

  • Os dispositivos /dev/multiseat/mouse# e /dev/multiseat/keyboard# são criados através de regras do udev colocadas dentro do diretório /etc/udev/rules.d/, essas regras são criadas pelo programa de configuração.

⚠️ **GitHub.com Fallback** ⚠️