Enhanced Session」タグアーカイブ

Ubuntu 26.04 で Gnome Remote Desktop を使って Hyper-V の Enhanced Session Modeを動かす話

どうも、みむらです。

前回の記事が 2024年だそうです。今ほど 生成AI万歳な世の中ではなかったことを考えると、ここ1~2年で結構変わったなと思う今日この頃です。

Ubuntu もそのような時代の流れの中で X から Wayland に本格的に切り替わり、タイトルにあるような Enhanced Session Mode (拡張セッションモード) がうまく動かなくなりました。
※backend が xrdp であり、xorg + xrdp になっていたため。そして 2024 時点でも X は backports だったと思います。。

というわけで最新の環境でも使えるように Ubuntu 26.04 と Remote Desktop 機能と freerdp-proxy を組みあわせて良い感じに有効化できましたので紹介します。


シンプルに:何をしたのか

Hyper-V で Enhanced Session Mode の EnhancedSessionTransportType の設定を HvSocket にした上で、下記を行いました。

参考: EnhancedSessionTransportType の設定方法 (Windows 上で実施)

Get-VM -Name "Ubuntu" | Set-VM -EnhancedSessionTransportType HvSocket

Linux 上で行ったこと:

  1. Ubuntu の Remote Desktop 内の Remote Login を有効にする
  2. freerdp-proxy をインストール
  3. 下記の設定ファイルとともに freerdp-proxy を起動 (ユーザ名とパスワードはリモートログインのユーザ名・パスワードに合わせる)
[Server]
Host=vsock://-1
Port=3389

[Target]
FixedTarget=true
Host=127.0.0.1
Port=3389
User=(Username)
Password=(Password)
Domain=.

[Channels]
GFX=true
DisplayControl=true
Clipboard=true
AudioInput=true
AudioOutput=true
DeviceRedirection=true
VideoRedirection=true
CameraRedirection=true
PassthroughIsBlacklist=true
Passthrough=

[Input]
Keyboard=true
Mouse=true
Multitouch=true

[Security]
ServerTlsSecurity=false
ServerNlaSecurity=false
ServerRdpSecurity=true
ClientTlsSecurity=true
ClientNlaSecurity=true
ClientRdpSecurity=true
ClientAllowFallbackToTls=true

[Certificates]
CertificateFile = (Certificate File Path)
PrivateKeyFile = (Private Key File Path)

うまくいけば Hyper-V 側で Enhanced Session Mode に切り替えるかを聞いてきます。


くわしく:何をしたか

Ubuntu 26.04 のクリーンインストール状態を用いて紹介します。

1. 必要なパッケージをインストール

xfreerdp-proxy と winpr-makecert (winpr-utils) を準備します。

$ sudo apt install freerdp-proxy winpr-utils

2. リモートデスクトップを有効にする

「設定」を開き、「システム」「リモートデスクトップ」と遷移します。

表示された画面で「リモートログイン」を選択し「ロック解除」を選択します。
パスワードが聞かれますのでログイン中のユーザのパスワードを入力します。

「ユーザ名」を設定し、「新しいパスワードを生成」をクリックしパスワードを生成した後、パスワードを可視状態にして、メモをしておきます。

今回は下記の設定で以降設定を行っていきます。
(この ID とパスワードで接続可能になるため、設定の際は安全のため皆さんの環境で生成したパスワードを利用してください。)

3.設定ファイルを作る

今回の例ではホームディレクトリ下に hv-proxy というディレクトリを作り、その中で作業していきます。

$ mkdir hv-proxy
$ cd hv-proxy

3.1. 鍵を作る

まず、freerdp で使う鍵ファイルを作ります。

$ winpr-makecert -rdp -path . rdp
$ ls
rdp.crt rdp.key

rdp.crt および rdp.key が出来ていれば OK です。

3.2. 設定ファイルを作る

テンプレートファイルを作成し、そのファイルを編集しながら下記の内容の設定ファイルを作ります。

$ freerdp-proxy --dump-config proxy.ini

ディレクトリに proxy.ini が作成されます。これを編集して下記のように設定ファイルを書き換えます。

注:User と Password は上記で生成したサンプル例にしています。
注2:「#」で始まる行は実際の設定ファイルには不要です。

[Server]
Host=vsock://-1
Port=3389

[Target]
FixedTarget=true
Host=127.0.0.1
Port=3389
# 注: 以下は実際に設定したユーザ名にする
User=hyper-v-enhancedsession
# 注: 以下は実際に設定 or 生成したパスワードにする
Password=TweezersDucklingUpfrontLeggingsAzalea
Domain=.

[Channels]
GFX=true
DisplayControl=true
Clipboard=true
AudioInput=true
AudioOutput=true
DeviceRedirection=true
VideoRedirection=true
CameraRedirection=true
PassthroughIsBlacklist=true
Passthrough=

[Input]
Keyboard=true
Mouse=true
Multitouch=true

[Security]
ServerTlsSecurity=false
ServerNlaSecurity=false
ServerRdpSecurity=true
ClientTlsSecurity=true
ClientNlaSecurity=true
ClientRdpSecurity=true
ClientAllowFallbackToTls=true

[Certificates]
CertificateFile=./rdp.crt
PrivateKeyFile=./rdp.key

設定ファイルが出来たら実際に動かしてみます。

4.動かす

設定ファイルが出来たら、Ubuntu をシャットダウンします。

Microsoft のドキュメント上からは見つかりませんでしたが、
VMが稼働し始めて一定時間たった後だと listen してもつなぎに来ないように見えています。このため一度シャットダウン (= VM の停止) を行い、再度見に来るように仕向けます。

VMが停止したのち、再度起動します。

起動したら、CTRL+F3 を押下して仮想コンソールに切り替え、
その画面にてログイン後、ディレクトリを移動して freerdp-proxy を起動します。

$ cd hv-proxy
$ freerdp-proxy ./proxy.ini

うまくいくと下記のように、拡張セッションへの切り替えを聞いてきます。

あとは OK を押すと画面が表示されますので、ログインして普段通り利用可能になります。


自動で立ち上がるようにしてみる

毎回立ち上げるのも手間ですので、systemd のサービスで自動的に立ち上がるようにしてみます。

“/opt/hv-proxy” ディレクトリを作成して、その中に鍵ファイルやら設定ファイルを保存する構成想定です。

下記の内容を /etc/systemd/system/hv-proxy.service として保存して、有効にします。
(お行儀良くやる場合は /etc/systemd/user/ 以下に保存して有効にすると良いと思います)

[Unit]
Description=Hyper-V Enhanced Session Proxy
After=gdm.service
Wants=network-online.target

[Service]
Type=simple
DynamicUser=yes
ExecStart=/usr/bin/freerdp-proxy /opt/hv-proxy/proxy.ini
Restart=on-failure
Environment=HOME=/opt/hv-proxy/
ReadOnlyPaths=/opt/hv-proxy/
RestrictAddressFamilies=AF_INET AF_VSOCK AF_UNIX

[Install]
WantedBy=multi-user.target

また上記の環境をより自動的にやる場合は、grdctl を組み合わせて自動でリモート設定も動かすと良いと思います。(未検証)


というわけで、xrdp でやるよりもずっと良い感じに動く環境が作れました。

これから X から wayland への切り替えは進んでいくと思います。そのときにこの方法で Enhanced Session をスムーズに有効化できたら(そしてそのヒントとなれば)と思っています。