Execute o aplicativo na máquina local e mostre a GUI no visor remoto

35

É possível executar um aplicativo na área de trabalho local, mas exibir a GUI no meu laptop (X remoto)?

Gostaria de saber se é possível emular uma configuração de monitor duplo usando 2 máquinas conectadas à LAN distintas.

Instalei a sinergia e posso controlar facilmente meu laptop com o teclado / mouse da área de trabalho, mas também gostaria de executar algo na área de trabalho e exibir a GUI na tela do laptop.

Pela minha experiência limitada com o X, sei que posso executar um programa em uma máquina remota e usar a exibição do primeiro para mostrar a saída, mas não o contrário.

Qualquer ponteiro seria de grande ajuda. Obrigado

PS executando o XFCE 4.10 no Ubuntu 12.10

Vlad Balmos
fonte

Respostas:

39

Variante A - Tirar X do Windows para outro DISPLAY:

  1. Certifique-se de que o Xserver no seu laptop comece a ouvir conexões tcp. Infelizmente, a rede X11 está desativada por padrão na maioria das distribuições. Como o Xserver é iniciado pelo seu gerenciador de exibição (gdm, lightdm), isso deve ser configurado lá:

    Qualquer que seja o gerenciador de exibição que você use, algum arquivo de configuração em / etc / provavelmente conterá o parâmetro XServer responsável. Execute grep -r 'nolisten tcp' /etc/no seu laptop para descobrir qual arquivo de configuração é responsável e remova a parte onde diz -nolisten tcp(não a linha inteira, apenas esse parâmetro). Reinicie o X no seu laptop.

    O seu laptop agora deve ter um monitor em execução na porta 6000 do TCP (tente executar nmap -p6000 Laptopno seu PC de mesa, se a porta estiver "aberta", você chegou até aqui).

  2. Disponibilize seu monitor X para o computador desktop. O X11 usa um mecanismo de autenticação para conceder acesso a uma exibição. Você precisa permitir que o PC de mesa ative o Windows no laptop. Normalmente trocando um cookie de exibição.

    Para iniciantes, execute esta etapa com as mãos no seu notebook. Depois de obter o conceito com a DISPLAYvariável e tudo, você pode fazer isso via ssh.

    Rápido e sujo: você pode executar xhost +desktops.computers.ip.addressno seu laptop para conceder acesso ao X do computador desktop. Observe que todo usuário no computador laptop pode usar a tela X desse modo. Observe que isso é suficiente, ou seja, para instalar um keylogger na tela do seu laptop. Use este método apenas para teste.

    Correto e seguro: execute xauth extract cookie-file :0no seu laptop para exportar o seu segredo de acesso à tela para "arquivo de cookie". Transfira o cookie para sua máquina Desktop. Corra xauth merge cookie-file. Ou em uma pequena etapa (na área de trabalho) ssh Laptop xauth extract - :0 |xauth merge -Nota: se o laptop e a área de trabalho estiverem compartilhando um diretório pessoal, ou seja, via nfs, você não precisará trocar credenciais. O banco de dados de credenciais é o arquivo .Xauthority em seu diretório pessoal e pode ser compartilhado entre máquinas diferentes.

  3. Execute o programa: Em um terminal do seu PC de mesa export DISPLAY=Your.Laptops.IP.Address:0, execute qualquer programa X no mesmo terminal. Ele deve aparecer na tela do notebook.

Variante B - Usando SSH com uma torção.

O SSH realiza o encaminhamento do X11 encaminhando um soquete X11 local (normalmente um soquete de domínio Unix) para um soquete TCP local na máquina remota, negociando o cookie de exibição e definindo o ambiente de exibição na máquina remota. Dessa forma, todo o tráfego X11 é criptografado no túnel ssh. O caso de uso normal é encaminhar a exibição local para a máquina remota (ou seja, permitir que aplicativos remotos exibam x janelas localmente).

A vantagem de usar o ssh é que você não precisa colocar seu X-Server no modo de escuta tcp (uma vez que o soquete unix é usado). E o ssh lida com a troca de credenciais.

  1. SSH para o seu laptop a partir do seu computador desktop (você ainda não precisa usar -X).
  2. No shell remoto, digite export DISPLAY=:0isto torna a exibição em execução no seu notebook disponível para o shell que você recebeu via ssh. Se você executar qualquer comando X agora, ele já aparecerá na tela do notebook, mas ainda será executado no laptop (tente ser seguro).
  3. Nesse shell ssh de volta ao seu computador desktop, use -X desta vez. Agora você tem um shell na máquina na qual a sessão ssh se originou, mas desta vez trabalhando com o X. Execute xeyes ou xcalc para testá-lo.
  4. echo $DISPLAYmostra a designação que seu laptop X exibe agora no seu computador desktop. Ou seja: 10 ou: 11.
  5. Você pode minimizar o terminal agora. Sempre que você digitar export DISPLAY=:10(ver qual o número de exibição que você obteve) no seu computador desktop agora, cada programa executado posteriormente no mesmo shell aparecerá na tela de seus cadernos.

    Essa variante é fácil, mas lenta, pois todo o tráfego X11 é encaminhado via SSH.

Variante C - O conceito original de thinclient:

Você pode usar seu laptop para abrir uma sessão da área de trabalho em execução inteiramente no seu computador.

  1. Configure o gerenciador de exibição na área de trabalho para responder às transmissões do XDMCP. Como fazer isso depende do seu gerente de exibição. Alguns gerentes de exibição não suportam isso, ou seja, são pequenos. XDM, KDM, WDM, GDM o suportam.

  2. Inicie um X-Server no seu laptop, que solicita o gerenciador de exibição da área de trabalho. Um X: aninhado Xephyr :1 -query desktopou Xephyr :1 -broadcast Ou desligando o seu X-Server de Notebooks e entrando em um Terminal do Sistemasudo Xorg :0 -broadcast

    O gerente de exibição cuidará para que as credenciais sejam geradas e trocadas e tudo mais. Parabéns, agora você deve ver uma janela de login fornecida pelo seu computador desktop.

Paul Hänsch
fonte
2
Entre. Toda essa maravilhosa funcionalidade X11 simplesmente deixará de funcionar quando o Ubuntu mudar para Wayland. Os aplicativos de wayland nativos não podem mais ser encaminhados via ssh.
Paul Hänsch
6
Não é irônico que não exista cadeia de ferramentas gráficas para controlar seu X-Server? Se você realmente deseja trabalhar com GUIs, deve dominar a linha de comando primeiro.
Paul Hänsch
Dica geral: O primeiro programa que você pode iniciar no monitor remoto é o iniciador de aplicativos. Ou seja, lxpanel ou algo assim. Isso economiza muito trabalho na linha de comando.
Paul Hänsch
Isso ainda funciona para o Ubuntu 17's + ... ou a previsão de Wayland aconteceu?
Xen2050
19

Você pode usar o encaminhamento ssh X para atingir seu objetivo. Se você estiver na mesma sub-rede, saia rapidamente.

Instale o servidor e o cliente ssh no seu laptop e PC de mesa

sudo apt-get install ssh

Para conectar ao PC de mesa, abra um terminal no laptop e digite o seguinte

ssh -X username@desktop_pc_ip

E você pode iniciar qualquer software usando o terminal, por exemplo, iniciando o Firefox, basta digitar firefoxo terminal.

OHLÁLÁ
fonte
2
Não se esqueça de verificar se os arquivos de configuração do sshd (geralmente / etc / ssh / sshd_config) também têm o X11Forwarding definido como yes.
Matrix Mole
Aqui está o meu caso de uso: estou na minha área de trabalho e abro o Firefox, por exemplo, mas quero que a janela do navegador seja aberta na tela do meu laptop e ainda funcione na minha área de trabalho. Eu estou procurando uma funcionalidade semelhante para os espaços de trabalho, mas em vez de um espaço de trabalho local (4 telas no mesmo PC) para usar um espaço de trabalho remoto (o laptop)
Vlad Balmos
2
Além disso, você pode experimentar o x2xpacote, pode usar um teclado e mouse em uma máquina diferente. ex:ssh -X user@host x2x -west -to :0
OHLÁLÁ
@iUngi i já estou usando sinergia para que, graças qualquer maneira
Vlad Balmos
Esteja ciente de que, ao abrir o acesso ao servidor X da área de trabalho, você está dando amplo acesso à máquina remota. Se o seu servidor estiver comprometido, isso também poderá ser usado na sua área de trabalho. O encaminhamento do X11 é útil, mas pense no que está fazendo e não ative-o por padrão.
mc0e
7

Preparação

(você faz isso apenas uma vez)

Na sua área de trabalho, instale o servidor SSH

sudo apt-get install openssh-servidor


Do seu laptop:

ssh -X nome de usuário @ desktop_pc_ip

No terminal, você obtém tudo o que você executa na área de trabalho, mas é exibida no laptop. Se você quiser fazer o mesmo sentado na área de trabalho (e enviar janelas no seu laptop), continue.

No seu terminal você corre

echo $ DISPLAY

Isso mostrará algo como:

localhost:10.0

Na área de trabalho:

Abra um terminal e execute

DISPLAY=:10.0 firefox

Isso deve enviar uma firefoxjanela no seu laptop, mas em execução na área de trabalho. Certifique-se o número que você colocar (por exemplo 10.0) é o mesmo que no echoresultado

Nick Andrik
fonte
3

Você está usando uma combinação de SSH e tela para obter a situação que deseja.

Na área de trabalho, instale a tela:

tela de instalação do sudo apt-get

A partir daí, inicie uma nova sessão de tela:

tela

e abra o firefox nele:

Raposa de fogo

Use o firefox tudo o que quiser na área de trabalho e, em seguida, faça o ssh no seu computador a partir do seu laptop:

ssh -X nome de usuário @ hostname

Digite o seguinte comando para ver quais sessões de tela você está executando:

tela -ls

Entre na sua sessão de tela (1234 seria o número que a tela lhe deu)

tela -x 1234

Então você pode usar o Firefox no seu laptop e fechar o terminal na sua área de trabalho.

user530873
fonte
tentei isso. abri a tela do terminal, iniciei o firefox na área de trabalho, depois sshed do laptop para a área de trabalho, anexei a sessão de tela, mas não vejo nenhuma janela no laptop, apenas a saída do programa em execução na tela.
22712 Vlad Balmos
Você estava misturando tudo. Espere ... pelo menos um de vocês fez. Instale a tela no seu computador desktop, use o notebook na ssh -Xárea de trabalho, inicie a tela na sessão ssh, desconecte-a e deixe a sessão em execução. Em seguida, reconecte a sessão da tela com as mãos no seu computador desktop e execute algo. Isso é semelhante à minha resposta "SSH com um toque". Usar a tela o torna um pouco mais conveniente.
Paul Hänsch
3

O Virtualgl criará uma área de trabalho (em segundo plano) extra ( estilo TightVNC) que você pode acessar por meio de um cliente VNC turbo . Ele funcionará como um negócio do tipo área de trabalho remota -> Mas reproduzirá um vídeo suave em uma rede.

Se você está procurando uma maneira de descarregar a sobrecarga da CPU para uma conexão remota, para poder executar aplicativos do seu computador no laptop, é o que eu faria.

http://www.virtualgl.org/

Você também pode exportar o ambiente de área de trabalho através do SSH como / cara acima mencionado.

TardisGuy
fonte
Obrigado. Parece promissor. Vou dar uma olhada e mantê-lo informado.
Vlad Balmos
Sim, "TurboVNC" (mais o seu componente VirtualGL) é o resultado da minha pesquisa por um programa de área de trabalho remota que me permitisse jogar videogames e filmes. Funcionaria facilmente como um monitor extra.
TardisGuy
1

Depois de mais algumas escavações online, vim através do DMX

A partir da página inicial

O Xdmx é um servidor proxy X que fornece suporte de várias cabeças para vários monitores conectados a máquinas diferentes (cada uma executando um servidor X típico). Quando o Xinerama é usado com o Xdmx, os vários monitores em várias máquinas são apresentados ao usuário como uma única tela unificada.

Vlad Balmos
fonte
1
essa seria uma resposta melhor se você puder dar instruções sobre como instalar e usar.
fossfreedom
O XmetaX fornece funcionalidades semelhantes. Existe alguma alternativa ao Xdmx e XmetaX?
Mariusz
1

Sim, é possível. Estou usando o computador linux com o xclock instalado no computador local. Estou tentando executar o xclock localmente e mostrar o relógio no computador linux remoto.

reboot the remote machine
Disable firewall
Disable SELINUX
Check $DISPLAY variable value by command
echo $DISPLAY
Let say its value is :1
run command
xhost +

Now on local computer
xclock -display remote_machine_IP_address:1
Mian Asbat Ahmad
fonte