Hyper-V 上の Linux VM に音付きで RDP 接続する

読了まで:約4分


と言うのをやってみた結果、一応は出来たのでメモ。

準備 (用意したモノ)

  • [[Hyper-V]] が使える Windows 10 の Edition (自分の環境だと [[Windows 10 Pro]] )
  • [[Antergos]] ( [[Archlinux]] の派生ディストリ) の VM イメージ

今回の流れ

  1. Linux VM ( [[Antergos]] ) に [[xrdp]] と [[xorgxrdp]] をインストール
  2. [[xrdp]] と [[xrdp-sesman]] のサービスを有効化
  3. [[pulseaudio]] の xrdp モジュールをコンパイルしてシステムに追加
  4. .xinitrc 経由で Desktop Session を起動する様に設定

詳細

1. [Linux [[VM]] に [[xrdp]] と [[xorgxrdp]] を入れる]

これについては、 [[Antergos]] ( [[Archlinux]] の場合)、

  • xrdp
  • xrdpxorg-git

を、 AUR 経由でインストールします。

2. xrdp と xrdp-sesman のサービスを有効化

次に、これについては、 [[Terminal]] で

# xrdp を起動し有効化
$ sudo systemctl start xrdp
$ sudo systemctl enable rdp
# xorgxrdp を起動し有効化
$ sudo systemctl start xrdp-sesman
$ sudo systemctl enable xrdp-sesman

と言う感じで起動してサービスを有効化しました。

3. [pulseaudio の [[xrdp]] モジュールをコンパイル]

これについては、おおよそ、下記の手順で追加しました:

  1. pulseaudio と xrdp の PKGBUILD + 付属ファイルを Archlinux のリポジトリから取得
  2. pulseaudio と xrdp の PKGBUILD を元に makepkg -sLf でコンパイルのみを実行
  3. xrdp の src ディレクトリ以下の xrdp/sesman/chansrv/pulse に入る
  4. 次のコマンドでモジュールを build: make PULSE_DIR=p)u)l)s)e)a)u)d)i)o)の)s)r)c)d)i)r)e)c)t)o)r)y
  5. 出来上がった *.so モジュールを /usr/lib/pulse-$v)e)r)s)i)o)n/modules/ へ追加
  6. 以上

4. [.xinitrc 経由で [[Desktop Session]] が起動する様に設定]

まず、sesman が Xorg を起動できる様にするために、/etc/X11/Xwrapper.configallowed_users=anybody を追加します。 それで、sesman が [[Desktop Session]] を起動する際の起動の流れとしては、恐らく、

startx を実行し、 .xinirc 経由で [[Desktop Session]] を起動する

という時とほぼ同じっぽいので、今回の環境の場合だと、

#!/usr/bin/env bash
# lcoale 等の設定
export LANG=ja_JP.UTF-8
export LC_ALL=ja.JP.UTF-8
# 既存の pulseaudio を kill してから、新しく pulseaudio を起動し直す
pulseaudio -k
pulseaudio -D
# DBus 経由で gnome-session (gnome3) の binary を起動
# ちなみに gnome-session という shell script だと上手く動かないらしい
exec dbus-run-session -- /usr/lib/gnome-session-binary

という感じのファイルを用意して、 chmod +x ~/.xinitrc すれば良いです。

以上

で、あとは Windows 付属の RDP Client で接続してやれば、

音付きで [[Hyper-V]] 上の [[Linux VM]] に [[RDP 接続]] が可能な環境が出来上がる

ハズ……です。

なお、今回の Hyper-V の VM の設定では、

  • Antergos は Hyper-V 2nd Gen をベースに UEFI + GPT な環境で systemd-boot を bootloader として使用
  • RemoteFX の Graphics Device を追加し、 3840x2160 な Display Resolution を許可
  • それと Hyper-V の Network は手動で NAT を構成し、 IP も手動で割り振り

と言う感じになっています。

また、どういう条件でこれが起きるのかイマイチ分かってませんが、

なんか RDP で接続は出来るけど 、Desktop Session が起動しない……

って時が時々あり、そういう時は、

$ sudo rm -rf /tmp/.xrdp

してやると、その後普通に [[Desktop Session]] が起動したりします。なので、恐らくは何かしらの加減で、xrdp の ロックファイルが消えてなくて [[デッドロック]] している、とか、そういう問題だと思うんですが、何でそうなるかは良く分かってません。はい。

あと、今回は Gnome3 の VM を用意するのに普通に NixOS だと面倒なんで [[Archlinux]] 派生の [[Antergos]] を使いましたが、他の [[Linux Distribution]] でも、おおよその作業の流れは同じだと思われます。そのため、 [[Software]] の Compile は必須です。


とりあえず、モノは出来たので、それはそれで満足なんですが、Desktop 環境としての快適度で言えば、普通に [[Virtualbox]] や [[VMware]] で Desktop 環境作った方が良かったんじゃね? と言う感じなので、まぁ、Gnome3 などと言った、重めの [[Desktop Environment]] を使うんであれば、 [[Hyper-V]] は止めておいた方が良いんじゃないかなー、というオチになりましたとさ。

という事で今回の話は以上です。はい

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。