Hyper-V で Arch Linux ゲストの拡張セッション モードを有効にする

Hyper-V で Arch Linux ゲストの拡張セッション モードを有効にする

Hyper-V で Linux 仮想マシンをそのまま使用すると、Windows ゲスト マシンを使用するよりも快適さが若干劣ります。 その理由は、Hyper-V はもともとデスクトップでの使用を目的としていないためです。 VirtualBox のように、ゲスト追加機能のパッケージをインストールするだけで、機能的なグラフィック アクセラレーション、クリップボード、共有ディレクトリ、その他の生活の楽しみを手に入れることはできません。

Hyper-V 自体が提供する いくつかの統合サービス - そのため、ゲストはホストのシャドウ コピー サービス (VSS) を使用でき、ゲストはシャットダウン信号を送信でき、ゲストはシステム時刻を仮想化ホストと同期でき、ホストから仮想マシンとファイルを交換できます (Copy-VMFile PowerShell の場合)。 もちろん Windows を含む一部のゲスト オペレーティング システムでは、仮想マシン接続アプリケーション (vmconnect.exe) 拡張セッション モードが利用可能で、RDP プロトコル経由で動作し、ディスク デバイスやプリンターを仮想マシンに転送したり、共有クリップボードを使用したりできます。

拡張セッション モードは、Hyper-V の Windows では、インストール直後からすぐに使用できます。 Linux 上のゲストでは、vsock (ハイパーバイザーとの通信用に設計された Linux の特別な仮想ネットワーク アドレス空間) をサポートする RDP サーバーをインストールする必要があります。 Windows のデスクトップ エディションの Hyper-V に付属する VMCreate アプリケーションの Ubuntu の場合、RDP サーバーが vsock と連携する特別に用意された仮想マシン テンプレートがあります。 XRDP すでにプリインストールされていますが、他のディストリビューションでは、ますます明確ではなくなります - たとえば、作者 この郵便受け Fedora で ESM を有効にすることができました。 ここでは、Arch Linux 仮想マシンの拡張セッション モードをアクティブにします。

統合サービスのインストール

ここではすべてが多かれ少なかれ簡単です。パッケージをインストールするだけです。 hyperv コミュニティリポジトリから:

% sudo pacman -S hyperv

VSS と Exchange サービスを有効にしましょう メタデータ およびファイル:

% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done

XRDPのインストール

リポジトリ linux-vm-tools GitHub では、Arch Linux および Ubuntu 用の XRDP のインストールと構成のプロセスを自動化するスクリプトを提供しています。 Git がまだインストールされていない場合は、手動ビルド用のコンパイラやその他のソフトウェアとともにインストールし、リポジトリのクローンを作成しましょう。

% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/arch

この記事の執筆時点では、スクリプトによってインストールされる XRDP の最新リリース makepkg.shリポジトリで推奨されているのは 0.9.11 です。 解析が壊れている vsock://-addresses なので、Git から XRDP をインストールし、AUR からその Xorg ドライバーを手動でインストールする必要があります。 AUR で提供されている XRDP パッチも少し古いため、PKGBUILD とパッチを手動で編集する必要があります。

AUR の PKGBUILD を使用してリポジトリのクローンを作成しましょう (通常、この手順はビルドとともに次のようなプログラムによって自動化されます) わーいただし、著者はこの手順全体をクリーンなシステムで実行しました)。

% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.git

まずはXRDP自体をインストールしましょう。 ファイルを開いてみましょう PKGBUILD 任意のテキストエディタ。

ビルドパラメータを編集しましょう。 Git から XRDP をビルドするための PKGBUILD には、ビルド時の vsock サポートが含まれていないため、自分で有効にしましょう。

 build() {
   cd $pkgname
   ./configure --prefix=/usr 
               --sysconfdir=/etc 
               --localstatedir=/var 
               --sbindir=/usr/bin 
               --with-systemdsystemdunitdir=/usr/lib/systemd/system 
               --enable-jpeg 
               --enable-tjpeg 
               --enable-fuse 
               --enable-opus 
               --enable-rfxcodec 
               --enable-mp3lame 
-              --enable-pixman
+              --enable-pixman 
+              --enable-vsock
   make V=0
 }

パッチで arch-config.diffArch Linux で使用されるファイル パスでユニットと XRDP 起動スクリプトを管理します。このスクリプトへのパッチも含まれています instfiles/xrdp.sh、これを書いている時点では 削除されました XRDP ディストリビューションからのものであるため、パッチを手動で編集する必要があります。

  [Install]
  WantedBy=multi-user.target
-diff -up src/xrdp-devel-git/instfiles/xrdp.sh.orig src/xrdp-devel-git/instfiles/xrdp.sh
---- src/xrdp-devel-git/instfiles/xrdp.sh.orig  2017-08-30 00:27:28.000000000 -0600
-+++ src/xrdp-devel-git/instfiles/xrdp.sh   2017-08-30 00:28:00.000000000 -0600
-@@ -17,7 +17,7 @@
- # Description: starts xrdp
- ### END INIT INFO
- 
--SBINDIR=/usr/local/sbin
-+SBINDIR=/usr/bin
- LOG=/dev/null
- CFGDIR=/etc/xrdp
- 
 diff -up src/xrdp-devel-git/sesman/startwm.sh.orig src/xrdp-devel-git/sesman/startwm.sh
 --- src/xrdp-devel-git/sesman/startwm.sh.orig  2017-08-30 00:27:30.000000000 -0600

コマンドでパッケージをコンパイルしてインストールしましょう % makepkg --skipchecksums -si (鍵 --skipchecksums ソース ファイルを手動で編集したため、ソース ファイルのチェックサム検証を無効にする必要がありました)。

ディレクトリに行きましょう xorgxrdp-devel-gitその後、次のコマンドを使用してパッケージをアセンブルします。 % makepkg -si.

ディレクトリに行きましょう linux-vm-tools/arch そしてスクリプトを実行します install-config.sh、XRDP、PolicyKit、および PAM 設定を設定します。

% sudo ./install-config.sh

スクリプトはレガシー設定をインストールします use_vsock、バージョン 0.9.11 以降無視されているため、設定ファイルを編集しましょう /etc/xrdp/xrdp.ini 手動で:

 ;   port=vsock://<cid>:<port>
-port=3389
+port=vsock://-1:3389

 ; 'port' above should be connected to with vsock instead of tcp
 ; use this only with number alone in port above
 ; prefer use vsock://<cid>:<port> above
-use_vsock=true
+;use_vsock=true

 ; regulate if the listening socket use socket option tcp_nodelay

ファイルに追加 ~/.xinitrc 好みのウィンドウ マネージャー/デスクトップ環境を起動します。これは、X サーバーの起動時に実行されます。

% echo "exec i3" > ~/.xinitrc

仮想マシンをオフにしてみましょう。 PowerShell で管理者として次のコマンドを実行して、仮想マシンの vsock トランスポートをアクティブにします。

PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocket

仮想マシンを再度オンにしてみましょう。

Подключение

システムの起動後に XRDP サービスが開始されるとすぐに、vmconnect アプリケーションがこれを検出し、その項目がメニューで使用可能になります。 詳しく見る -> 拡張セッション。 この項目を選択すると、画面解像度を設定するように求められ、タブ上で 地域リソース 開いたダイアログで、RDP セッションに転送するデバイスを選択できます。

Hyper-V で Arch Linux ゲストの拡張セッション モードを有効にする
Hyper-V で Arch Linux ゲストの拡張セッション モードを有効にする

繋ぎましょう。 XRDP ログイン ウィンドウが表示されます。

Hyper-V で Arch Linux ゲストの拡張セッション モードを有効にする

ユーザー名とパスワードを入力します。

使用

これらの操作による利点は顕著です。RDP セッションは、拡張セッションを使用せずに仮想ディスプレイを操作する場合よりもはるかに応答性が高くなります。 RDP 経由で VM 内にドロップされたディスクはディレクトリで利用可能です ${HOME}/shared-drives:

Hyper-V で Arch Linux ゲストの拡張セッション モードを有効にする

クリップボードは正常に動作します。 内部のプリンターを転送することはできません。これはサポートされていないだけでなく、 ディスク転送を中断します。 サウンドも機能しませんが、作者はこれを必要としませんでした。 Alt+Tab などのキーボード ショートカットをキャプチャするには、vmconnect を全画面に展開する必要があります。

何らかの理由で、vmconnect アプリケーションの代わりに Windows に組み込まれている RDP クライアントを使用する場合、またはたとえば別のマシンからこのマシンに接続する場合は、ファイルを変更する必要があります。 /etc/xrdp/xrdp.ini port на tcp://:3389。 仮想マシンがデフォルト スイッチに接続されており、DHCP 経由でネットワーク設定を受信して​​いる場合は、次のホストから仮想マシンに接続できます。 название_машины.mshome.net。 vmconnect アプリケーションから TTY にログインするには、拡張モードをオフにする必要があります。

使用ソース:

  1. Hyper-V - Arch Wiki
  2. GitHub でのバグ報告: 1, 2

出所: habr.com

コメントを追加します