{"id":631,"date":"2013-10-10T17:13:42","date_gmt":"2013-10-10T20:13:42","guid":{"rendered":"http:\/\/www.viazap.com.br\/?p=631"},"modified":"2013-10-10T17:15:58","modified_gmt":"2013-10-10T20:15:58","slug":"multiterminais-em-um-pc","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=631","title":{"rendered":"Multiterminais em um PC"},"content":{"rendered":"<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\">\n<tbody>\n<tr>\n<td colspan=\"2\"><b>Introdu\u00e7\u00e3o<\/b><\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td align=\"justify\">O\u00a0<i>Xephyr<\/i>\u00a0\u00e9 um tipo de servidor X que utiliza outro servidor X (<i>Xorg<\/i>) para a exibi\u00e7\u00e3o das imagens. O Xephyr funciona como cliente do Xorg, mas \u00e9 tamb\u00e9m servidor para outros aplicativos, que enxergam o Xephyr como se fosse um servidor X normal. O Xephyr pode ser utilizado para se trabalhar em dois ou mais desktops simultaneamente, no entanto, fizemos altera\u00e7\u00f5es em seu c\u00f3digo para permitir que ele seja utilizado para implementar um sistema multiterminal.O sistema opera da seguinte maneira. Roda-se apenas um servidor X, configurado para utilizar v\u00e1rias telas (screens), sendo que cada tela estar\u00e1 associada a uma placa de v\u00eddeo. Ap\u00f3s a inicializa\u00e7\u00e3o do X, abre-se, em tela cheia, um Xephyr para cada tela, o qual ser\u00e1 utilizado pelo usu\u00e1rio, de maneira transparente.<\/p>\n<p>O Xephyr original obt\u00eam os eventos de mouse e teclado a partir do servidor X pai. No entanto, para permitir a utiliza\u00e7\u00e3o do Xephyr no multiterminal, tivemos que alterar seu c\u00f3digo fonte para que ele lesse os eventos diretamente dos dispositivos, sem intermedia\u00e7\u00e3o do servidor X. Para ler os eventos do mouse e do teclado utiliza-se o protocolo evdev.<\/p>\n<p>A vantagem de se utilizar o Xephyr \u00e9 que o gerenciamento das diversas placas de v\u00eddeo \u00e9 feito por um \u00fanico X, o que elimina os problemas de compatibilidade e conflitos presentes nas outras maneiras de implementar o multiterminal. Isso significa que o multiterminal funciona com qualquer combina\u00e7\u00e3o de placas de v\u00eddeo que o X consiga gerenciar.<\/p>\n<p>A vantagem de se utilizar o Xephyr ao inv\u00e9s do Xnest \u00e9 que o Xephyr est\u00e1 sendo mantido atualmente, \u00e9 mais r\u00e1pido, e permite a implementa\u00e7\u00e3o de extens\u00f5es do X mais facilmente.<!--more--><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Instala\u00e7\u00e3o de requisitos<\/b><\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td align=\"justify\">\n<h1>XOrg<\/h1>\n<p>Neste HOWTO descreveremos os passos para configurar o multiterminal utilizando o servidor\u00a0<i>XOrg<\/i>, mas \u00e9 poss\u00edvel utilizar o\u00a0<i>XFree86<\/i>, com poucas altera\u00e7\u00f5es. Para utilizar o XOrg voc\u00ea precisa utilizar a vers\u00e3o Etch ou superior do\u00a0<i>Debian<\/i>, pois a vers\u00e3o Sarge n\u00e3o possui o servidor XOrg. Se voc\u00ea est\u00e1 utilizando o Debian Sarge, proceda da seguinte maneira para atualiz\u00e1-lo para Etch:<\/p>\n<p>1. Altere as ocorr\u00eancias de &#8220;sarge&#8221; ou &#8220;stable&#8221; dos mirrors do Debian no arquivo\u00a0<i>\/etc\/apt\/sources.list<\/i>\u00a0para &#8220;etch&#8221;, por exemplo:<\/p>\n<p>deb http:\/\/ftp.debian.org\/debian sarge main contrib non-free<\/p>\n<p>Deve ficar:<\/td>\n<\/tr>\n<tr>\n<td>deb http:\/\/ftp.debian.org\/debian\u00a0<b>etch<\/b>\u00a0main contrib non-free<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">2. Atualize o sistema e instale o pacote\u00a0<i>xserver-xorg<\/i>:<b># apt-get update<br \/>\n# apt-get upgrade<br \/>\n# apt-get install xserver-xorg<\/b><\/p>\n<h1>Evdev e Udev<\/h1>\n<p>Certifique-se de que seu\u00a0<i>kernel<\/i>\u00a0(n\u00facleo do sistema) esteja compilado com suporte ao m\u00f3dulo\u00a0<i>evdev<\/i>.<\/p>\n<p>\u00c9 necess\u00e1ria tamb\u00e9m a instala\u00e7\u00e3o do\u00a0<i>udev<\/i>, que prov\u00ea um diret\u00f3rio \/dev din\u00e2mico e atualizado de acordo com os dispositivos conectados:<\/p>\n<p><b># apt-get install udev<\/b><\/p>\n<p>O udev exige um kernel 2.6.<\/p>\n<h1>Xephyr (Modificado)<\/h1>\n<p>1. Fa\u00e7a o download do servidor\u00a0<i>Xephyr<\/i>\u00a0modificado em:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/xephyr-precompiled.tar.bz2\">http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/xephyr-precompiled.tar.bz2<\/a><\/li>\n<\/ul>\n<p>Extraia o arquivo no diret\u00f3rio \/usr\/local. Caso queira obter os patches, acesse:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/xephyr-patches.tgz\">http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/xephyr-patches.tgz<\/a><\/li>\n<\/ul>\n<p>2. Fa\u00e7a o download do script &#8220;wrapper&#8221; Xephyr.sh:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/Xephyr.sh\">http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/Xephyr.sh<\/a><\/li>\n<\/ul>\n<p>respons\u00e1vel por carregar o servidor Xephyr. O script deve ser copiado para o diret\u00f3rio \/usr\/sbin.<\/p>\n<p>Ap\u00f3s a instala\u00e7\u00e3o do Xephyr, adicione a seguinte linha no arquivo\u00a0<i>\/etc\/ld.so.conf<\/i>:<\/td>\n<\/tr>\n<tr>\n<td>\/usr\/local\/lib<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">Em seguinte, rode o comando ldconfig:<b># ldconfig<\/b><\/p>\n<p>Para atualizar as bibliotecas.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Configura\u00e7\u00f5es<\/b><\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td align=\"justify\">\n<h1>Dispositivos de entrada<\/h1>\n<p>Antes de prosseguir, \u00e9 preciso verificar se os dispositivos de entrada (mouses e teclados) foram detectados. Para isso analise o arquivo\u00a0<i>\/proc\/bus\/input\/devices<\/i>, que informa detalhes sobre os dispositivos de entrada encontrados pelo\u00a0<i>kernel<\/i>.<\/p>\n<p>Um exemplo deste arquivo \u00e9 apresentado abaixo. Apenas dois campos nos interessam: o nome de cada dispositivo, indicado nas linhas que come\u00e7am com &#8220;N: Name=&#8221; e o nome do arquivo relacionado ao dispositivo, mostrado nas linhas que come\u00e7am com &#8220;H: Handlers&#8221;.<\/p>\n<p>I: Bus=0011 Vendor=0001 Product=0001 Version=ab41<br \/>\nN: Name=&#8221;AT Translated Set 2 keyboard&#8221;<br \/>\nP: Phys=isa0060\/serio0\/input0<br \/>\nH: Handlers=kbd event0<br \/>\nB: EV=120013<br \/>\nB: KEY=4 2000000 3802078 f840d001 f2ffffdf ffefffff ffffffff fffffffe<br \/>\nB: MSC=10<br \/>\nB: LED=7<\/p>\n<p>I: Bus=0011 Vendor=0002 Product=0005 Version=0000<br \/>\nN: Name=&#8221;ImPS\/2 Generic Wheel Mouse&#8221;<br \/>\nP: Phys=isa0060\/serio1\/input0<br \/>\nH: Handlers=mouse0 event1<br \/>\nB: EV=7<br \/>\nB: KEY=70000 0 0 0 0 0 0 0 0<br \/>\nB: REL=103<\/p>\n<p>I: Bus=0003 Vendor=0a81 Product=0101 Version=0110<br \/>\nN: Name=&#8221;CHESEN USB Keyboard&#8221;<br \/>\nP: Phys=usb-0000:00:10.2-1\/input0<br \/>\nH: Handlers=kbd event2<br \/>\nB: EV=120003<br \/>\nB: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe<br \/>\nB: LED=7<\/p>\n<p>I: Bus=0003 Vendor=0a81 Product=0101 Version=0110<br \/>\nN: Name=&#8221;CHESEN USB Keyboard&#8221;<br \/>\nP: Phys=usb-0000:00:10.2-1\/input1<br \/>\nH: Handlers=kbd event3<br \/>\nB: EV=3<br \/>\nB: KEY=1f 0 20000 3878 d801d101 1e0000 0 0 0<\/p>\n<p>I: Bus=0003 Vendor=04fc Product=0013 Version=06b0<br \/>\nN: Name=&#8221;USB OpticalWheel Mouse&#8221;<br \/>\nP: Phys=usb-0000:00:10.2-2\/input0<br \/>\nH: Handlers=mouse1 event4<br \/>\nB: EV=7<br \/>\nB: KEY=70000 0 0 0 0 0 0 0 0<br \/>\nB: REL=103<\/p>\n<p>Os dados necess\u00e1rios est\u00e3o destacados. Note que o arquivo parece indicar a presen\u00e7a de tr\u00eas teclados, embora no sistema aferido existam apenas dois. A raz\u00e3o do dispositivo adicional \u00e9 que muitos teclados USB cont\u00e9m teclas especiais (por exemplo, de controle multim\u00eddia ou acesso \u00e0 Internet), detectadas pelo kernel como pertencentes a um teclado secund\u00e1rio, cujo endere\u00e7o f\u00edsico termina em &#8220;input1&#8221;. Configuraremos apenas os teclados prim\u00e1rios, com endere\u00e7o f\u00edsico terminado em &#8220;input0&#8221;. Portanto, a se\u00e7\u00e3o correspondente ao teclado secund\u00e1rio de endere\u00e7o f\u00edsico &#8220;usb-0000:00:10.2-1\/input1&#8221; ser\u00e1 ignorada.<\/p>\n<p>Podemos perceber, pelo arquivo de exemplo, a presen\u00e7a 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\u00e3o importantes, pois s\u00e3o utilizados, como descreveremos posteriormente, para relacionar cada cabe\u00e7a do multiterminal aos dispositivos de entrada corretos.<\/p>\n<h1>Servidor XOrg<\/h1>\n<p>xorg.conf<\/p>\n<p>Para um multiterminal de N terminais, o arquivo\u00a0<i>\/etc\/X11\/xorg.conf<\/i>\u00a0deve ser configurado da seguinte forma:<\/p>\n<p>1. Defina um layout contendo N screen&#8217;s.<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"ServerLayout\"\r\n  Identifier  \"Layout\"\r\n  Screen      \"Default Screen 1\"\r\n  Screen      \"Default Screen 2\"   Below   \"Default Screen 1\"\r\n  Screen      \"Default Screen 3\"   Below   \"Default Screen 2\"\r\n  .\r\n  .\r\n  Screen      \"Default Screen N\"   Below   \"Default Screen N-1\"\r\n  InputDevice \"Generic Keyboard\"\r\n  InputDevice \"Configured Mouse 1\"\r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">OBS: A disposi\u00e7\u00e3o das telas apresentadas no layout acima n\u00e3o \u00e9 relevante.2. Defina as se\u00e7\u00f5es das N placas de v\u00eddeo.<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"Device\"\r\n  Identifier   \"Placa de V\u00eddeo Gen\u00e9rica 1\"\r\n  Driver      \"sis\"   \r\n  BusID      \"PCI:0:5:0\"   \r\n  Screen      0   \r\nEndSection   \r\n<span style=\"color: #004080;\">#\r\n# Substitua o driver da placa de v\u00eddeo de acordo com \r\n# o seu hardware.\r\n#\r\n# A op\u00e7\u00e3o BusId identifica qual o endere\u00e7o da placa de \r\n# v\u00eddeo que est\u00e1 sendo utilizada.\r\n# Para obter o BusId de suas placas digite \"lspci | grep VGA\"\r\n# Tome cuidado com os valores, pois o endere\u00e7o fornecido \r\n# por lspci \u00e9 em Hexadecimal enquanto que o X\r\n# espera um valor em decimal. Para convers\u00e3o use \r\n# \"echo $((0xVALOR_HEXADECIMAL))\"<\/span>\r\n.\r\n.\r\n.\r\nSection \"Device\"\r\n  Identifier   \"Placa de V\u00eddeo Gen\u00e9rica N\"\r\n  Driver      \"sis\"\r\n  BusID      \"PCI:0:6:0\"\r\n  Screen      0   \r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">3. Defina as se\u00e7\u00f5es dos N monitores.<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"Monitor\"\r\n  Identifier   \"Monitor 1\"\r\n  HorizSync    30-71\r\n  VertRefresh  50-160\r\n  Option       \"DPMS\"\r\nEndSection         \r\n.\r\n.\r\n.      \r\nSection \"Monitor\"\r\n  Identifier   \"Monitor N\"\r\n  HorizSync    30-71\r\n  VertRefresh  50-160\r\n  Option       \"DPMS\"\r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">4. Defina as se\u00e7\u00f5es das N screen&#8217;s. Recomenda-se utilizar 24 bits pois em alguns testes os navegadores n\u00e3o conseguiam executar anima\u00e7\u00f5es em flash se essa configura\u00e7\u00e3o fosse inferior.<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"Screen\"\r\n  Identifier   \"Screen 1\"\r\n  Device       \"Placa de V\u00eddeo Gen\u00e9rica 1\"\r\n  Monitor      \"Monitor 1\"\r\n  DefaultDepth 24   \r\n  SubSection   \"Display\"\r\n     Depth     24\r\n     Modes     \"1024x768\" \"800x600\" \"640x480\"\r\n  EndSubSection\r\nEndSection\r\n.\r\n.\r\n.\r\nSection \"Screen\"\r\n  Identifier   \"Screen N\"\r\n  Device       \"Placa de V\u00eddeo Gen\u00e9rica N\"\r\n  Monitor      \"Monitor N\"\r\n  DefaultDepth 24   \r\n  SubSection   \"Display\"\r\n     Depth     24\r\n     Modes     \"1024x768\" \"800x600\" \"640x480\"\r\n  EndSubSection\r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">5. A defini\u00e7\u00e3o de teclado pode continuar igual a j\u00e1 existente em seu xorg.conf, no entanto, certifique-se de que o nome do teclado (Identifier) est\u00e1 de acordo com a Se\u00e7\u00e3o Layout (isto \u00e9, &#8220;Generic Keyboard&#8221;). O mouse voc\u00ea deve fazer apontar para o dispositivo \/dev\/input\/mice:<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"InputDevice\"\r\n  Identifier   \"Configured Mouse 1\"\r\n  Driver       \"mouse\"\r\n  Option       \"CorePointer\"\r\n  Option       \"Device\"       \"\/dev\/input\/mice\"\r\n  Option       \"Protocol\"     \"ImPS\/2\"\r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">6. Para evitar problemas na inicializa\u00e7\u00e3o do Servidor X devido ao n\u00e3o reconhecimento do mouse, voc\u00ea pode incluir, sem problemas, a seguinte se\u00e7\u00e3o:<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"ServerFlags\"\r\n  Option \"AllowMouseOpenFail\"   \"yes\"\r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">OBS: Isso n\u00e3o afetar\u00e1 o multiterminal, pois os dispositivos mouses\/teclados ser\u00e3o passados como par\u00e2metros, posteriormente, para o\u00a0<i>Xephyr<\/i>.7. Finalmente, para desabilitar a troca de VT&#8217;s e as teclas Ctrl+Alt+Backspace, verifique que a se\u00e7\u00e3o &#8220;ServerFlags&#8221; possui as seguintes op\u00e7\u00f5es:<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Section \"ServerFlags\"\r\n  ...\r\n\r\n  <span style=\"color: #004080;\"># Desativar VT Switching<\/span>\r\n  Option    \"DontVTSwitch\" \"yes\"\r\n\r\n  <span style=\"color: #004080;\"># Desativa o uso das teclas Ctrl+Alt+Backspace<\/span>\r\n  Option    \"DontZap\"       \"yes\"\r\n  ...\r\nEndSection<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">\n<h1>Configura\u00e7\u00e3o do Layout<\/h1>\n<p>Como a detec\u00e7\u00e3o dos dispositivos de entrada (mouses e teclados) feita pelo kernel (veja se\u00e7\u00e3o &#8220;Dispositivos de Entrada&#8221;) nem sempre segue a mesma ordem, \u00e9 poss\u00edvel que o kernel associe o mesmo dispositivo a arquivos diferentes, em cada inicializa\u00e7\u00e3o, o que poder\u00e1 &#8220;embaralhar&#8221; os mouses e teclados.<\/p>\n<p>Para evitar o problema, fizemos scripts que automatizam o processo de associa\u00e7\u00e3o de mouses e teclados a seus respectivos monitores. Voc\u00ea s\u00f3 precisa configurar o layout (qual teclado e mouse est\u00e3o associados a qual monitor) uma vez, e o script ir\u00e1 armazenar esse &#8220;layout&#8221; no arquivo\u00a0<i>\/etc\/X11\/devices.conf<\/i>. Para utilizar o script, siga os seguintes passos:<\/p>\n<p>1. Instale o pacote\u00a0<i>xdialog<\/i>:<\/p>\n<p><b># apt-get install xdialog<\/b><\/p>\n<p>2. Descomprima o arquivo\u00a0<a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/xkb-evdev.tar.gz\">xkb-evdev.tar.gz<\/a>\u00a0no diret\u00f3rio \/etc\/X11.<\/p>\n<p>3. Remova ou renomeie o arquivo\u00a0<i>\/etc\/gdm\/gdm.conf<\/i>:<\/p>\n<p><b># mv \/etc\/gdm\/gdm.conf \/etc\/gdm\/gdm.conf.backup<\/b><\/p>\n<p>4. Descompacte o arquivo\u00a0<a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/public.tgz\">public.tgz<\/a>\u00a0e copie os arquivos &#8220;configura_layout&#8221; e &#8220;select.out&#8221; para o diret\u00f3rio \/usr\/local\/sbin. Depois copie o arquivo &#8220;configuracao_automatica&#8221; para o diret\u00f3rio &#8220;\/etc\/init.d&#8221;.<\/p>\n<p>5. Configure para que o script configuracao_automatica seja executado na inicializa\u00e7\u00e3o do sistema:<\/p>\n<p><b># update-rc.d configuracao_automatica start 70 S .<\/b><\/p>\n<p>6. Execute o seguinte comando, para configurar o layout do sistema. O script ir\u00e1 fazer perguntas em cada uma das telas do seu multiterminal para saber qual teclado e qual mouse ser\u00e3o associados a cada monitor.<\/p>\n<p><b># invoke-rc.d configuracao_automatica start<\/b><\/p>\n<p>O script ir\u00e1 gerar automaticamente o arquivo \/etc\/gdm\/gdm.conf, se ele n\u00e3o existir, e os arquivos de configura\u00e7\u00e3o do XKB (\/usr\/X11R6\/lib\/X11\/xkb\/XX-config.keyboard). O script ir\u00e1 criar links no diret\u00f3rio \/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\u00e9m ir\u00e1 criar links chamados mouse0mt, mouse1mt, etc, que se referem, respectivamente, ao mouse do primeiro terminal, ao mouse do segundo terminal, e assim por diante.<\/p>\n<p>Ap\u00f3s voc\u00ea responder \u00e0s perguntas, o script ir\u00e1 gerar o arquivo \/etc\/X11\/devices.conf, que ir\u00e1 conter as associa\u00e7\u00f5es de mouse e teclado a cada terminal, al\u00e9m da configura\u00e7\u00e3o dos teclados (regras, modelo e layout).<\/p>\n<h1>Configura\u00e7\u00e3o manual<\/h1>\n<p>Se voc\u00ea utilizou o script da se\u00e7\u00e3o anterior, voc\u00ea n\u00e3o deve realizar os passos das pr\u00f3ximas se\u00e7\u00f5es. No entanto, para completude, apresentaremos os procedimentos manuais para a configura\u00e7\u00e3o do XKB e o GDM, caso voc\u00ea n\u00e3o tenha utilizado o script.<\/p>\n<h1>Configura\u00e7\u00e3o XKB<\/h1>\n<p>Para permitir que o\u00a0<i>Xephyr<\/i>\u00a0utilize a extens\u00e3o\u00a0<i>XKB<\/i>, voc\u00ea deve descomprimir o arquivo\u00a0<a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\/howtos\/xkb-evdev.tar.gz\">xkb-evdev.tar.gz<\/a>\u00a0no diret\u00f3rio \/etc\/X11.<\/p>\n<p>Depois \u00e9 necess\u00e1rio criar um arquivo de configura\u00e7\u00e3o XKB para cada Xephyr, para configurar os teclados. O arquivo de configura\u00e7\u00e3o 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.<\/p>\n<p>Um exemplo de um arquivo de configura\u00e7\u00e3o para um teclado ABNT2 pode ser visto a seguir:<\/td>\n<\/tr>\n<tr>\n<td>rules = &#8220;evdev&#8221;<br \/>\nmodel = &#8220;abnt2&#8221;<br \/>\nlayout = &#8220;br&#8221;<\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">\n<h1>Configura\u00e7\u00e3o do Gdm<\/h1>\n<p>O \u00faltimo passo \u00e9 configurar o gerenciador de login para iniciar o servidor X principal e tamb\u00e9m para rodar os scripts &#8220;wrappers&#8221; que ser\u00e3o respons\u00e1veis 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.<\/p>\n<p>gdm.conf<\/p>\n<p>Edite o arquivo \/etc\/gdm\/gdm.conf na se\u00e7\u00e3o [servers] inserindo o seguinte:<\/td>\n<\/tr>\n<tr>\n<td>[servers]<br \/>\n0=Hardware<br \/>\n<span style=\"color: #004080;\"># Hardware ser\u00e1 o servidor X principal, naquele onde ser\u00e3o executados os demais N servidores Xephyr&#8217;s<\/span>1=Xephyr1<br \/>\n2=Xephyr2<br \/>\n3=Xephyr3<br \/>\n.<br \/>\n.<br \/>\nN=XephyrN<br \/>\n<span style=\"color: #004080;\"># Xephyr{1..N} \u00e9 cada um dos servidores Xephyr&#8217;s.<\/span><\/p>\n<p>[server-Hardware]<br \/>\nname=Hardware<br \/>\ncommand=\/usr\/X11R6\/bin\/X<br \/>\nhandled=false<br \/>\nflexible=false<br \/>\n<span style=\"color: #004080;\"># A op\u00e7\u00e3o handled=false impede que seja carregado o gerenciador de login no servidor X principal.<\/span><\/p>\n<p>[server-Xephyr1]<br \/>\nname=Xephyr1<br \/>\ncommand=\/usr\/sbin\/Xephyr.sh -display :0.0 -xauthority \/var\/lib\/gdm\/:0.Xauth -geometry 1024&#215;768+0+0<br \/>\n-keyboard \/dev\/input\/event0 -mouse \/dev\/input\/event1,5 -use-evdev -dpi 92<br \/>\nhandled=true<br \/>\nflexible=false<br \/>\n<span style=\"color: #004080;\">#<\/span><br \/>\n<span style=\"color: #004080;\"># A op\u00e7\u00e3o -keyboard e -mouse identificam, respectivamente, qual teclado e mouse\u00a0<\/span><br \/>\n<span style=\"color: #004080;\">#ser\u00e3o associados ao servidor Xephyr1, conforme analisado no\u00a0<\/span><br \/>\n<span style=\"color: #004080;\">#arquivo \/proc\/bus\/input\/devices. Se a op\u00e7\u00e3o\u00a0<\/span><br \/>\n<span style=\"color: #004080;\">#-mouse terminar em &#8220;,5&#8221;, como no exemplo, a roda do mouse ser\u00e1 habilitada.<\/span><br \/>\n<span style=\"color: #004080;\">#\u00a0<\/span><br \/>\n<span style=\"color: #004080;\">#<\/span><br \/>\n<span style=\"color: #004080;\"># Xephyr.sh \u00e9 o script que carrega o servidor Xephyr.<\/span><br \/>\n.<br \/>\n.<br \/>\n.<br \/>\n[server-XephyrN]<br \/>\nname=XephyrN<br \/>\ncommand=\/usr\/sbin\/Xephyr.sh -display :0.(N-1) -xauthority \/var\/lib\/gdm\/:0.Xauth -geometry 1024&#215;768+0+0<br \/>\n-keyboard \/dev\/input\/eventXX -mouse \/dev\/input\/eventYY -use-evdev -dpi 92<br \/>\nhandled=true<br \/>\nflexible=false<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Considera\u00e7\u00f5es<\/b><\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/tetrahead1.jpg\" width=\"350\" height=\"217\" \/><\/td>\n<\/tr>\n<tr>\n<td align=\"justify\">Esse tutorial foi desenvolvido pelo Centro de Computa\u00e7\u00e3o Cient\u00edfica e Software Livre (C3SL &#8211;\u00a0<a href=\"http:\/\/www.c3sl.ufpr.br\/\">www.c3sl.ufpr.br<\/a>) da Universidade Federal do Paran\u00e1.Outras vers\u00f5es de multiterminais desenvolvidos pelo C3SL est\u00e3o dispon\u00edveis em:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.c3sl.ufpr.br\/multiterminal\">http:\/\/www.c3sl.ufpr.br\/multiterminal<\/a><\/li>\n<\/ul>\n<p>Este tutorial ainda n\u00e3o trata de concorr\u00eancia de som (mas n\u00e3o deixa a desejar no principal ;-).<\/p>\n<p>H\u00e1 outros projetos para cria\u00e7\u00e3o e populariza\u00e7\u00e3o das m\u00e1quinas multiterminais como o do Ronald Scherolt:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.scherolt.homelinux.org\/multilinux\">http:\/\/www.scherolt.homelinux.org\/multilinux<\/a><\/li>\n<\/ul>\n<p>que se ap\u00f3ia no projeto do C3SL.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o O\u00a0Xephyr\u00a0\u00e9 um tipo de servidor X que utiliza outro servidor X (Xorg) para a exibi\u00e7\u00e3o das imagens. O Xephyr funciona como cliente do Xorg, mas \u00e9 tamb\u00e9m servidor para outros aplicativos, que enxergam o Xephyr como se fosse um servidor X normal. O Xephyr pode ser utilizado para se trabalhar em dois ou mais [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[369,368,371,370],"class_list":["post-631","post","type-post","status-publish","format-standard","hentry","category-viazap","tag-em","tag-multiterminais","tag-pc","tag-um"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=631"}],"version-history":[{"count":2,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/631\/revisions"}],"predecessor-version":[{"id":635,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/631\/revisions\/635"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}