Estou tentando executar a gedit
partir de um terminal SSH no Windows, conectado a uma instância do Amazon EC2 executando o Ubuntu 12.04 Server e estou recebendo este erro:
Cannot open display:
Como faço para corrigir isso?
Estou tentando executar a gedit
partir de um terminal SSH no Windows, conectado a uma instância do Amazon EC2 executando o Ubuntu 12.04 Server e estou recebendo este erro:
Cannot open display:
Como faço para corrigir isso?
Respostas:
Como você está usando o Windows do seu lado, precisará de um cliente SSH que execute um servidor X local no Windows para executar aplicativos gráficos do servidor remotamente na tela.
Por experiência, eu recomendaria o MobaXTerm gratuito, que tem essa funcionalidade embutida. Faça o download e experimente:
Se você receber algum erro, é porque às vezes uma imagem mínima do servidor pode não estar configurada para permitir o encaminhamento de X para ela. Nesse caso, por favor, comente e eu ajudarei você a resolvê-lo; Eu fiz isso com muitos VPSs mínimos executando o Ubuntu / Debian.
Então você está se conectando do seu PC doméstico (vamos chamá-lo de sua máquina ) a um servidor (vamos chamá-lo de servidor ) via ssh ? Deseja iniciar um programa com uma janela gráfica no servidor via sua máquina? Se isso estiver correto, continue lendo.
Vamos chamar o programa para começar, gedit
mas o processo é o mesmo para todos. Dependendo de onde você deseja ver a janela gráfica, pule para o cabeçalho direito.
Se você deseja ver e usar a janela do gedit na sua máquina remota, mas iniciar no servidor, sua sessão do shell deve ficar 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 importe com os avisos, eles são normais - a janela do gedit aparecerá na tela da sua máquina remota, como seria no servidor. O truque é usar a opção "-X" como na ssh -X
qual habilita o tunelamento X e ajusta a DISPLAY
variável à direita.
Isso pressupõe que você esteja usando um cliente SSH compatível com X11 e que seu servidor tenha um servidor X em execução (alguns sem a necessidade de GUIs não executam um servidor X). Especialmente no Windows, isso pode ser um problema, pois a maioria dos programas de terminal do Windows não possui X. Como a izx afirmou, o MobaXTerm é um dos muitos clientes SSH para Windows que possui um X-Server.
No entanto, para um servidor sem o X11, é necessário instalá-lo.
Você também pode iniciar uma instância na tela do seu servidor chamando gedit assim:
ssh user@server
DISPLAY=:0.0 gedit
Você precisa substituir o valor correto em vez de :0.0
colocá-lo na tela X correta (importante apenas 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 isso não funcionar seria se o servidor não possuísse um servidor X11, mas não tivesse um monitor conectado a ele ou nenhuma interface gráfica do usuário e você não estivesse lendo isso: D.
Não sou especialista nisso, mas a maneira que eu acho que funciona é que cada tela física, ou seja, cada monitor conectado a um computador individual recebe um número de 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 Unity, Gnome, 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. * Em seguida, cada computador configurado para disponibilizar suas telas e executar um servidor X possui um nome de host. Você pode usar telas de hosts de qualquer máquina na mesma rede, configurando sua DISPLAY
variável de acordo com DISPLAY=hostname:0.0
. O Ssh faz isso por você de maneira sensata, se você fornecer a -X
opção.
* Nota: Suponho que exista uma maneira melhor do que esse loop for.
Use um editor de texto do shell. vi
, vim
, nano
E emacs
são a mais comum e, pelo menos, um deles vai ser instalado e operacional. Deles nano
é o mais fácil e mais auto-explicativo.
for
loop um pouco ... agora ele mostrará apenas o endereço de exibição, por exemplo :0
:0.0
. Sinta-se livre para voltar, se você acha que não é o que você quer ..
Basicamente, você tem um terminal através do SSH e o Gedit é um programa GUI. A resposta do con-f-use o fará funcionar a partir de uma sessão do cliente Linux GUI.
A outra opção seria usar um editor que não seja da GUI, como o nano, o Vi ou vários outros.