web-dev-qa-db-ja.com

KVMゲストでX11アプリケーションを実行して、ホストシステムに表示する

KVMゲストシステムでホストシステムに表示される方法でX11アプリケーションを実行する簡単な方法はありますか?

X11転送でゲストにsshできることはわかっていますが、ネイティブのKVM/libvirtアプローチか、それよりも単純なものがあるのか​​と思っています。

6
Mike

SSHのX11転送は、一般的なポート転送よりも少し多く、おそらくユーザーのの観点からは、目的の機能を実現する最も簡単な方法です。

技術的にもっと単純にしたい場合は、X11が元々どのように使用されるように想定されていたかを理解する必要があります。

多くのX11対応コンピューターが存在する環境では、ユーザー情報はNISとホームディレクトリで集中管理され、専用のディスクサーバーからNFSを備えた他のすべてのコンピューターと共有されます(オートマウンターが少し投入されています)。すべてのコンピュータは、互いのホスト名を解決できる必要もあります。信頼できる内部ネットワークでは、(想定されていた)あなたはX = 11サーバーのTCPリスニングポートを無効にしません。

このような環境では、あるホストから別のホストに接続でき、DISPLAY環境変数が適切に設定されていることを確認するだけで、リモートX11クライアントプログラムがローカルX11サーバーに直接接続できます。したがって、ローカルディスプレイに。ホームディレクトリはNFSと共有されるため、リモートホストとローカルホストの両方で同じ~/.Xauthorityが表示されます。

NISがなかったら?これはX11の問題ではありません。IDを実際には気にしません。 X11サーバーに接続しているクライアントが~/.Xauthorityファイル(またはXAUTHORITY環境変数が指すデフォルト以外のファイル)から正しいX11認証Cookieを提示できる限り、X11は機能します。ただし、UID/GID番号の割り当てを共有しないと、ホームディレクトリを共有できない場合があります。

共有ホームディレクトリがない場合その場合、通常、X11認証Cookieを渡す必要があります。これは、通常、たとえば、 xauth nextract /some/file :0.0、次に/some/fileのコンテンツを取得し、何らかの方法を使用してリモートホストに転送し、xauth nmergeを使用してリモートホストの~/.Xauthorityファイルに追加します。

(または、xhost +を使用して、セキュリティチェックを完全にまたは特定のリモートホストのみに対して無効にすることができます。しかし、これは非常に悪い考えであることが判明しました:リモートホストには他のユーザーがいて、xsnowedを取得したり、xroachに侵入したり、X11セッション全体のすべてのキーボードとマウスのイベントを監視したりすることができました。 )

しかし、暗号化されていないX11プロトコルは、かなり大きなセキュリティ上の弱点であることが判明しました。当時の米国の暗号輸出法があったため、世界はSSHをX11フォワーディングで使用し、TCP X11サーバーのポートを無効にすることを決定しました。これは、Xサーバーを参照するための標準になりました。 Xorg -nolisten tcp <other options...>として開始。

ごく最近、X.orgはこれを認識し、TCPリスニングロジックを反転しました。Linuxディストリビューションがデフォルトで-nolisten tcpオプションなしでX11サーバーを起動する場合、X11が原因である可能性があります。サーバーのバージョンでは、クラシックおよび安全でないX11 TCP=リスナーを有効にするために、明示的な-listen tcpオプションが実際に必要です。

だから...はい、できます:

  • ホストのX11サーバーでTCPリスナーを有効にします
  • VMがホストのIPアドレスを解決し、ホストのポート6000に接続できることを確認してください(= TCP上のDISPLAY :0.0に対応))
  • VMがDISPLAY変数がkvmhost:0.0を指すようにする
  • x11認証CookieをVMに渡すために必要な手順を実行します

これにより、X11は「クラシックな方法」で機能し、技術的な複雑さが最小限に抑えられます。しかし、実際にssh -X virtualmachineを使用するよりも実際にセットアップする方がはるかに複雑であり、さまざまな古い有名な攻撃。

5
telcoM