Ubuntu e XDMCP como thinclient

#ubuntu, #unix

O XDMCP é uma forma de acessar remotamente um computador com Linux via interface gráfica, assim como o ssh é para terminal.

Partindo deste princípio basta ter uma máquina com todos os programas necessários instalados e ativar o XDMCP que todos os clientes poderão ter acesso a máquina como se estivessem nela, compartilhando programas, arquivos, dispositivos (impressora, pendrive, dentre outros).

Mas o usuário ainda tem que selecionar no GDM que quer fazer login remoto e selecionar o servidor, com isso pode ficar um pouco prolixo executar esta tarefa a cada login. Felizmente uma boa pesquisa na internet me deu um shell script que pode ser colocado na inicialização do sistema para que seja aberto a janela de login com o servidor já selecionado.

Siga os passo a seguir para configurar o cliente.

Instalação

A instalação do sistema operacional se deu como uma instalação padrão do Ubuntu 9.04 Desktop, é necessário apenas ativar o servidor XDMCP.

Como o servidor irá precisar ter o GDM instalado e todos os outros programas de desktop eu mostrarei a instalação usando o ambiente gráfico:

Servidor

Selecione o menu Sistema > Administração > Janela de início de sessão:

Captura de tela-1

Após autenticar, na aba Remoto deixe o estilo: O mesmo que local:

Captura de tela - Preferências da janela de início de sessão

Cliente

A configuração do cliente é estritamente no terminal, portando pode ser feito via ssh.

Primeiro é necessário desativar o script do GDM, para isso pode-se simplesmente mover o arquivo /etc/init.d/gdm para, por exemplo: /etc/init.d/gdm.OLD:

# mv /etc/init.d/gdm /etc/init.d/gdm.OLD

Por fim salve o script abaixo em /etc/init.d/xdmcp:

#!/bin/sh
# Launchs XDMCP

set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin
PIDFILE=/var/run/xdmcp.pid
XDMCPSERVER=server

. /lib/lsb/init-functions

case "$1" in
  start)
       if pidof usplash > /dev/null; then
                /etc/init.d/usplash start
        fi
        log_begin_msg "Starting XDMCP..."
        start-stop-daemon --start --quiet --pidfile $PIDFILE --name xdmcp --exec /usr/bin/X -- -query $XDMCPSERVER > /dev/null || log_end_msg 1
        log_end_msg 0
  ;;
  stop)
        log_begin_msg "Stopping XDMCP..."
        start-stop-daemon --stop  --quiet --pidfile $PIDFILE --name xdmcp /usr/bin/X -- query $XDMCPSERVER --retry 30
        log_end_msg 0
  ;;
  restart)
        $0 stop || true
        $0 start
  ;;
  *)
        log_success_msg "Usage: /etc/init.d/xdmcp {start|stop|restart}"
        exit 1
  ;;
esac

exit 0

Substitua o nome server da linha XDMCPSERVER=server pelo nome do servidor ou endereço IP.

E execute o seguinte comando:

# update-rc.d xdmcp defaults 99
update-rc.d: warning: /etc/init.d/xdmcp missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/xdmcp ...
   /etc/rc0.d/K99xdmcp -> ../init.d/xdmcp
   /etc/rc1.d/K99xdmcp -> ../init.d/xdmcp
   /etc/rc6.d/K99xdmcp -> ../init.d/xdmcp
   /etc/rc2.d/S99xdmcp -> ../init.d/xdmcp
   /etc/rc3.d/S99xdmcp -> ../init.d/xdmcp
   /etc/rc4.d/S99xdmcp -> ../init.d/xdmcp
   /etc/rc5.d/S99xdmcp -> ../init.d/xdmcp</pre>

Problemas

O XDMCP acessa o computador remoto como se o usuário estivesse em frente ao computador, por isso caso seja colocado algum pen-drive, cd-rom ou outro dispositivo no computador local ou remoto ele não estará disponível tão facilmente para ambos (ou para todos).