Cabeçalho da esquerda Cabeçalho do meio Cabeçalho da direita

Multiternial no Linux

Não é difícil fazer um multiterminal com Linux num notebook


Introdução

Multiterminal é um conceito que consiste em um computador suportando vário terminais, composto cada um por monitor, teclado, mouse e placa de som (opcional), de forma tal que cada terminal possa ser usado independentemente e compartilhando os recursos de um mesmo computador. Mais informações em Multiterminal por C3SL e na comunidade Multilinux.

No Linux, o sistema é iniciado em modo texto na placa de vídeo principal, determinada pela placa mãe. Alguns passam a usar um modo gráfico básico para exibir uma tela amigável enquanto o sistema é carregado por completo. Depois disso é carregado o suporte gráfico completo por um sistema nomeado X, o qual faz parte do projeto Xorg. O sistema X possui configurações específicas (ou genéricas) sobre placas de vídeo, monitores, mice (plural de mouse em inglês), teclados e como esses dispositivos são distribuídos e seu comportamento numa área de trabalho. dessa forma, todos os programas gráficos rodam sobre o X.

Para então abrir sessões independentes, é carregado sobre o X principal e real, o qual entende tudo como parte de uma única área de trabalho, um X virtual, sendo usado aqui o Xephyr. É aberto então sobre um X real um X virtual para cada terminal, um em cada monitor com o respectivo mouse e teclado, possibilitando ter vários usuário em um computador de forma independente.

Motivado por colocar um notebook com Debian Testing AMD64 e placa de vídeo nVidia GeForce Go 7600 com suporte a duas telas, como pode ser visto e configurado em nVidia no Notebook, para servir duas pessoas num momento temporário, tentando generalizar para todos os casos e também para pessoas que querem ter uma ideia geral sobre multiterminal com Linux, escrevo esse artigo.

Placas de Vídeo e Monitores

É preciso que se coloque várias placas de vídeo para se ligar vários monitores, sendo que, se partir para soluções com peças novas, as placas de vídeo comum no mercado atualmente suportam dois monitores e são PCIe (PCI Express), onde, se não comprar uma placa mãe com suporte a várias placas de vídeo PCIe, vai ficar limitado a apenas dois terminais por computador.

Mas já é algo interessante quando se tem um computador novo com uma placa de vídeo com suporte a dois monitores. Raras placas de vídeo on-board (soldada na placa mãe) oferecem tal suporte.

Geralmente essas placas para dois monitores tem um conexão nomeada de VGA, outrora RGB ou DB25, e um outra DVI-I, onde um adaptador simples pode torná-la VGA, que é a conexão comum dos monitores atualmente. Além dessas, tem a DVI-D, padrão HDMI, presente em placas mãe de luxo e placas de vídeo de última geração, a qual não é possível adaptá-la de forma simples para VGA ou DVI-I para usar monitores comuns.

Uma outra alternativa, mas difícil de se encontrar novas são placas de vídeo PCI (não PCIe), sendo que é possível retirar tal placas de máquinas antigas e sucateadas para proveito nessa topologia, sendo que estas dificilmente oferecem suporte a dois monitores.

Além dessas alternativas, ainda é possível utilizar placas mãe com suporte a conexão de placas de vídeo AGP e PCIe, pois ainda encontra-se no mercado placas de vídeo novas para os dois tipos de conexão.

Também os notebooks atuais vem com uma conexão VGA e/ou SVideo para conectá-lo à monitor, TV ou projetor, sendo assim plenamente possível utilizar o notebook como multiterminal para dois usuários.

Teclado e Mouse

Um computador comum, difícil em notebook, tem duas conexões PS/2, uma para ligar mouse e outra teclado, mas pode-se ligar dois teclados nessas e utilizar mouse USB, ou o contrário. O restante deve ser tudo USB, onde se faltar porta, precisa de um hub USB.

No Linux atual, os teclados e mice (plural de mouse em inglês), podem ser acessados pela sua posição física. O Linux "cria" arquivos que representam esses caminhos no diretório /dev/input/by-path/, como a lista de arquivos abaixo tirada de num notebook com um mouse e um teclado nas portas USB, via Terminal (ou Console ou Consola no menu principal Aplicativos -> Acessórios):

junior@jumovel:~$ ls -al /dev/input/by-path/
total 0
drwxr-xr-x 2 root root 220 Jul 4 10:53 .
drwxr-xr-x 4 root root 380 Jul 4 10:53 ..
lrwxrwxrwx 1 root root 9 Jul 4 05:10 pci-0000:00:1d.0-usb-0:1:1.0-event-kbd -> ../event6
lrwxrwxrwx 1 root root 9 Jul 4 10:53 pci-0000:00:1d.1-usb-0:1:1.0-event-mouse -> ../event8
lrwxrwxrwx 1 root root 9 Jul 4 10:53 pci-0000:00:1d.1-usb-0:1:1.0-mouse -> ../mouse1
lrwxrwxrwx 1 root root 9 Jul 4 10:53 pci-0000:00:1d.2-usb-0:1:1.0-event-mouse -> ../event7
lrwxrwxrwx 1 root root 9 Jul 4 10:53 pci-0000:00:1d.2-usb-0:1:1.0-mouse -> ../mouse0
lrwxrwxrwx 1 root root 9 Jul 4 05:10 platform-i8042-serio-0-event-kbd -> ../event0
lrwxrwxrwx 1 root root 10 Jul 4 05:10 platform-i8042-serio-4-event-mouse -> ../event10
lrwxrwxrwx 1 root root 9 Jul 4 05:10 platform-i8042-serio-4-mouse -> ../mouse2
lrwxrwxrwx 1 root root 9 Jul 4 05:10 platform-pcspkr-event-spkr -> ../event9

Também é possível pela identificação do dispositivo, mas isso pode gerar algum conflito e não mapeia dispositivos na PS/2, então nunca usei, mas pode identificar seu dispositivo por esses arquivos, se achar conveniente:

junior@jumovel:~$ ls -al /dev/input/by-id/
total 0
drwxr-xr-x 2 root root 140 Jul 4 10:53 .
drwxr-xr-x 4 root root 380 Jul 4 10:53 ..
lrwxrwxrwx 1 root root 9 Jul 4 10:53 usb-15d9_USB_Mouse-event-mouse -> ../event7
lrwxrwxrwx 1 root root 9 Jul 4 10:53 usb-15d9_USB_Mouse-mouse -> ../mouse0
lrwxrwxrwx 1 root root 9 Jul 4 10:53 usb-1bcf_USB_Optical_Mouse-event-mouse -> ../event8
lrwxrwxrwx 1 root root 9 Jul 4 10:53 usb-1bcf_USB_Optical_Mouse-mouse -> ../mouse1
lrwxrwxrwx 1 root root 9 Jul 4 05:10 usb-Dell_Dell_USB_Keyboard-event-kbd -> ../event6

Partindo do primeiro caso, nos interessa os dispositivos com a penúltima palavra event seguida de mouse ou kbd (abreviação de keyboard, teclado em inglês). Para identificar, basta pedir pela listagem com o dispositivo conectado e com ele desconectado e ver qual corresponde, pois esse arquivo deveremos passar para o Xephyr, o X virtual.

Instalação

Essa instalação é baseada no Debian Testing, nomeado no momento, Julho de 2009, de Squeeze.

A instalação do Xorg no Debian, tal como nas distribuições mais atuais, já é feita por padrão se estiver utilizando um ambiente gráfico completo tal como o Gnome ou KDE. Este Xorg já vem com o Xephyr pronto para ser usado com evdev, dessa forma não é preciso aplicar alterações para o Xephyr suportar evdev e compilá-lo, porém é preciso aplicar alterações para suporte à rodinha do mouse até então, Junho de 2009, pelo que eu pude constatar. A partir da versão 1.6 isso já não é mais preciso.

Pois bem, usaremos o ambiente Gnome para essa instalação, então parto o pressuposto que está com o ambiente Gnome rodando para um terminal único com várias telas, teclados e mice. Para configurar o X para placas de vídeo nVidia, veja o outro tutorial em nVidia no Notebook.

O programa responsável por iniciar o X é chamado de gerenciador de telas, sendo o padrão do X o XDM (X Display Manager - gerenciador de telas do X), o do KDE é o KDM (KDE Display Manager) e o Gnome o GDM (Gnome Display Manager). Como estamos com Gnome, vamos configurar o GDM para abrir o X real e os X virtuais, um em cada monitor identificado e carregado pelo X real, passando como parâmetro para este X virtual (Xephyr), qual monitor, teclado e mouse que formam um conjunto.

O primeiro entrave é que precisamos definir as variáveis de ambiente XAUTHORITY e DISPLAY antes de chamar o Xephyr, porém o GDM não dá suporte para definir tais variáveis dentro de cada contexto de servidor X, até onde pude analisar. Diante disso, foi preciso criar um script para ser chamado pelo GDM onde este script define as variáveis de ambiente e chama o Xephyr. Este script vai receber o nome de load_Xephyr e deve estar no diretório /usr/local/bin, seguindo as recomendações do Debian. Segue o script abaixo:

#!/bin/bash

trap "" usr1

XEPHYR=/usr/bin/Xephyr

args=()

while [ ! -z "$1" ]; do
    if [ "$1" == "-xauthority" ]; then
        shift
        if [ ! -z "$1" ]; then
            export XAUTHORITY="$1"
        fi
    elif [ "$1" == "-display" ]; then
        shift
        if [ ! -z "$1" ]; then
            export DISPLAY="$1"
        fi
    else
        if ! expr match $1 vt[0-9][0-9]* >/dev/null; then
            args=("${args[@]}" "$1")
        fi
    fi
    shift
done

exec $XEPHYR "${args[@]}"

Criado então o arquivo /usr/local/bin/load_Xephyr com o conteúdo acima, basta adicionar as seguinte linhas no arquivo /etc/gdm/gdm.conf "vazio" padrão que vem no Debian Testing:

0=XBase
1=Terminal1
2=Terminal2

[server-XBase]
name=Xbase
command=/usr/bin/X
handled=false
flexible=false

[server-Terminal1]
name=Terminal1
command=/usr/local/bin/load_Xephyr -display :0.0 -xauthority /var/lib/gdm/:0.Xauth -fullscreen -keybd evdev,,device=/dev/input/by-path/platform-i8042-serio-0-event-kbd,xkblayout=br,xkbmodel=abnt2 -mouse evdev,,device=/dev/input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-event-mouse -mouse evdev,,device=/dev/input/by-path/platform-i8042-serio-4-event-mouse -dpi 96
handled=true
flexible=false

[server-Terminal2]
name=Terminal2
command=/usr/local/bin/Xephyr -display :0.1 -xauthority /var/lib/gdm/:0.Xauth -fullscreen -keybd evdev,,device=/dev/input/by-path/pci-0000:00:1d.0-usb-0:1:1.0-event-kbd,xkblayout=br,xkbmodel=abnt2 -mouse evdev,,device=/dev/input/by-path/pci-0000:00:1d.2-usb-0:1:1.0-event-mouse -dpi 96
handled=true
flexible=false

Repare que este é um arquivo para multiterminal em notebook, assim sendo para o primeiro terminal, que é a tela, o teclado e mouse do notebook, tem um mouse a mais que é o mouse USB que geralmente uso em vez do mouse do próprio notebook, funcionando os dois ao mesmo tempo sem problema algum. O segundo terminal é um monitor ligado na porta VGA do notebook e teclado e mouse USB.

Por fim, o teclado ficará com algumas teclas doidas, o que pode ser resolvido no Gnome entrando no menu Sistema -> Preferências -> Teclado, na aba Disposições da janela que abrir, escolher o modelo de teclado como sendo Evdev-managed keyboard e na disposição colocar o país, que geralmente é Brasil/Brasil para teclados com Ç e Estados Unidos/USA International (with dead keys) para teclado sem o Ç. Depois dessa configuração é preciso sair da sessão do Gnome (Sistema -> Encerrar Sessão) e entrar novamente para essas configurações entrar em vigor.

Conclusão

Não é tão difícil transformar um computador em muitos com Linux, já foi muito mais complicado, mas está cada vez mais fácil. Somente tem-se os problemas por enquanto de que para funcionar da roda do mouse no X 1.4.2 (versão atual do Debian Testing) é preciso recompilar o Xephyr, fazendo uma alteração em uma linha de código alterando de 3 botões para 5, nada complicado, além das setas para a esquerda e para baixo não responderem repetidamente enquanto pressionadas e os LEDs dos teclados responderem ao X real com se fosse um teclado só. Na versão 1.6.1, do Debian Unstable, esses problemas já não deveriam mais estar acontecendo, mas ainda não testei.

Compilação do Xephyr para funcionar o roda do mouse

Basicamente é baixar o fonte via "apt-get source", baixar as dependências via "apt-get buil-dep", instalar o pacote devscripts com "apt-get install devscripts", fazer a devida modificação e executar o comando para criar os pacotes Debian. Mas como nem tudo são flores, durante a compilação há uma falha, que mais adiante será explanado o erro e como contorná-lo. Este problema não ocorre com a versão do X do unstable, atualmente 1.6.1, pois já foi feito nessa versão a devida correção, pelo que pude ver no código, mas não testei.

Primeiramente vamos obter o código fonte para Debian Testing, onde se estiver utilizando Stable ou por nome, troque o testing abaixo pelo correspondente:

jumovel:/usr/src# apt-get source -t testing xserver-Xephyr
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto
Preciso obter 8819kB de arquivos fonte.
Obter:1 http://ftp.br.debian.org testing/main xorg-server 2:1.4.2-11 (dsc) [2871B]
Obter:2 http://ftp.br.debian.org testing/main xorg-server 2:1.4.2-11 (tar) [8247kB]
Obter:3 http://ftp.br.debian.org testing/main xorg-server 2:1.4.2-11 (diff) [569kB]
Baixados 8819kB em 42s (207kB/s)
gpgv: keyblock resource `/root/.gnupg/trustedkeys.gpg': erro geral
gpgv: Signature made Sex 20 Fev 2009 01:06:23 BRT using DSA key ID D63469DF
gpgv: Impossível verificar assinatura: chave pública não encontrada
dpkg-source: warning: failed to verify signature on ./xorg-server_1.4.2-11.dsc
dpkg-source: info: extracting xorg-server in xorg-server-1.4.2
dpkg-source: info: unpacking xorg-server_1.4.2.orig.tar.gz
dpkg-source: info: applying xorg-server_1.4.2-11.diff.gz

jumovel:/usr/src# ls -al xorg* -d
drwxr-xr-x 29 root root 4096 Jul 4 19:10 xorg-server-1.4.2
-rw-r--r-- 1 root src 569146 Fev 20 01:32 xorg-server_1.4.2-11.diff.gz
-rw-r--r-- 1 root src 2871 Fev 20 01:32 xorg-server_1.4.2-11.dsc
-rw-r--r-- 1 root src 8246561 Jun 25 2008 xorg-server_1.4.2.orig.tar.gz

Depois disso, vamos instalar as dependência, que no meu caso, foi apenas uma e ainda precisei especificar explicitamente, mas poderiam haver várias num ambiente não preparado para desenvolvimento, além do que já tenho o pacote devscripts instalado:

jumovel:~# apt-get install devscripts
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto
devscripts já é a versão mais nova.
Os seguintes pacotes foram automaticamente instalados e não são mais requeridos:
  libwebkit-1.0-1
Use 'apt-get autoremove' para removê-los.
0 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

jumovel:/usr/src# apt-get build-dep xserver-Xephyr
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto
O pacote libgcrypt-dev é um pacote virtual fornecido por:
  libgcrypt11-dev 1.4.4-2
Você deveria selecionar explicitamente um para instalar.
E: O pacote libgcrypt-dev não tem candidato para instalação
E: Falhou ao satisfazer a dependência de Build-Depends por xorg-server: libgcrypt-dev
jumovel:/usr/src# apt-get install libgcrypt11-dev
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto
Os seguintes pacotes foram automaticamente instalados e não são mais requeridos:
  libwebkit-1.0-1
Use 'apt-get autoremove' para removê-los.
Os pacotes extra a seguir serão instalados:
  libgpg-error-dev
Pacotes sugeridos:
  libgcrypt11-doc
Os NOVOS pacotes a seguir serão instalados:
  libgcrypt11-dev libgpg-error-dev
0 pacotes atualizados, 2 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.
É preciso baixar 401kB de arquivos.
Depois desta operação, 1122kB adicionais de espaço em disco serão usados.
Você quer continuar [S/n]? s
Obter:1 http://ftp.br.debian.org testing/main libgpg-error-dev 1.6-1 [35,9kB]
Obter:2 http://ftp.br.debian.org testing/main libgcrypt11-dev 1.4.4-2 [365kB]
Baixados 401kB em 7s (56,3kB/s)
Selecionando pacote previamente não selecionado libgpg-error-dev.
(Lendo banco de dados ... 152598 arquivos e diretórios atualmente instalados).
Desempacotando libgpg-error-dev (de .../libgpg-error-dev_1.6-1_amd64.deb) ...
Selecionando pacote previamente não selecionado libgcrypt11-dev.
Desempacotando libgcrypt11-dev (de .../libgcrypt11-dev_1.4.4-2_amd64.deb) ...
Processando gatilhos para man-db ...
Configurando libgpg-error-dev (1.6-1) ...
Configurando libgcrypt11-dev (1.4.4-2) ...

Agora devemos-se editar o arquivo que configura por padrão o mouse para 3 botões em vez de 5 botões como deveria ser para funcionar a rodinha do mouse:

jumovel:/usr/src# cd xorg-server-1.4.2
jumovel:/usr/src/xorg-server-1.4.2# sed -i 's/nButtons = 3/nButtons = 5/' hw/kdrive/src/kinput.c

Nesse momento, vamos dar um novo número à versão do pacote e dar uma explicação:

jumovel:/usr/src/xorg-server-1.4.2# debchange -i "Mouse's wheel now works on Xephyr mouse evdev driver"

Podemos agora executar o comando para criar pacotes Debian de acordo com os originais instalados no sistema. Este processo leva um pouco de tempo, pois irá compilar praticamente todo o sistema base do Xorg, mas se alguém souber como compilar apenas o Xephyr, seria uma dica muito bem vinda. Vou demonstrar abaixo o erro, portanto não execute dpkg-buildpackage por enquanto:

jumovel:/usr/src/xorg-server-1.4.2# dpkg-buildpackage -b

Me deparei com o seguinte erro:

gcc -DHAVE_DIX_CONFIG_H -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -fno-strict-aliasing -D_BSD_SOURCE -DHAS_FCHOWN -DHAS_STICKY_DIR_BIT -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/hal -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I../../../include -I../../include -I../../../Xext -I../../../composite -I../../../damageext -I../../../xfixes -I../../../Xi -I../../../mi -I../../../miext/shadow -I../../../miext/damage -I../../../render -I../../../randr -I../../../fb -DHAVE_XORG_CONFIG_H -DXF86PM -Wall -g -O2 -rdynamic -o Xorg xorg.o ../../dix/.libs/libdix.a ../../config/libconfig.a common/libinit.a loader/libloader.a ./.libs/libosandcommon.a rac/librac.a parser/libxf86config.a dixmods/.libs/libdixmods.a modes/libxf86modes.a ramdac/libramdac.a ddc/libddc.a i2c/libi2c.a ../../composite/.libs/libcomposite.a ../../mi/.libs/libmi.a ../../xfixes/.libs/libxfixes.a ../../Xext/.libs/libXextbuiltin.a ../../GL/glx/.libs/libglx.a ../../GL/mesa/.libs/libGLcore.a ../../render/.libs/librender.a ../../randr/.libs/librandr.a ../../damageext/.libs/libdamageext.a ../../miext/damage/.libs/libdamage.a ../../miext/shadow/.libs/libshadow.a ../../Xi/.libs/libXi.a ../../xkb/.libs/libxkb.a ../../dix/.libs/libxpstubs.a ../../os/.libs/libos.a -ldl -lXfont -lXau -lfontenc -lpixman-1 -lhal -ldbus-1 -lXdmcp dixmods/.libs/libxorgxkb.a -lm -lrt
../../dix/.libs/libdix.a(dixfonts.o): In function `InitFonts':
/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/dix/../../dix/dixfonts.c:1894: undefined reference to `PrinterFontRegisterFpeFunctions'
/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/dix/../../dix/dixfonts.c:1895: undefined reference to `FontFileCheckRegisterFpeFunctions'
/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/dix/../../dix/dixfonts.c:1896: undefined reference to `check_fs_register_fpe_functions'
collect2: ld returned 1 exit status
make[5]: ** [Xorg] Erro 1
make[5]: Saindo do diretório `/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/hw/xfree86'
make[4]: ** [all-recursive] Erro 1
make[4]: Saindo do diretório `/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/hw/xfree86'
make[3]: ** [all] Erro 2
make[3]: Saindo do diretório `/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/hw/xfree86'
make[2]: ** [all-recursive] Erro 1
make[2]: Saindo do diretório `/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu/hw'
make[1]: ** [all-recursive] Erro 1
make[1]: Saindo do diretório `/usr/src/xorg-server-1.4.2/obj-i486-linux-gnu'
make: ** [build-stamp] Erro 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2

Pesquisando, descobri que essas funções fazem parte da biblioteca libxfont do pacote de versão 1.3.3 e como meu sistema estava com a 1.4.0 que não tem essas funções, então deu esse erro. Para resolver isso, baixei a versão 1.3.3 via web em http://packages.debian.org/lenny/libxfont1, escolhendo a arquitetura do seu sistema, que no meu caso foi amd64. Baixei o pacote .deb na área de trabalho, clique duplo sobre o pacote, abre uma tela com o arquivo data.tar.gz, clique duplo sobre este, depois sobre ".", depois "usr", depois "lib" e vejo o arquivo libXfont.so.1.4.1 de 17/07/2008, mesma versão que tenho em "/usr/lib/libXfont.so.1.4.1" de 13/04/2009, e resolvi copiar a do sistema, mais atual, para um local seguro e por no lugar antiga e reiniciar o sistema para ver se algo mudava. Nada mudou, então vou seguir a compilação:

jumovel:/usr/src/xorg-server-1.4.2# dpkg-buildpackage -b

Com tudo compilado e empacotado, temos duas alternativas: instalar o pacote xserver-xephyr criado ou copiar o arquivo Xephyr do pacote para /usr/local/bin/Xephyr e alterar o caminho do Xephyr script load_Xephyr. Optei pela segunda versão, pois posso manter assim a corrigida numa futura atualização que ainda não corrige o problema em vez de ter que recompilar e reempacotar tudo de novo.

1ª Opção: instalar pacote:

jumovel:/usr/src/xorg-server-1.4.2# cd ..
jumovel:/usr/src# dpkg -i xserver-xephyr_1.4.2-11.1_amd64.deb

2ª Opção: copiar o arquivo Xephyr do pacote para /usr/local/bin/Xephyr e alterar o caminho do Xephyr script load_Xephyr:

jumovel:/usr/src/xorg-server-1.4.2# cd ..
jumovel:/usr/src# dpkg -x xserver-xephyr_1.4.2-11.1_amd64.deb /tmp
jumovel:/usr/src# cp /tmp/usr/bin/Xephyr /usr/local/bin/Xephyr
jumovel:/usr/src# sed -i 's/\/usr\/bin\/Xephyr/\/usr\/local\/bin\/Xephyr/' /usr/local/bin/load_Xephyr

Após esse trabalho todo para depurar o código do Xephyr e Kdrive, encontrei uma correção na página dos problemas já conhecidos do MDM, mas somente em inglês, então este meu artigo é bem válido, pois estou agora com meu notebook rodando Debian Testing AMD64 em modo multiterminal para dois usuários.

Promoções




HTML 4.01

CSS 2.1
Copyright © 2007 - Kelly C. V. Almeida & Junior Polegato Todos os direitos reservados