web-dev-qa-db-ja.com

Raspberry pi 3 *リバース*リモートデスクトップ

ローカルマシン(A)とRaspberry Pi 3(B)があります。
BにはHDMIモニターが接続されており、RaspbianOSを実行しています。

XアプリケーションをAで実行したい-たとえば、AにあるLibre Office Impressプレゼンテーションを、Bに接続された画面に表示(表示)します。
Aマシンの前でそれをやりたい:

  • bからのssh -X to_Aによるものではなく、
  • また、BからVNCを使用してAから出力を取得することもありません

私は探していません:

  • Aからのsshを使用してBでXアプリを実行し、その出力をAに表示します(これは、from_a $ ssh -X machine_Bまたはrdp/remmina/vncクライアントのいずれかで実行できます)
  • Aからのsshを使用してBでXアプリを実行し、その出力をBに表示します(これは、sshで表示をエクスポートし、xhostを適切に構成することで実行できます(例:from_a $ ssh machine_b from -> at_a_but_sshed_onto_b $ xhost + && export DISPLAY=:0 xeyes))。
  • bへの直接の物理的アクセスを必要とするソリューション

私が試したのは、リモートXアイテムを実行するためのセットアップ(B)でした...何も忘れていない場合-nmap -p6000 machine_Bがそのポートを返したのでclosed、そして実行中( Aのコマンドラインから):

A_machine $ env DISPLAY=B_machine:0 xeyes

ここで、B_machineは/etc/hostsに設定されており、~/.ssh/configは失敗します。

私が疑うのは、.XauthorityからX11magic_cookiesをコピーする手順を完全に見逃していることです...しかし、この手順は必要ないかもしれませんし、もっと簡単な方法があります仕方?

編集:@Rostislav Kandilarovの質問への回答-lightdmがXサーバーを起動しているように見えますが、すぐに月曜日を確認し、--nolisten tcpで始まるかどうかを確認できるようになります。

3
JustMe

(編集済み、以下の古い回答)

Bに触れずにAからこれらすべてを実行するという追加の要件があるため、BでXサーバーを実行し、Aのアプリケーションで接続する場合の問題は、このXサーバーが入力デバイス(キーボード、マウス)のみを使用することです。 )Bに接続されています。したがって、アプリケーションを使用するには、これらの入力デバイスを使用する必要がありますが、これは不要です。

原則として、Aからの入力デバイスを共有しようとすることもできますが、その後、構造は実際にビザンチンになり始めます...

したがって、 [〜#〜] vnc [〜#〜] は、この状況でははるかに簡単です。

Aでvnc4serverを設定します。このサーバーは、AでアプリケーションのXサーバーとしても機能します。Aでxvnc4viewerを起動し、それを使用してアプリケーションを起動および制御します。 Bで別のvncviewerを起動し、Aのサーバーに接続すると、アプリケーションが表示されます。 directvncのように単純にすることも(RaspPiのフレームバッファーを直接使用し、Xを迂回する必要がないため、RaspPiの作業負荷が少なくなる)、またはBで既存のXサーバーを実行し続ける場合はxvnc4viewer


最も簡単な方法は、 [〜#〜] vnc [〜#〜] のようなリモートデスクトップを使用することです。これは、ディストリビューションのパッケージとしてすでに利用可能である可能性が非常に高いです。これは通常、sshなどを介したX転送よりもはるかにうまく機能します。これは、圧縮がはるかに優れており、ワイヤ上でXプリミティブを使用しないためです。

もちろん、ssh経由または直接でX転送を設定する方法もいくつかあります。たとえば、ssh -Xを介してBからAにログインし、Aでアプリケーションを実行し、出力をBに表示することができます(逆方向を除外しましたが、これについては何も言わなかったので、あなたがそれを望むかどうかはよくわかりません)。

[〜#〜] xdmcp [〜#〜] を介してリモートセッション用にXサーバーを構成することもできます。または、適切なxauthおよびDISPLAY設定を使用して単一のアプリケーションでリモートXサーバーを使用するようにします。

ただし、最初にVNCを試すことをお勧めします。

2
dirkt

したがって、(B)でRaspbian OSを使用している場合、おそらくlightdmを使用していると思われるように、特定のカスタマイズを行っていない場合。

確かに、lightdmにXサーバーにtcp(ポート6000)をリッスンするように指示する必要があります。これを行うには、グローバルセクション_xserver-allow-tcp=true_のconfファイルに_[Seat:*]_を設定します。明示的に_xserver-command=X -listen tcp_を指定する必要がある場合もあります(見てください ここ )。 _/etc/lightdm/lightdm.conf.d/*.conf_内の追加ファイル、または_/etc/lightdm/lightdm.conf_内の直接のいずれかを選択できます。

次に、セキュリティをあまり気にしない場合は、おそらく(B)xhost + IP_OF_(A)のような何らかの形式の_xhost +_コマンドで実行する必要があります。 LANの脆弱性を気にする場合最初にtcpを介して直接Xを使用するべきではありませんが、sshがないと、MITを交換するために少しハックの硬さを与えることができます-(B)xauth extract - $DISPLAY | ssh (A) xauth merge -で実行することによる(A)と(B)の間のMAGIC-COOKIE。

次に、OSのバージョンに応じてlightdm _service lightdm restart_または_systemctl restart lightdm.service_を再起動します。

最後-Xorgが6000でリッスンしているかどうか(B)を確認します_netstat -antp | grep -F 6000_