Executando Aplicações X11 remotas por ssh

Tags: , , — July 3, 2008 @ 2:24 pm

Já pensou na possibilidade de executar seus programas preferidos, instalados em seu computador de casa, a partir de seu computador do trabalho? Não apenas executar o mesmo programa, mas sim com todas as configurações, local de execução e acesso aos arquivos de seu pc de casa, sem precisar ter o mesmo programa instalado no trabalho.

O SSH, ou Secure Shell, é um aplicativo Unix que permite acesso remoto, por terminal, a outros computadores. Porém, o proŕio SSH tem uma opção de tunelar o X Server, possibilitando a execução de aplicativos X11 remotos.

Já a algum tempo eu sabia que era possível fazer esse tunelamento para executar aplicativos X remotos por ssh, mas ainda não havia pesquisado a respeito. Foi então que ontem me surgiu a idéia de rodar os programas que tenho no trabalho (principelmente o Eclipse IDE) para desenvolver a partir de casa, sem precisar copiar todos os fontes ou montardiretórios remotos, e então acabei me surpreendendo com a facilidade disto.

A maioria dos usuários GNU/Linux devem estar acostumados a acessar máquinas remotas por ssh, com comandos como:

ssh user@server.com

ou

ssh -p 22 -l user 192.168.1.1

Nos exemplos acima exibo dois modos básicos para conexões com ssh. a opção -p é necessária apenas caso o servidor remoto ou cliente nãoestejam usando portas padrões para o SSH, a opção -l serve para definir o usuário a logar no servidor remoto, sendo necessário apenas quando os nomes de usuários no servidor e cliente não coincidem, e é equivalente a utilizar user@ antes doendereço do servidor, que pode ser um endereço de ip, ou um nome de domínio.

Agora, para tunelar o X server basta adicionar a opção -X a linha de comando:

ssh -p 22 -l user -X 192.168.1.1

Assim, uma vez conectado ao servidor remoto, basta executar qualquer aplicação normalmente, que as janelas destas gerão criadas em sua máquina local. Veja o screenshot de exemplo:

Aplicações X remotas, rodando através de ssh -X lBreackout2 e Wine Notepad

No primeiro screenshot acima, estão sendo executados localmente (em meu computador de trabalho)  o terminal, com a sessão ssh aberta, o monitor de sistema GKrellm (a direita), o gerenciador de arquivos Thunar, e a calculadora Galculator, acima da qual está um outra calculadora sendo executada a partir do computador remoto (meu laptop, em casa, conectado através de uma rede sem fio de longa distância), note a diferença no tema do GTK2, e mais acima está o aplicativo Eye of Gnome, o qual tenho instalado apenas no Notebook.

No segundo Screenshot estou executando o jogo lBreakout2 e o Wine Notepad (um clone do editor Notepad do windows, para Wine), demonstrando como é possível rodar praticamente qualquer aplicativo remoto, é possivel inclusive executar um gerenciador de janelas ou desktop inteiramente.

Diferente do VNC, que geralmente se conecta a uma sessão X existente, o tunelamento do X sob ssh envia os aplicativos executados para a sessão X existente na máquina cliente (ou seja, não invade a privacidade de quem estiver utilizando a máquina remota).

Infelizmente o ssh não possibilita tunelar sons reproduzidos por aplicativos X, assim se vc executar um player de mídia, quem irá acabar ouvindo é quem estiver perto do servidor remoto. Aplicativos que exijam OpenGL ou outras bibliotecas gráficas podem não ser executados corretamente também.

Fonte: http://www.vanemery.com/Linux/XoverSSH/X-over-SSH2.html

Se você gostou deste artigo, inscreva-se em meu RSS feed!

Teclas Multimedia no X

Tags: , , , — June 8, 2007 @ 11:13 am

Muitos usuários GNU/Linux podem ter problemas com com teclados multimedia, onde as teclas não funcionam no ambiente X. Com os passos a seguir você poderá facilmente configurar seu teclado multimedia para as funções que desejar.

O problema do não conhecimento das teclas multimedia é que o servidor X não reconhece os códigos das teclas (keycodes) quando pressionados, então devemos configurar esses códigos corretamente, para isso, obtenha os códigos usando aplicativo ‘xev’.

Apenas execute o comando ‘$ xev‘ no terminal. Ao executá-lo, basta pressionar as teclas desejadas e obter o keycodes destas, a saída no terminal será mais ou menos como esta:

KeyRelease event, serial 31, synthetic NO, window 0×2800001,
root 0×7d, subw 0×0, time 2792224, (-22,86), root:(565,101),
state 0×10, keycode 160, same_screen YES,
XLookupString gives 0 bytes:

O valor ‘keycode’ é o que precisamos, neste exemplo, o keycode é 160. Para facilitar use o script a seguir:

xev | grep keycode | \
sed s/”^.*keycode *\([0-9]\+\).*$”/”keycode \1 = “/ | uniq

Execute os comandos e pressione em sequência as suas teclas multimedia e, após fechar o aplicativo xev você verá uma saída como a seguir:

keycode 36 =
keycode 144 =
keycode 162 =
keycode 164 =

Algumas vezes, como neste exemplo, você obterá um primeiro keycode que não é uma tecla multimedia, simplesmente a remova. Se você tiver obtido os keycodes na corretamente na saída, como acima, poderá prosseguir com a configuração dos keysyms no X, caso contrário veja a seguir.

Caso seu você não obtenha nenhuma saída no terminal após executar o xev, execute o comando ‘$ dmesg‘ no terminal. Você deverá ver algo como isto na saída:

atkbd.c: Unknown key released (translated set 2, code 0×96 on isa0060/serio0).
atkbd.c: Use ’setkeycodes e016 <keycode>’ to make it known.

Isso significa que seu kernel não possui keycodes mapeados dos ’scancodes’ de seu teclado. Assim você deverá adicionar uma linha no seu arquivo ‘/etc/rc.local‘ pra cada keycode que deseja adicionar, como a seguir:

Arquivo ‘/etc/rc.local’

setkeycodes e008 136
setkeycodes e016 150
… e assim por diante …

Onde o primeiro número (e008) é o que você vê no dmesg, e o segundo é um keycode não utilizado no seu kernel. Geralmente você pode obter keycodes válidos obtendo os últimos dois dígitos do primeiro número, converter de hexadecimal para decimal e adicionando 128.

Isto vai adicionar corretamente os keycodes a partir dos scancodes do teclado na inicialização do sistema, para adicioná-los sem reiniciar o sistema apenas rode ‘sh /etc/rc.local‘ no terminal. Depois disso, reinicie o X e tente usar o xev novamente.

Agora você precisará criar um arquivo que relacione os keycodes obtidos com sinais de teclas, ou keysyms. Crie um arquivo chamada ~/.Xmodmap e adicione as linhas como a seguir:

! Configuracoes de Teclas multimedia no X
! Use ! for comments

keycode 176 = XF86AudioRaiseVolume
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext

Uma lista com os keysyms possíveis pode ser encontrada no arquivo ‘/usr/share/X11/XKeysymDB‘, este é o caminho do arquivo no Debian, podendo variar em outras distribuições, relacione corretamente os keycodes obtidos com os respectivos keysyms (as linhas acima são apenas um exemplo, os códigos podem variar).

Agora adicione o comando a seguir no final de seu ~/.xinitrc, ou crie o arquivo, caso não exista:

/usr/bin/xmodmap ~/.Xmodmap

Caso deseje que os keysyms sejam carregados na sessão de qualquer usuário, adicione o comando acima no final de seu ‘/etc/X11/xinit/xinitrc‘ e mude o diretório do arquivo (como ‘/usr/bin/xmodmap /etc/X11/xinit/Xmodmap‘).

Depois disse, para definir funções para as teclas multimedia, basta adicionar os atalhos e funções correspondentes nas configurações de seu Gerenciador de Janelas.

Enlightement DR17

Painel de Controle -> Teclado -> Keybindinds

Xfce4

Settings Manager -> Teclado -> Atalhos

KDE

Painel de Controle -> Regional e Acessibilidade -> Atalhos do Teclado
ou no Kmix: Configurações -> Configure GlobalShortcuts

Fonte: http://gentoo-wiki.com/HOWTO_Use_Multimedia_Keys#Setting_up_xmodmap

Se você gostou deste artigo, inscreva-se em meu RSS feed!