Raspberry pi 3 *reverso* área de trabalho remota

Raspberry pi 3 *reverso* área de trabalho remota

Tenho máquina local (A) e Raspberry PI 3 (B).
B tem um monitor HDMI conectado e está executando o sistema operacional Raspbian.

Quero executar o aplicativo X em A - digamos, a apresentação do Libre Office Impress que tenho em A e torná-la visível (exibida) na tela conectada a B.
Quero fazer isso na frente da máquina A:

  • não por ssh -X to_Ade B,
  • nem usar VNC de B para obter saída de A

Eu não estou procurando:

  • Executando o aplicativo X em B usando ssh de A e tendo sua saída exibida em A (isso pode ser feito por from_a $ ssh -X machine_Bclientes rdp/remmina/vnc)
  • Executando o aplicativo X em B usando ssh de A e tendo sua saída exibida em B (isso pode ser feito exportando a exibição em ssh e configurando adequadamente o xhost, por exemplo from_a $ ssh machine_b from -> at_a_but_sshed_onto_b $ xhost + && export DISPLAY=:0 xeyes)
  • solução que requer acesso físico direto a B

O que eu tentei foi configurar (B) para executar itens X remotos... se não esqueci de nada - desde que nmap -p6000 machine_Bretornei essa porta éfechadoe executando (na linha de comando de A):

A_machine $ env DISPLAY=B_machine:0 xeyes

onde B_machine está configurado /etc/hostse também ~/.ssh/configfalha.

O que eu suspeito é que perdi totalmente a cópia do X11cookies_mágicosde .Xauthority...mas talvez esta etapa não seja necessária e exista uma maneira mais simples?

Editar: em resposta à pergunta de @Rostislav Kandilarov - parece que o lightdm inicia o servidor X, mas logo poderei verificar se é segunda-feira, bem como verificar se começa com --nolisten tcp.

Responder1

(Editado, resposta antiga abaixo)

Com o requisito adicional de que você deseja fazer tudo isso de A, sem tocar em B, o problema de executar um servidor X em B e conectar-se a ele com um aplicativo em A é que esse servidor X usará apenas dispositivos de entrada (teclado, mouse ) conectado a B. Portanto, para usar seu aplicativo, você teria que usar esses dispositivos de entrada, o que você não deseja.

Em princípio você poderia tentar compartilhar os dispositivos de entrada de A, mas então a construção realmente começa a ficar bizantina...

EntãoVNCébastantemais fácil nesta situação.

Configure um vnc4serverem A. Este servidor também atuará como servidor X para aplicativos em A. Inicie um xvnc4viewerem A e use-o para iniciar e controlar seu aplicativo. Inicie outro vncviewer em B e conecte-o ao servidor em A, ele exibirá o aplicativo. Pode ser tão simples quanto directvnc(usar o framebuffer do RaspPi diretamente, sem desvio adicional sobre o X, portanto, menos carga de trabalho para o RaspPi) ou se você quiser continuar executando um servidor X existente em B, outro xvnc4viewer.


A maneira mais fácil é usar uma área de trabalho remota comoVNC, provavelmente já disponível como pacote em sua distribuição. Isso geralmente funciona muito melhor do que o encaminhamento de X via ssh ou de outra forma, porque é muito melhor compactado e não usa primitivos X na conexão.

É claro que também existem várias maneiras de configurar o encaminhamento do X, por ssh ou diretamente. Por exemplo, você pode fazer login ssh -Xde B para A, executar seu aplicativo em A e exibir a saída em B. (Você descartou a direção inversa, mas não disse nada sobre esta, então não estou bem claro se você quiser isso).

Você também pode configurar o servidor X para uma sessão remota viaXDMCP. Ou faça com que um único aplicativo use um servidor X remoto usando as configurações xauthe adequadas DISPLAY.

Mas eu ainda recomendo tentar o VNC primeiro.

Responder2

Portanto, se você estiver usando o Raspbian OS em (B), se não tiver feito nenhuma personalização específica como suspeitava, provavelmente está usando lightdm .

Com certeza você precisa dizer ao lightdm para forçar o servidor X a ouvir o tcp (porta 6000). Você faz isso configurando xserver-allow-tcp=trueo arquivo conf na seção global [Seat:*]. Você também pode precisar especificar explicitamente xserver-command=X -listen tcp(dê uma olhadaaqui). A escolha é sua entre qualquer arquivo extra /etc/lightdm/lightdm.conf.d/*.confou diretamente no formato /etc/lightdm/lightdm.conf.

Em seguida, se você não se importa muito com a segurança, provavelmente também precisará executar em (B) alguma forma de xhost +comando como xhost + IP_OF_(A). Se você se preocupa com vulnerabilidades de LANvocê não deveriause diretamente X sobre tcp em primeiro lugar, mas sem ssh você pode dar um pouco de dureza trocando um MIT-MAGIC-COOKIE entre (A) e (B) executando em (B) xauth extract - $DISPLAY | ssh (A) xauth merge -.

Em seguida, reinicie o lightdm service lightdm restartou systemctl restart lightdm.servicedependendo da versão do seu sistema operacional.

Último - verifique em (B) se o Xorg está escutando em 6000netstat -antp | grep -F 6000

informação relacionada