{"id":796,"date":"2014-09-26T18:13:16","date_gmt":"2014-09-26T21:13:16","guid":{"rendered":"http:\/\/blog.abratel.com.br\/?p=796"},"modified":"2014-09-26T18:17:11","modified_gmt":"2014-09-26T21:17:11","slug":"executando-aplicacoes-graficas-remotamente","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=796","title":{"rendered":"Executando aplica\u00e7\u00f5es gr\u00e1ficas remotamente"},"content":{"rendered":"<p><strong>\u00cdndice de Conte\u00fado<br \/>\n<\/strong><br \/>\n    <strong>M\u00e9todo 1: X11 Forwarding via SSH<\/strong><br \/>\n        1.1. Configura\u00e7\u00e3o do servidor SSH<br \/>\n        1.2. Executando as aplica\u00e7\u00f5es<br \/>\n    <strong>M\u00e9todo 2: Conex\u00e3o X11 direta<\/strong><br \/>\n        2.1. Configura\u00e7\u00e3o do Cliente &#8211; DisplayManager<br \/>\n        2.2. Configura\u00e7\u00e3o do Cliente &#8211; Permiss\u00e3o<br \/>\n        2.3. Configura\u00e7\u00e3o do Cliente &#8211; Firewall<br \/>\n        2.4. Executando a aplica\u00e7\u00e3o<br \/>\n    <strong>M\u00e9todo 3: Utilizando o Windows como cliente<\/strong><br \/>\n        3.1. Xming X Server<br \/>\n        3.2. PuTTY + X11 Forwarding<br \/>\n        3.3. PuTTY + Conex\u00e3o X11 Direta<\/p>\n<p>Muitas instala\u00e7\u00f5es de servidores Linux t\u00eam como um requisito n\u00e3o instalar o ambiente gr\u00e1fico e seus programas. Isso \u00e9 bem plaus\u00edvel pelo fato de que quando voc\u00ea faz isso, voc\u00ea economiza no tamanho do banco de dados dos pacotes, no espa\u00e7o em disco, na ger\u00eancia e atualiza\u00e7\u00f5es destes pacotes, entre outros. E em um servidor, n\u00e3o ter uma interface gr\u00e1fica n\u00e3o \u00e9 t\u00e3o problem\u00e1tico, pois geralmente ningu\u00e9m fica na frente da tela utilizando a m\u00e1quina.<\/p>\n<p>Mas e se por acaso voc\u00ea quiser utilizar algum programa que s\u00f3 funciona atrav\u00e9s de uma interface gr\u00e1fica neste servidor? Isto \u00e9 o que acontece em alguns programas como por exemplo o banco de dados Oracle que possui uma interface gr\u00e1fica de instala\u00e7\u00e3o. Se o servidor n\u00e3o possui uma interface gr\u00e1fica, ent\u00e3o como instalar isso? Ou como utilizar esses programas?<\/p>\n<p>No Linux, o ambiente gr\u00e1fico (X11\/Xorg) possui a capacidade de executar aplica\u00e7\u00f5es gr\u00e1ficas remotamente. Isto quer dizer que eu posso executar algo em uma m\u00e1quina e as telas do programa podem aparecer em outra m\u00e1quina. No nosso caso isso seria muito \u00fatil, n\u00e3o? Se no meu servidor n\u00e3o existir uma interface gr\u00e1fica, eu posso utilizar a interface gr\u00e1fica do meu desktop cliente!<\/p>\n<p>Neste tutorial, vamos supor que tenhamos um servidor Linux que s\u00f3 \u00e9 acessado via SSH e temos um cliente que tamb\u00e9m \u00e9 Linux. Tamb\u00e9m temos como IPs:<\/p>\n<p>    IP do Servidor: 192.168.0.1<br \/>\n    IP do Cliente: 192.168.0.2<\/p>\n<p><strong>M\u00e9todo 1: X11 Forwarding via SSH<\/strong><\/p>\n<p>O SSH possui uma op\u00e7\u00e3o que cria um t\u00fanel e manda todas as conex\u00f5es gr\u00e1ficas diretamente por uma sess\u00e3o encriptada em SSH.<br \/>\n<strong>1.1. Configura\u00e7\u00e3o do servidor SSH<\/strong><\/p>\n<p>Para que os programas tenham seus pacotes enviados remotamente, o SSH precisa estar configurado para aceitar isso. A maioria das distribui\u00e7\u00f5es j\u00e1 deixam esta configura\u00e7\u00e3o feita, mas por via das d\u00favidas, logue-se via SSH no servidor como root, edite o arquivo \/etc\/ssh\/sshd_config e procure pela linha:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nX11Forwarding yes\r\n<\/pre>\n<p>Certifique-se de que esta op\u00e7\u00e3o esteja como \u201cyes\u201d (sim). Se estiver como n\u00e3o ou comentada, deixe como a linha acima. Feito isto, reinicie o servi\u00e7o de SSH com o seguinte comando:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\/etc\/init.d\/sshd restart\r\n<\/pre>\n<p>(Nota: Este comando acima pode mudar de distribui\u00e7\u00e3o para distribui\u00e7\u00e3o, apesar da maioria aceit\u00e1-lo. Se for o caso de n\u00e3o funcionar com voce, mude de acordo com a sua distribui\u00e7\u00e3o)<br \/>\n<strong>1.2. Executando as aplica\u00e7\u00f5es<\/strong><\/p>\n<p>Com a configura\u00e7\u00e3o do servidor SSH feita, basta apenas voc\u00ea executar a aplica\u00e7\u00e3o remotamente via um comando de ssh. Logue-se em um ambiente gr\u00e1fico da m\u00e1quina cliente e em um terminal utilize o comando:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n$ ssh -X -C usuario@192.168.0.1\r\n<\/pre>\n<p>Onde usuario \u00e9 o nome do usu\u00e1rio no servidor e o IP 192.168.0.1 corresponde ao IP do servidor. Com este comando voc\u00ea entrar\u00e1 na m\u00e1quina servidor via SSH e todo comando gr\u00e1fico que voc\u00ea executar estar\u00e1 sendo enviado via t\u00fanel SSH para a m\u00e1quina cliente:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n.\/aplicacao\r\n<\/pre>\n<p>Outra forma de executar aplica\u00e7\u00f5es remotamente \u00e9 atrav\u00e9s do pr\u00f3prio servidor X que oferece este tipo de suporte, com o transporte das telas das aplica\u00e7\u00f5es via conex\u00f5es TCP na porta 6000.<br \/>\n<strong>2.1. Configura\u00e7\u00e3o do Cliente \u2013 DisplayManager<\/strong><\/p>\n<p>Por padr\u00e3o em muitas distribui\u00e7\u00f5es, o servidor X vem desabilitado para acesso remoto (por quest\u00f5es \u00f3bvias de seguran\u00e7a). Ent\u00e3o a primeira coisa que voc\u00ea dever\u00e1 fazer \u00e9 habilitar esse acesso via TCP ao servidor X. Para saber se o seu servidor est\u00e1 aceitando conex\u00f5es TCP ou n\u00e3o, use o comando ps:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n$ ps ax | grep X\r\n2402 tty7     RLs+  11:28 \/usr\/bin\/X :0 -br -audit 0 -auth \/var\/gdm\/:0.Xauth -nolisten tcp vt7\r\n<\/pre>\n<p>No meu exemplo acima, o treco -nolisten tcp me diz que o servidor n\u00e3o est\u00e1 aceitando conex\u00f5es TCP. Se esta sua linha n\u00e3o tiver o par\u00e2metro -nolisten, ent\u00e3o provavelmente as conex\u00f5es j\u00e1 est\u00e3o liberadas.<\/p>\n<p>Se o seu estiver como no exemplo, voc\u00ea ter\u00e1 que mudar a configura\u00e7\u00e3o para que as conex\u00f5es sejam aceitas. Isto vai depender um pouco de qual distribui\u00e7\u00e3o e\/ou ambiente gr\u00e1fico voc\u00ea utiliza.<\/p>\n<p>No caso de utilizar o GDM (do projeto GNOME), edite o arquivo \/etc\/X11\/gdm\/gdm.conf (ou \/etc\/gdm.conf), procure a se\u00e7\u00e3o [Security] e configure a linha:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nDisallowTCP=false\r\n<\/pre>\n<p>Esta linha acima provavelmente estar\u00e1 com o valor true, ent\u00e3o mude para false para ele permitir as conex\u00f5es TCP. Em seguida reinicie o servidor X (pode ser deslogando-se ou apertando CTRL+ALT+BACKSPACE).<\/p>\n<p>No caso de utilizar o KDM (do projeto KDE), edite o arquivo \/etc\/kde\/kdm\/kdmrc (ou o kdmrc em outro lugar), procure pela seguinte linha:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nServerArgsLocal=-nolisten tcp\r\n<\/pre>\n<p>Achando esta linha, comente-a para que o -nolisten tcp n\u00e3o seja executado com o servidor X. Em seguida reinicie o servidor X (pode ser deslogando-se ou apertando CTRL+ALT+BACKSPACE).<\/p>\n<p><strong>2.2. Configura\u00e7\u00e3o do Cliente \u2013 Permiss\u00e3o<\/strong><\/p>\n<p>Com o cliente aceitando conex\u00f5es gr\u00e1ficas via TCP, falta agora permitir que o servidor possa conectar. Para fazer isso podemos usar o comando xhost. Ent\u00e3o no cliente, j\u00e1 logado na interface gr\u00e1fica com um usu\u00e1rio qualquer, use o comando da seguinte forma:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# xhost +192.168.0.1\r\n<\/pre>\n<p>No exemplo acima eu permiti que o servidor (IP 192.168.0.1) pudesse fazer conex\u00f5es gr\u00e1ficas na sess\u00e3o X do meu cliente. Lembrando que esta configura\u00e7\u00e3o se perde caso voc\u00ea se deslogue.<\/p>\n<p><strong>2.3. Configura\u00e7\u00e3o do Cliente \u2013 Firewall<\/strong><\/p>\n<p>Uma nota bastante importante: verifique se o cliente n\u00e3o est\u00e1 bloqueando o acesso do servidor via firewall. Se um firewall estiver ativo no cliente, certifique-se de que ele aceita conex\u00f5es vindas do IP do servidor, ou conex\u00f5es na porta 6000.<\/p>\n<p><strong>2.4. Executando a aplica\u00e7\u00e3o<\/strong><\/p>\n<p>Agora com tudo (ou quase tudo) configurado, \u00e9 hora de executar a aplica\u00e7\u00e3o no servidor e esperar aparecer a janelinha no cliente. Logue-se via ssh no servidor e primeiro digite:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n$ export DISPLAY=192.168.0.2:0\r\n<\/pre>\n<p>Onde o 192.168.0.2 \u00e9 o IP do cliente onde est\u00e1 a interface gr\u00e1fica. Esta vari\u00e1vel de ambiente DISPLAY \u00e9 quem diz aos programas gr\u00e1ficos onde jogar suas telas gr\u00e1ficas. Nesse caso, estamos dizendo para jogar na outra m\u00e1quina.<\/p>\n<p>Nota: O \u201c:0\u2033 depois do IP significa o \u201cdisplay\u201d do servidor remoto. Na maioria dos casos s\u00f3 h\u00e1 uma tela gr\u00e1fica nas m\u00e1quinas e o 0 sempre vai funcionar, mas como o servidor X tamb\u00e9m suporta v\u00e1rios ambientes gr\u00e1ficos rodando na mesma m\u00e1quina, este n\u00famero pode aumentar pra 1, 2, 3\u2026 dependendo de qual tela \u00e9. Na d\u00favida, use o 0. Se n\u00e3o funcionar, veja em que display executar vendo no comando ps apresentado mais acima.<\/p>\n<p>Configurada a vari\u00e1vel, basta apenas executar a aplica\u00e7\u00e3o:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n.\/aplicacao\r\n<\/pre>\n<p>Com isso as telas da aplica\u00e7\u00e3o (e s\u00f3 elas) dever\u00e3o aparecer no cliente!<\/p>\n<p><strong>M\u00e9todo 3: Utilizando o Windows como cliente<\/strong><\/p>\n<p>Vamos supor agora que voc\u00ea, triste e chorando, n\u00e3o tenha um cliente Linux com um ambiente gr\u00e1fico. Nesse caso, infelizmente voc\u00ea apenas possui uma m\u00e1quina com Windows. O que fazer?<\/p>\n<p>Calma, pra tudo h\u00e1 uma solu\u00e7\u00e3o! Para resolver este problema, voc\u00ea precisar\u00e1 de duas aplica\u00e7\u00f5es instaladas em seu Windows:<\/p>\n<p>    Xming X Server for Windows \u2013 http:\/\/sourceforge.net\/projects\/xming<br \/>\n    PuTTY \u2013 http:\/\/www.chiark.greenend.org.uk\/~sgtatham\/putty\/download.html<\/p>\n<p>O Xming \u00e9 um servidor X livre que vai funcionar como o Xorg no Linux e o PuTTY \u00e9 o cliente SSH para voc\u00ea acessar o servidor. Antes de come\u00e7ar o processo, estou supondo aqui que voc\u00ea leu as partes anteriores e sabe mais ou menos como funciona o processo de execu\u00e7\u00e3o remota.<\/p>\n<p><strong>3.1. Xming X Server<\/strong><\/p>\n<p>Instalando e executando o Xming X Server, um \u00edcone aparecer\u00e1 no systray. Enquanto este \u00edcone estiver l\u00e1, um servidor X estar\u00e1 funcionando localmente no display 0 (localhost:0), exatamente igual \u00e0 um Linux. Isto vai permitir que voc\u00ea execute aplica\u00e7\u00f5es dentro da interface do Windows.<\/p>\n<p><strong>3.2. PuTTY + X11 Forwarding<\/strong><\/p>\n<p>Para utilizar o mesmo processo de X11 Forwarding, uma vez baixado o PuTTY, execute-o e configure-o primeiro na se\u00e7\u00e3o Connection -> SSH -> X11, habilitando a op\u00e7\u00e3o X11 Forwarding.<\/p>\n<p>Feito isto, conecte normalmente a sess\u00e3o SSH ao servidor e toda aplica\u00e7\u00e3o gr\u00e1fica executada ir\u00e1 mandar as telas via o t\u00fanel encriptado SSH.<br \/>\n<strong>3.3. PuTTY + Conex\u00e3o X11 Direta<\/strong><\/p>\n<p>Como o servidor Xming j\u00e1 est\u00e1 configurado para receber as conex\u00f5es diretas X11, basta apenas voc\u00ea acessar o servidor via SSH com o programa PuTTY e fazer o mesmo que o passo 2.4.<br \/>\n&#8211; See more at: http:\/\/www.devin.com.br\/aplicacoes-graficas-remotas\/#sthash.prHqwLrF.dpuf<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00cdndice de Conte\u00fado M\u00e9todo 1: X11 Forwarding via SSH 1.1. Configura\u00e7\u00e3o do servidor SSH 1.2. Executando as aplica\u00e7\u00f5es M\u00e9todo 2: Conex\u00e3o X11 direta 2.1. Configura\u00e7\u00e3o do Cliente &#8211; DisplayManager 2.2. Configura\u00e7\u00e3o do Cliente &#8211; Permiss\u00e3o 2.3. Configura\u00e7\u00e3o do Cliente &#8211; Firewall 2.4. Executando a aplica\u00e7\u00e3o&#8230;<\/p>\n","protected":false},"author":1,"featured_media":798,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/796"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=796"}],"version-history":[{"count":2,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/796\/revisions"}],"predecessor-version":[{"id":799,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/796\/revisions\/799"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/media\/798"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}