sexta-feira, 9 de maio de 2014

Desktop Remoto nativo entre GNU/Linux e Windows



Galera,

Nestes dias precisei além de acessar alguns  servidores Linux via SSH mas também com necessidade de ir um pouco além, ou seja,  com suporte também ao ambiente gráfico.

Fiz algumas pesquisas e a melhor solução foi a utilização do servidor XRDP que torna o acesso pelo Windows de foram nativa.

Achei este Tuto na net e gostaria de compartilhar com vocês, pois facilita muita nossa vida para administrar algumas coisas, sei que todos nós gostamos de tela preta, isso não há dúvida, porém quando queremos algo rápido e com reporte de telas ou outros, isso facilita muito.

 OBS: Testado nas distribuições que parte do Debian

Vamos lá....  

Para utilizar o acesso remoto ao seu computador, instale o pacote xrdp que é o equivalente ao servidor RDP (Remote Desktop Protocol) do Windows.
O funcionamento do xrdp é bem parecido com o do vnc com pequenas diferenças.
Neste artigo o acesso remoto será feito somente usando os programas nativos padrões do GNU/Linux e Windows sem a utilização de programas de terceiros ou seja de outras origens.

Para instalar nas distro que utilizam o apt-get faça:

# apt-get install xrdp                    (servidor xrdp)
# apt-get install tightvncserver     (servidor vnc)
# apt-get install rdesktop           (cliente para acessar o servidor xrdp ou RDS do Windows)

Notas gerais:
Para o xrdp funcionar é necessário ter um servidor vnc instalado pois o mesmo é necessário (tightvncserver).

O pacote do xrdp contém libs que parte do nome do arquivo contém vnc.

Ao instalar o pacote xrdp automaticamente o servidor será ativado na sessão atual é carregando em todos os boots automaticamente.

Ao fazer a listagem dos processos, os comandos relativos ao xrdp que iniciam sempre junto com o sistema são:

$ ps xa | grep xrdp 
1259 ?        S      0:00 /usr/sbin/xrdp 
1264 ?        S      0:00 /usr/sbin/xrdp-sesman

Sendo que o servidor Xvnc somente será carregado quando um micro cliente for conectar ao seu usando o cliente rdesktop (Linux) ou o cliente RDP do Windows.

Para que um micro remotamente possa conectar ao seu servidor xrdp deverá usar o cliente rdesktop (Linux) ou o cliente RDP do Windows e especificar o hostname ou IP do seu computador para fazer a conexão.

Exemplo:
$ rdesktop mesa ou      rdesktop 192.168.1.100

Diferente de um acesso direto ao servidor vnc, embora que o xrdp faça uso do serviço vnc, o seu funcionamento é mais prático não precisando especificar a instância do servidor xrdp após o nome de host ou IP, e não precisando de um arquivo ~/.vnc/xstartup  a ser configurado para carregar o gerenciador de janelas padrão do seu sistema.
A senha de acesso ao computador remoto é gravada no arquivo ~/.vnc/sesman_usuário_passwd (criptografada).
Assim como o vnc do Linux, você pode acessar o seu próprio computador pelo xrdp, sem precisar de outro computador para fazer testes ou simplesmente conhecer o funcionamento, pois o comportamento será idético como se fosse a partir de outro computador.

Na foto abaixo um computador da rede local, quer fazer acesso a um computador de nome mesa que está rodando o servidor xrdp, sendo apresentado um caixa de autenticação do xrdp devendo fornecer um nome de usuário do login do sistema e a senha do mesmo, para poder controlar o computador remotamente.



O xrdp usa um tipo de modulo que ativa um servidor vnc ao carregar o comando acima  e cria o arquivo de senha sesman_nando_passwd na pasta padrão do vnc quando o micro remoto fizer login no seu na pasta ~/.vnc/sesman_nando_passwd. 

Parte da saída do comando ps xa do computador Linux ao ser controlado remotamente.
 1915 ?        S      0:31 Xvnc :10 -geometry 800x600 -depth 24 -rfbauth /home/nando/.vnc/sesman_nando_passwd -bs -ac -nolisten tcp

Por padrão o servidor Xvnc inicia com uma tela de 800x600 e 24 bits de cores.

Assim como no acesso direto pelo vnc o desktop Linux não é visto em tempo real e as aplicações que já estavam abertas ou forem abertas pelo usuário do computador controlado, não será visto em tempo real na janela para quem controla e nem o usuário deste verá as aplicações abertas remotamente. Caso o usuário do micro controlado, desconfiar de algo ele pode abrir uma janela de terminal e executar o comando ps xa no qual ele verá que estão abertas aplicações que ele não consegue ver na tela e que não foram executadas por ele.


Parando, resertando ou iniciado o servidor xrdp no ubuntu

# service xrdp stop
# service xrdp restart
# service xrdp start

Quando você parar o servidor xrdp, se alguém já tinha iniciado ou feito um acesso ao seu computador o servidor Xvnc continuar ativo, pois ele é separado do xrdp.

Especificando um tamanho de janela para o rdesktop 

$  rdesktop -5 -a 16 -g 1024x768 mesa 

Onde -5 é a versão do protocolo e -a 16 especifica os bits de cor, -g  1024x768 a resolução desejada da janela remota e mesa o nome de host do micro remoto.

Especificando para usar fullscreen

$ rdesktop -f mesa

Para sair do rdesktop, basta escolher a opção sair do gerenciador de janela que está sendo executado dentro do rdesktop.

Desativando o carregamento automático do servidor xrdp no boot

Nas distros baseadas em ubuntu em /etc/init.d basta retirar a permissão x do arquivo xrdp.

# chmod -x xrdp

Na próxima inicialização o servidor xrdp não mais será executado automaticamente no boot.

Como carregar windows managens simples diferente do padrão do seu sistema ?

No Xubuntu, o desktop padrão é o xfce4, e caso você instalar o Window Maker e prefira sempre usar o mesmo, não mais utilizando o desktop xfce4, o desktop exibido será sempre o do xfce4 na sessão remota do xrdp, pois este é o padrão do sistema.

Solução para exibir o desktop do Window Maker no xrdp

Na pasta /etc/xrdp crie o link  ln -s /usr/bin/wmaker

Onde /usr/bin/wmaker é a localização do executável do Window Maker, podendo em outras distros ou pacotes copilados ser diferente a localização do mesmo.

Agora você deve editar o arquivo /etc/xrdp/sesman.ini 

Altere as linhas UserWindowManager e DefaultWindowManager que utilizam por padrão o startwm.sh por wmaker ou pelo nome do executável que lança o seu gerenciador de janelas preferido. 

Você deve parar a sessão atual do servidor xrdp e depois executar novamente para entrar em efeito as novas configurações. 


# cat sesman.ini (conteúdo parcial)

[Globals] 
ListenAddress=127.0.0.1 
ListenPort=3350 
EnableUserWindowManager=1 
UserWindowManager=wmaker 
DefaultWindowManager=wmaker 


O mesmo procedimento também deve ser feito se você usar o fluxbox ou outros windows managens simples que necessita apenas de um único arquivo para inicializar todo o desktop por completo (esta dica pode não funcionar com o xfce4 nas distros baseadas no Slackware, pois são necessários vários comandos do xfce4 a ser executados para deixar funcional o desktop do xfce4, caso seja especificando somente o executável principal deste gerenciador de janela, pois é utilizado outro método pra inicialização padrão do gestor de janela nesta distro). Neste caso uma solução que não testei seria criar um script com todos os comandos do xfce4 necessários para executar o gerenciador de janela, criar o link para o script e nas linhas  UserWindowManager e DefaultWindowManager colocar o nome deste script.

Testado no xubuntu 12.10.

Como o xrdp sabe qual é o gerenciador padrão do sistema ?

No arquivo /etc/xrdp/startwm.sh tem  a linha  /etc/X11/Xsession que diz para utilizar o arquivo 
/etc/X11/Xsession que está localizado em /etc/X11 e sendo este arquivo é o que executa o ambiente gráfico padrão da instalação do sistema. Para outros windows managens instalado mais tarde, os mesmos não substituir o padrão do sistema, podendo apenas você escolher no momento do seu login qual você deseja utilizar, sendo sempre salvo automaticamente o último gerenciador usado ao desligar o computador.

Testado no xubuntu 12.10.

Firewall com RDP

Para obter o acesso remoto, é necessário liberar a porta 3389 (TCP e alguns casos pode ser necessário também abrir a porta UDP) caso as mesmas estejam bloqueadas com isso é preciso configurar as regras do Firewall do Linux (Iptables).  

Regra pra abrir a porta do servidor xrdp diretamente com o  iptables

# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3389 -j ACCEPT

Ao abrir somente a porta tcp 3389 o acesso remoto já funciona perfeitamente.


Para quem usa o ufw use:
# ufw allow proto tcp from 192.168.1.0/24 to any port 3389


Caso o firewall esteja ativo e se não foi aberta a porta tcp 3389 ao tentar se conectar com o servidor remoto xrdp será retornado o erro abaixo.

$ rdesktop 192.168.1.101 
Autoselected keyboard map pt-br 
ERROR: 192.168.1.101: unable to connect  (leva uns 35 segundos até vir o retorno de erro)

Quando a porta 3389 está liberada no firewall ou o mesmo está desativado, a tela de login para conexão remota aparece instantaneamente.

Outras

No micro mesa ao liberar a porta para acesso xrdp 

# iptables -L  (resultado parcial da saída do comando)
Chain INPUT (policy DROP) 
target     prot opt source               destination         
ufw-before-logging-input  all  --  anywhere             anywhere            
ufw-before-input  all  --  anywhere             anywhere            
ufw-after-input  all  --  anywhere             anywhere            
ufw-after-logging-input  all  --  anywhere             anywhere            
ufw-reject-input  all  --  anywhere             anywhere            
ufw-track-input  all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:3389 


Caso o servidor xrdp estiver rodando no micro mesa, mas porta tcp 3389 estiver fechada, o  serviço do xrdp  não será listado no scan do nmap feito remotamente, devido que a porta está fechada (a exibição ou não do resultado do scan remoto dependerá das regras do firewall ativas do micro remoto).

# nmap -sT mesa 

Starting Nmap 6.00 ( http://nmap.org ) at 2013-03-26 22:32 BRT 
Nmap scan report for mesa (192.168.1.101) 
Host is up (0.0087s latency). 
Not shown: 997 filtered ports 
PORT     STATE SERVICE 
139/tcp  open  netbios-ssn 
445/tcp  open  microsoft-ds

MAC Address: 00:25:22:67:4E:80 (ASRock Incorporation) 

Nmap done: 1 IP address (1 host up) scanned in 4.75 seconds

Teste de um micro Linux controlado um computador com Windows XP

Computador com Windows XP Profissional ou superiores podem acessar computadores Linux normalmente que utiliza o xrdp, visualizando todo o desktop do mesmo. 
O rdesktop também pode acessar desktop remoto nativo do Windows XP  ou superiores, pois o mesmo é compatível com o RDS do Windows.


Quando o acesso for feito ao Windows XP, o usuário que tiver logrado no sistema será deslogrado neste instante, indo  para a tela de logon do micro e caso o usuário do XP for o refazer o seu logon a conexão remota cairá, devendo esperar que a conexão remota termine primeiro antes de refazer o seu logon.
A visualização do desktop do Windows XP é em tempo real, mesmo o usuário sendo deslogrado  do desktop e indo para tela de logon, os programas que estavam abertos, continuarão abertos e serão visto remotamente na janela do rdesktop sabendo assim o que este usuário estava fazendo e após você fechar a conexão remota, se você não finalizou os programas que foram abertos remotamente, eles estão disponíveis assim que o usuário local refazer seu login.

Uma limitação do remoto desktop do XP é que o mesmo não suporta 24 bits sendo apenas 16 bits 

O acesso ao micro com  XP é executado em tela cheia pois é o padrão do servidor RDS do Windows, mas deslocando o mouse sob a parte superior da tela, ira aparecer uma pequena barra de títulos no topo com os botões das janelas, podendo minimizar a mesma, ou desativar o auto ocultar barra de título da janela.


Ativando o serviço de Desktop Remoto no Windows

Somente versões do Windows XP Profissional ou superiores possuem o serviço. As versões Home, Starter ou Basic não trazem o servidor RDS. 

Como ativar o RDS Windows XP 

No Windows XP Profissional com SP3, no Menu Iniciar, clique com o botão direito do mouse em Meu Computador e escolha Propriedades, acesse a guia Remoto.

Também pode ser feito em Meu Computador, escolha Exibir informações do Sistema.





Na guia "Remoto" marque "Permitir que usuários se conectem remotamente a este computador". Clique no botão "Selecionar usuários remotos", depois em "Adicionar", escreva o nome de algum usuário cadastrado no XP e OK para encerrar, pronto. O usuário selecionado deverá possuir uma senha no sistema, senão não será aceito. 


Usando o cliente do Windows XP para conectar a um computador com o serviço RDS ativo

Você pode usar o cliente RDP do Windows para conectar a qualquer outro computador Windows que estiver rodando o servidor RDS ou computadores Linux com o xrdp.

Menu Iniciar/Acessórios/Conexão de Área de Trabalho ou digitando diretamente na caixa Executar... o nome do programa mstsc.







Telas de um computador Linux acessando um computador Windows XP com RDS ativo




Será apresentada a caixa de autenticação do Windows XP para o acesso ao RDS




Nesta tela o computador Linux está controlando remotamente o computador Windows XP que usa um tema no estilo Windows 7.

Um detalhe é quando o acesso é feito ao Windows XP o usuário que estiver logrado no sistema automaticamente será desconectado, indo para tela de login quando o acesso remoto for aceito, independente se é ou não o usuário especificado do acesso, mas o desktop estará disponível para ser controlado remotamente assim mesmo. Caso o usuário do micro remoto faça o seu logon no Windows XP, o acesso remoto será desconectado.

Na tela abaixo, o acesso remoto foi feito especificando o usuário nando, mas que estava logrado no sistema era o usuário sonia, então surge esta mensagem de logon, mas a mesma mensagem não irá surgir quando for especificando o usuário nando e o mesmo estiver logrado no sistema, apesar de que ele será desconectado também quando a conexão remota for iniciada.



Computador XP controlando computador Linux

O cliente RDP do Windows XP, inicia sempre em fullscreen e para exibir uma pequena barra de títulos que se oculta automaticamente no meio do topo da tela é só deslocar o mouse para esta posição, podendo minimizar, restaurar a janela ou fechar a mesma.

Se você inseriu um pendrive no computador Linux e no cliente Windows para acessar o pendrive, você deverá se autenticar na caixa de janela que irá surgir assim que você clicar no ponto de montagem pelo gerenciador de arquivos gráfico usando a senha de administrador do sistema Linux (valido somente para desktop kde, gnome, xfce4, unity que são integrados ao udev).

Ao colocar uma mídia de DVD no drive de dvd, também deverá fazer a autenticação.

Já para imprimir um arquivo remotamente não é necessário fazer a autenticação.

Nota:
Uma vez que alguém já tenha acessado o seu computador remotamente usando um cliente RDP seja um computador Linux ou Windows, como o servidor Xvnc é executado no seu micro e sendo a conexão remota RDP encerrado, o servidor Xvnc continuará ativo, então a partir de qualquer micro da rede poderá ser conectar ao seu usando o cliente vncviewer para isto e deste que digite a senha de acesso do vnc e que existia o arquivo ./vnc/passwd

Diferente de uma conexão somente com o servidor vnc, o número da instancia do servidor Xvnc comandado pelo xrdp não começa com 1 neste caso e sim a partir do 10, sendo 11, 12... e assim sucessivamente para outros acessos realizados remotamente via RDP ao seu micro, pois cada acesso executa um novo processo do Xvnc. Neste caso especifico o acesso pelo vncviewer será como padrão em fullscreen e não precisa existir o arquivo ~/.vnc/xstartup para exibir o desktop remotamente (somente para desktop integrados ao udev, kde, gnome, xfce4 e unity).

Saída parcial do comando ps xa | grep vnc ao ser executado o servidor Xvnc devido ao acesso RDP

22391 ?        S      1:07 Xvnc :10 -geometry 1280x800 -depth 16 -rfbauth /home/nando/.vnc/sesman_nando_passwd -bs -ac -nolisten tcp 

Neste exemplo de cima o acesso ao computador Linux foi feito em um notebook com Windows XP que usa como padrão o fullscreen utilizando a mesma resolução de tela padrão configurada no sistema, já quando for o Linux acessando o padrão será sempre 800x600 a janela do rdesktop.


Ativando o RDS no Windows 7


Menu Iniciar “Painel de Controle/Sistema e segurança/Sistema" (ou clique com o botão direito em Meu computador e vá em Propriedades). Clique, no canto superior esquerdo da tela, em "Configurações remotas" e em "Assistência Remota" clique em "Permitir conexões de Assistência Remota para este computador". Abaixo, em "Área de trabalho remota" escolha, "Permitir conexões de computadores que estejam executando qualquer versão da Área de trabalho remota". Clique no botão "Selecionar usuário" para definir quais usuários do computador e pronto. 


Usando o cliente RDP

Menu Iniciar/Acessórios/Conexão de Área de Trabalho Remota ou digitando diretamente na caixa Executar... o nome do programa mstsc.


Cliente RDP do Windows 7 acessando um computador XP ou Linux

Quando o Windows 7 for acessar um computador remoto se o mesmo for uma versão antiga do Windows ou um computador Linux será exibido a seguinte aviso abaixo.



Apenas clique em Sim para continuar, logo a seguir virá a janela de autenticação do micro remoto e pronto.
Usando o cliente RDP do Windows 7 para conectar em um computador XP, o usuário que estiver ativo será deslogrado do sistema também assim como acontece com o rdesktop com o XP indo para a tela de logon de usuário, mas o desktop será visualizado e acessado normalmente. O usuário do Windows XP não pode fazer logon agora, pois se o fizer a conexão remota cairá.

No Windows 7 que está controlado o computador com XP, o padrão do cliente RDP é em fullscreen e para exibir uma pequena barra de títulos que se oculta automaticamente no meio do topo da tela é só deslocar o mouse para esta posição, podendo minimizar a janela, restaurar ou fechar a mesma.

No GNU/Linux  o cliente "rdesktop" suporta todas as versões de servidores RDS, incluindo XP/Windows 7 e 8 os quais foram utilizados nos testes.
Exemplo da linha de comando: rdesktop -5 -a 16 -g 1024x768 192.168.1.103 

A máquina que será acessada não pode ter um firewall bloqueando o RDS. 


Acesso remoto ao Windows 7 

Utilizando o acesso remoto ao Windows 7 sendo utilizando o servidor RDS padrão quando um outro micro seja Windows ou Linux se conectar ao mesmo, automaticamente o usuário que tiver logrado será jogado na tela de logon do Windows, não devendo este usuário refazer o seu logon até que seja permitido para não cair a conexão remota, devendo esperar que quem está controlando remotamente desative a conexão remota primeiro.

Na tela de logon remota será exibido:

Nando 
Conectado remotamente de netbook


Onde nando é o usuário remoto que está controlando o computador com Windows 7 remotamente, devendo existir este usuário cadastrado no Windows 7 para funcionar o acesso remoto e netbook é o nome do computador remoto que nando está usando para controlar o Windows 7.





Ativando o RDS do Windows 8

Ir e Meu computador e com o botão direito do mouse clique em Propriedades e na janela Sistema clique em Configurações remotas.
Neste instante irá aparece uma nova janela de autenticação com os usuários cadastrado do sistema, devendo escolher um usuário que tenha poder de administrador do sistema para ganhar acesso root e após surgirá a janela abaixo.



A opção Permitir conexões somente de computadores que esteja executando a Área de Trabalho Remoto com Autenticação no Nível de Rede (recomendável) deve está desmarcada para o acesso remoto funcionar, pelo menos com o uso do rdesktop que foi utilizando no teste.
Clique em Aplicar e depois em OK.

Ao fazer acesso remoto ao Windows 8 será apresentado a seguinte tela antes da autenticação.




Apenas clique em Ok, e escolha ou digite o nome do usuário desejado com poder de administrador do Windows 8.