Executar aplicações Windows através de seamless RDP

Olá ! Esse artigo é para quem procura uma forma de executar aplicações que são compatíveis somente com o Windows no Linux. Através de uma conexão SeamlessRDP os aplicativos serão executados de forma transparente, comportando-se como aplicações locais do linux.

1 – Introdução

Certamente quem trabalha com Linux em algum momento esbarrou em alguma aplicação que é compatível somente com o Windows, ou até mesmo aplicações Web que são apenas compatíveis com o Internet Explorer. Esse artigo tem como objetivo possibilitar que aplicações para Windows sejam executadas no Linux como se fossem aplicações locais, isto é, de forma transparente ao usuário, aplicações Windows são apresentadas como qualquer aplicativo que está sendo executado no Linux.

Para isso, será utilizada uma conexão RDP “seamless”, que executará as aplicações no Windows apresentando-as no sistema Linux fazendo com que seja visualizada somente a janela da aplicação executada. Essa configuração pode ser feita através de uma maquina virtual Windows no próprio sistema ou com um servidor com o Terminal Services.

2 – Compilando o rdesktop com compartilhamento de sessão

Primeiramente, para que o rdestkop suporte o compartilhamento de sessões, que possibilitará a execução de diversas aplicações ou várias instâncias da mesma simultaneamente, é necessário aplicar o patch disponibilizado pela Cendio (http://www.cendio.com/seamlessrdp).

Vamos utilizar os links disponibilizados pela Fontis em http://www.fontis.com.au/rdesktop:

Código fonte do rdestkop : http://www.fontis.com.au/system/files/rdesktop_src.tar.gz

Patch para SeamlessRDP: http://www.fontis.com.au/system/files/rdesktop.patch

Atualizado em 04/01/2013:

O link da Fontis para baixar o patch do rdesktop foi desativado, efetue o Download pelo meu repositório no github: https://github.com/fsschmidt/seamlessrdp

Efetuado o download dos arquivos acima, descompacte o arquivo com os fontes do rdesktop:

tar zxf rdesktop_src.tar.gz

Aplique o patch:

patch -p1 < rdesktop.patch

Agora iremos compilar o rdesktop:

./bootstrap
./configure
make

Após compilado, copie o executável do rdesktop para o caminho desejado (neste tutorial utilizaremos o caminho /usr/local/bin/rdesktop).

Observe no momento da compilação que o caminho para os mapas de teclado (keymap) será definido por padrão em /usr/local/share/rdesktop/keymap, portanto, copie o diretório keymaps que está nos sources do rdesktop para este caminho OU defina outro ao executar o ./configure.

Se for apresentado o erro “suspicious cache-id, must contain _cv_ to be cached” ao compilar o rdesktop, por favor siga as orientações na dica:

http://www.vivaolinux.com.br/dica/suspicious-cacheid-must-contain-_cv_-to-be-cached-ao-compilar-o-rdesktop/

3 – Executando aplicações Windows

Para conseguir executar as aplicações no modo Seamless é necessário, além de habilitar o serviço de conexões remotas (inserir imagem) efetuar o download do servidor que irá executar as aplicações nesta forma, o arquivo pode ser obtido nos seguintes links:

http://www.cendio.com/seamlessrdp/seamlessrdp.zip

OU

http://www.fontis.com.au/files/seamlessrdp_server.zip

É possível também compilar direto dos fontes : http://rdesktop.svn.sourceforge.net/viewvc/rdesktop/seamlessrdp/trunk/

Efetuado o download ou compilado dos fontes, extraia os arquivos em algum diretório, nesse tutorial utilizaremos o diretório c:\seamlessrdp.

No lado do Linux, é necessário utilizar um script para que seja possível executar diversas aplicações ou até mesmo várias instancias da mesma simultaneamente. Esse script em PERL você pode encontrar também no site da fontis (http://www.fontis.com.au/rdesktop) , porém eu optei por adicionar alguns parâmetros, para que seja possível executar o script somente adicionando o caminho do executável do Windows e transcrevê-lo para shell script:

O script abaixo está publicado em: https://github.com/fsschmidt/seamlessrdp

#!/bin/bash
# Fabio S. Schmidt <fabio@improve.inf.br>

#Variaveis
BIN=”/usr/local/bin/rdesktop”
HOST=”192.168.70.43″
USUARIO=”remoto”
SENHA=”123456″
KEYMAP=”pt-br”
SOCKETRDP=”$HOME/.rdesktop/seamless.socket”;
SHELLRDP=”C:\seamlessrdp\seamlessrdpshell.exe”

#Exigir argumento, aplicativo windows que deve ser executado
#ex.: notepad, calc, “c:\arquivos de programas\internet explorer\iexplore.exe”
if [ -z “$1” ]
then
echo “Utilize $0 <aplicativo>”
exit
fi

#Controlar sessoes rpd
#Utiliza o compartilhamento de conexoes que permite executar varias aplicacoes
#ou varias sessoes da mesma simultaneamente
processosrdp=`pgrep -U $USER -x rdesktop | wc -l`;
#se nao existir nenhuma sessao inicia a conexao rpd master
if [ $processosrdp -eq 0 ]
then
$BIN -A -s “$SHELLRDP $1” $HOST -u $USUARIO -p $SENHA -k $KEYMAP
# se existir alguma sessao utiliza o compartilhamento de conexao
else
$BIN -M $SOCKETRDP -l “$1”
fi

Altere as variáveis conforme o seu ambiente, no script o executável do RDESKTOP está em /usr/local/bin/rdesktop, o servidor remoto possui IP 192.168.70.43, o usuário para conexão é REMOTO e a senha 123456. No lado do Windows, o aplicativo foi descompactado no diretório c:\seamlessrdp.

Basta executar o script conforme abaixo, conforme explicado no próprio:

/caminho/nome_do_script.sh “c:\arquivos de programas\internet explorer\iexplore.exe”

OU

/caminho/nome_do_script.sh notepad

Anúncios

suspicious cache-id, must contain _cv_ to be cached ao compilar o rdesktop

Essa dica é para quem necessita compilar o rdesktop com o patch da FONTIS (http://www.fontis.com.au/rdesktop) para compartilhamento de conexões “seamlessRDP” , que possibilita executar aplicações do Windows de forma transparente no Linux, através de conexão RDP. Com esse patch é possível executar múltiplas sessões da mesma aplicação ou diversas aplicações simultaneamente, nessa imagem é possível visualizar o comportamento das aplicações:

http://www.fontis.com.au/files/seamlessrdp-screenshot-kde-medium.png

Conforme a versão do autoconf da distribuição, ao compilar o rdesktop com o patch as seguintes mensagens são exibidas:

configure.ac:550: warning: AC_CACHE_VAL(socklen_t_equiv, …): suspicious cache-id, must contain _cv_ to be cached ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from… ../../lib/m4sugar/m4sh.m4:505: AS_IF is expanded from… ../../lib/autoconf/types.m4:234: AC_CHECK_TYPE is expanded from

Para corrigir esse erro, é necessário aplicar o patch abaixo:

http://sourceforge.net/tracker/?func=detail&atid=381349&aid=2624071&group_id=24366

Será efetuado o download do arquivo “0001-autoconf-renamed-socklen_t_equiv-to-socklen_t_ac_eq.patch”, copie o mesmo para o diretório raiz dos fontes do rdesktop e aplique o patch:

patch -p1 < 0001-autoconf-renamed-socklen_t_equiv-to-socklen_t_ac_eq.patch

Feito isso, compile o rdesktop normalmente !

Obs.: Utilizei a solução no Opensuse 11.4 e Debian Squeeze, no Debian foi necessário aplicar o patch.