Obra: Multiterminais/Multiterminal com Xnest
Nível: médio
vamos descrever aqui como fazer um multiterminal com xnest há muitas maneiras de se fazer multiterminais pra vê las veja seção veja também partir de uma modificação realizada no programa xnest foi possível implementar uma nova solução para multiterminal como sistema utiliza apenas um servidor que controla todas as placas de vídeo solução funciona com diversas combinações de placas de vídeo como fazer sistema operacional debian sarge introdução xnest basicamente um servidor que roda dentro de outro servidor xnest um programa que cliente servidor ao mesmo tempo ele cliente do servidor verdadeiro mas também servidor para outros aplicativos que enxergam xnest como se fosse um servidor normal xnest normalmente utilizado para se trabalhar em dois ou mais desktops simultaneamente no entanto fizemos alterações em seu código para permitir que ele seja utilizado para implementar um sistema multiterminal sistema opera da seguinte maneira roda se apenas um servidor configurado para utilizar várias telas screens sendo que cada tela estará associada uma placa de vídeo após inicialização do abre se em tela cheia um xnest para cada tela qual será utilizado pelo usuário de maneira transparente xnest original obtêm os eventos de mouse teclado partir do seu servidor pai no entanto para permitir utilização do xnest no multiterminal tivemos que alterar seu código fonte para que ele lêsse os eventos diretamente dos dispositivos sem intermediação do servidor para ler os eventos do mouse do teclado utiliza se protocolo evdev grande vantagem do multixnest nossa proposta de multiterminal com xnest modificado que gerenciamento das diversas placas de vídeo feito por um único que elimina os problemas de compatibilidade conflitos presentes nas outras maneiras de implementar multiterminal isso significa que multiterminal funciona com qualquer combinação de placas de vídeo que consiga gerenciar evdev udev certifique se de que seu kernel núcleo do sistema esteja compilado com suporte ao módulo evdev necessária também instalação do udev que provê um diretório dev dinâmico atualizado de acordo com os dispositivos conectados apt get install udev udev exige um kernel dispositivos de entrada antes de prosseguir preciso verificar se os dispositivos de entrada mouses teclados foram detectados para isso analise 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 nome de cada dispositivo indicado nas linhas que começam com name nome do arquivo relacionado ao dispositivo mostrado nas linhas que começam com handlers bus vendor product version ab name at translated set keyboard phys isa serio input handlers kbd event ev key ffffdf ffefffff ffffffff fffffffe msc led bus vendor product version name imps generic wheel mouse phys isa serio input handlers mouse event ev key rel bus vendor product version name chesen usb keyboard phys usb input handlers kbd event
nt ev key rel bus vendor product version name chesen usb keyboard phys usb input handlers kbd event ev key ff ff febeffdf ffefffff ffffffff fffffffe led bus vendor product version name chesen usb keyboard phys usb input handlers kbd event ev key bus vendor fc product version name usb opticalwheel mouse phys usb input handlers mouse event ev key rel note que arquivo parece indicar presença de três teclados embora no sistema aferido existam apenas dois 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 um teclado secundário cujo endereço físico termina em input configuraremos apenas os teclados primários com endereço físico terminado em input portanto seção correspondente ao teclado secundário de endereço físico usb input será ignorada podemos perceber pelo arquivo de exemplo presença de teclados relacionados aos arquivos dev input event dev input event respectivamente mouses associados aos arquivos dev input event dev input event 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 instalação do servidor xorg aqui descreveremos os passos para configurar multiterminal utilizando servidor xorg mas possível utilizar xfree com poucas alterações para instalar xorg no debian sarge proceda da seguinte maneira faça uma cópia de segurança backup remova arquivo etc init xfree common adicione as seguintes linhas ao arquivo etc apt sources list deb http people debian org nobse xorg sarge main deb src http people debian org nobse xorg sarge main instale pacote xserver xorg apt get update apt get install xserver xorg apt get upgrade download do xnest modificado faça download do binário do servidor xnest modificado aqui você pode caso desejar encontrar patch para código fonte do xnest xorg aqui você deve copiar arquivo multixnest para diretório usr local bin faça download do script wrapper multixnest sh responsável por carregar servidor multixnest script deve ser copiado para diretório usr sbin configuração do servidor xorg para um multiterminal de terminais arquivo etc xorg conf deve ser configurado da seguinte forma defina um layout contendo screen section serverlayout identifier layout screen default screen screen default screen below default screen screen default screen below default screen screen default screen below default screen inputdevice generic keyboard inputdevice configured mouse endsection obs disposição das telas apresentadas no layout acima não relevante defina as seções das placas de vídeo section device identifier placa de vídeo genérica driver sis busid pci screen endsection substitua driver da placa de vídeo de acordo com seu hardware opção busid identifica qual endereço da placa de vídeo que está sendo utilizada para obter busid de suas placas digite lspci grep vga tome cuidado com os valores
tá sendo utilizada para obter busid de suas placas digite lspci grep vga tome cuidado com os valores pois endereço fornecido por lspci eh em hexadecimal enquando que espera um valor em decimal para conversão use echo section device identifier placa de vídeo genérica driver sis busid pci screen endsection defina as seções dos monitores section monitor identifier monitor horizsync vertrefresh option dpms endsection section monitor identifier monitor horizsync vertrefresh option dpms endsection defina as seções das screen section screen identifier screen device placa de vídeo genérica monitor monitor defaultdepth subsection display depth modes endsubsection endsection section screen identifier screen device placa de vídeo genérica monitor monitor defaultdepth subsection display depth modes endsubsection endsection as definições de teclado mouse podem continuar idênticas as já existentes em seu xorg conf para evitar problemas na inicialização do servidor devido ao não reconhecimento do mouse você pode incluir sem problemas seguinte seção section serverflags option yes endsection obs isso não afetará multiterminal pois os dispositivos mouses teclados serão passados como parametros posteriormente para xnest finalmente para evitar que servidor entre no modo de economia de energia para desabilitar troca de vt as teclas ctrl alt backspace verifique que seção serverflags possui as seguintes opções section serverflags estas opções evitam que entre em modo de economia de energia option blanktime option standbytime option suspendtime option offtime desativar vt switching option dontvtswitch yes desativa uso das teclas ctrl alt backspace option dontzap yes endsection configuração xkb agora necessário criar um arquivo de configuração xkb para cada multixnest para configurar os teclados arquivo de configuração do primeiro multixnest deve ser colocado no arquivo usr lib xkb config keyboard do segundo em usr lib xkb config keyboard assim em diante um exemplo de um arquivo de configuração para um teclado abnt pode ser visto seguir rules xorg model abnt layout br configuração do gdm último passo configurar gerenciador de login para iniciar servidor principal também para rodar os scripts wrappers que serão responsáveis por abrir xnest em cada tela trataremos apenas do gdm outros gerenciadores como xdm kdm podem ser configurados por um processo similar edite arquivo etc gdm gdm conf na seção servers inserindo seguinte servers hardware hardware será servidor principal naquele onde serão executados os demais servidores xnest multixnest multixnest multixnest multixnestn multixnest cada um dos servidores multixnest server hardware name hardware command usr bin handled false flexible false opção handled false impede que seja carregado gerenciador de login no servidor principal server multixnest name multixnest command usr sbin multixnest sh display xauthority var lib gdm xauth geometry kbd dev input event ptr dev input event dpi handled true flexible false opção kbd ptr id
th geometry kbd dev input event ptr dev input event dpi handled true flexible false opção kbd ptr identificam respectivamente qual teclado mouse serão associados ao servidor xnest conforme analisado no arquivo proc bus input devices multixnest sh script que carrega servidor xnest server multixnestn name multixnestn command usr sbin multixnest sh display xauthority var lib gdm xauth geometry kbd dev input eventxx ptr dev input eventyy dpi handled true flexible false veja também