Então você está se conectando a partir do seu pc de casa (vamos chamar sua máquina ) para um servidor (vamos chamá-lo de servidor ) via ssh ? Você quer iniciar um programa com uma janela gráfica no servidor através de sua máquina? Se isso estiver correto, então continue lendo.
Vamos chamar o programa para iniciar gedit
, mas o processo é o mesmo para todos. Dependendo de onde você deseja ver a janela gráfica, pule para a direção correta.
Janela na tela da sua máquina
Se você quiser ver e usar a janela do gedit em sua máquina remota, mas iniciar no servidor, você desejará que sua sessão do shell fique assim:
user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases
** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme
(gedit:7851): Gtk-WARNING **: Attempting to store changes
Não se preocupe com os avisos, eles são normais - a janela do gedit irá aparecer na tela da sua máquina remota como seria no servidor. O truque é usar a opção "-X" como em ssh -X
, que permite o tunelamento X e define a variável DISPLAY
.
Isso pressupõe que você esteja usando um cliente SSH que suporte o X11 e que seu servidor tenha um X-server em execução (alguns sem a necessidade de GUIs não executarem um X-server). Especialmente no Windows, isso pode ser um problema, já que a maioria dos programas terminais do Windows não tem X. Como izx declarou o O MobaXTerm é um dos muitos clientes SSH para Windows que possui um X-Server.
Para um servidor sem o X11, você deve instalá-lo.
Na tela do servidor
Você também pode iniciar uma instância na tela do seu servidor chamando gedit assim:
ssh user@server
DISPLAY=:0.0 gedit
Você tem que substituir o valor correto em vez de :0.0
para obtê-lo na tela X direita (só é importante se várias telas estiverem conectadas ao seu servidor ou se for algo peculiar em sua configuração).
Aqui, o cenário mais comum para que isso não funcione seria se o servidor não tivesse um X11-Server, mas não tivesse um monitor conectado a ele ou não tivesse uma interface gráfica com o usuário e você não estivesse lendo isto: D.
Um pouco de teoria
Não sou especialista nisso, mas a maneira como penso que funciona é que cada tela física, ou seja, cada monitor conectado a um computador individual recebe um número em execução na forma de 0.0
, 1.0
, 2.0
, ...
Este número é atribuído pelo X-Window-System, também conhecido como X11. Essa é uma camada para fornecer uma rede e uma interface gráfica básica que o Unity, o Gnome, o KDE e similares podem construir.
Você pode ver quantos monitores uma determinada máquina possui e quais números estão em uso executando for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done
na máquina em questão. * Então, cada computador configurado para disponibilizar suas telas e executar um servidor X tem um nome de host . Você pode usar telas de hosts de qualquer máquina na mesma rede definindo sua variável DISPLAY
de acordo com DISPLAY=hostname:0.0
. O Ssh faz isso para você de uma maneira sensata, se você fornecer a opção -X
.
* Nota: Suponho que exista uma maneira melhor do que este for-loop.
Se tudo mais falhar
Use um editor de texto shell. vi
, vim
, nano
e emacs
são os mais comuns e pelo menos um deles será instalado e operacional. Deles nano
é o mais fácil e mais auto-explicativo.