Hyper-V」タグアーカイブ

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 をスムーズに有効化できたら(そしてそのヒントとなれば)と思っています。

Windows 10 Build 10532 で Hyper-V を有効にする

最近急に冷えてきまして、
半袖短パンで戦うのは厳しくなってきたかなと思い始めています。

みむらです。

 

さて。つい先日 Windows 10 の Build 532 がリリースされましたが、
これを入れると Hyper-V が有効に出来ないという問題がありました。

私自身、Hyper-V をよく使う人間なのでこれはマズいということで、色々とやってみまして、
ちゃんと使えるようになりましたので記事にまとめておくことにします。


やることの要約としましては、

・「英語」設定に切り替える
・Hyper-V をインストール
・「英語」設定を削除して、日本語に戻す。

という内容です。


1.英語表示に切り替える

設定画面時刻と言語を選択し、横のメニューから地域と言語を選択。
そうしますと、言語を追加するというメニューが出てきますので、そこから “English” を選択、
続けて出てくるメニューからEnglish (United States) を選びます。

image

元の画面に戻りますので、そこで “English (United States)” をクリックしオプションを選択。
そしてそこから、言語パックをダウンロードします。

また、もし日本語キーボードを使っている方がいれば、ここで「キーボード」に
「日本語」を追加しておくといいでしょう。

image

最後に、英語を「既定値として設定」します。

image

 

2. Hyper-V をインストールする

普段 Hyper-V を有効化するのと同じように、
「プログラムと機能」の「Windows の機能の有効化または無効化」から有効にします。

image

 

3.英語表示設定を戻す

image

「日本語」の「既定値として設定する」をクリックしたのち、
”English (United States)” をクリックして「削除」を選び、
再度再起動して完了です。

ヤマハルータと Hyper-V でネットワーク的な隔離環境を作ってみる

みむらです。

ルータを買ったのはこれがやりたかったから(
(とはいえ、出来るか確認は取っていなかったので今回良かったなとw)

 

作り方:

1. ヤマハルータ側で VLAN の設定をする
2. Hyper-V 側で VLAN の設定をする


1. ヤマハルータ側で VLAN の設定をする

このあたりが参考になります:
http://jp.yamaha.com/products/network/solution/switch-command-tag_vlan/

具体的には、

vlan lan1/1 802.1q vid=51 name=YUI_ICHII
ip lan1/1 address 192.168.51.1/24
dhcp scope 51 192.168.51.2-192.168.51.250/24

こんな感じのコマンドを叩きます。

vlan lan1/1 802.1q vid=51 name=YUI_ICHII

vlan (LANアダプタ名)/(番号) 802.1q vid=(VID, VLAN ID) name=(名前)

こんな感じで呼び出せます。

今回の例では LAN1 上に一つめの VLAN を設定して、 VLANID は 51, 名前は YUI_ICHII となります。

ip lan1/1 address 192.168.51.1/24

いつもの IP アドレス設定ですね。ただ lan1/1 となっている所が VLAN 感出てます。

dhcp scope 51 192.168.51.2-192.168.51.250/24

いつもの DHCP 設定。

ちなみに dhcp scope 51 の 51 は、別に VLAN ID とかとは合わせる必要はないので

自分のポリシーに合わせて下さい(

 

・・・一通り叩くと VLAN が設定されます。

後はインターネットに出られるように nat の設定をしたり ip masquerade の設定もしておくと

良い感じだと思います。

 

2. Hyper-V での設定

image

各仮想マシンの設定画面の「ネットワークアダプター」の部分を開くと、

VLAN ID という項目がありそこに設定します。

ここでの VLAN ID は先ほどルータ側で VID として設定した値を入力します。

 

3.後は楽しむ


設定はこんな感じでさくさくっと出来ます。

もし通信周りでこれと絡めて遊ぶ場合は、

image

高度な機能の中に「ポートミラーリング」の設定項目もありますので、

この辺と組み合わせるとかなり楽しい環境がくめるのでは無いかと思います。

 

ではではー。

Hyper-V でネットワークブリッジを作ってもパケットが出てこない場合のメモ。

ちょっと某所でやっていてハマったのでメモ。

次に書いたような設定を書いても、反対側の口から何も出てこなかった場合にチェック。

cloned_interfaces="bridge0"
ifconfig_bridge0="addm hn0 addm hn1 up"
ifconfig_hn0="up"
ifconfig_hn1="up"

チェックするところは下図で、オレンジ色で括っているところ。

image

「MAC アドレスのスプーフィングを有効にする」を ON にしているかどうかをチェック。

Linux 上で Hyper-V の動的メモリやらいろいろと使えるようにしてみた。

どうもみむらです。

今回の内容は、需要がニッチすぎるだとか激コワだとか、なんかいろいろと言われていますが、
自己満足の内容です。

 

・・こわくないよ!

 

動的メモリというのは、Hyper-V 上において、
ゲストマシン(仮想で動かしているマシン)のメモリ需要にあわせてホストで確保するメモリの量を変化させるというものでしょうか。

早い話が、ゲストでメモリを使っていなければホスト上でメモリを解放して、
使いそうならホストに空きがあればより多くのメモリを割り当てる、とそんな感じ。

 

結論とすると、

image

こんな感じで動くように。

 

勿論、普通の Linux を動かしますと、

image

こんな感じで対応していませんので動作することはありません。

 

その他、Linux のカーネルを作る際に Hyper-V のゲストモジュールを組み込んだとしても、

image

執筆時最新の Version 3.8.7 でもこんな感じですので、ホスト側にメモリの利用状況は伝えられますが、
縮小、拡大処理は行われません。

 


その他、

image

こういう感じのスナップショット系・・なんですかね中身はまだ見てないのでアレですが、
そういうのを追加してみたり、

image

Hyper-V 用の Framebuffer ドライバを入れてみたり。 いろいろといじりました。

 

image

あとはやっぱり、こんな感じで Gnome を Hyper-V で動かしてみたり。

 


続きを読む