🎉

Hyper-VでUbuntu24.04LTSをインストール・セットアップする

2024/04/30に公開

執筆時点では、クイック作成でまだ最新版(24.04)を作れないのと、
クイック作成で作った22.04LTSもデフォルトのディスクサイズが12GBしかなかったり他にもちょっと怪しかったりした(まじめに見てないので気のせいかも)ので、いっそのこと自前で入れてみた、という自分用メモ。

目標

以下2点をなるべく頑張らないで達成する

  • xrdpの機能で拡張セッションを使えるようにする
    • ディスプレイサイズを好きに変えられたり、マルチディスプレイにも対応できる
    • クリップボードの共有だったり、その他便利な機能を使える
  • ホスト側のWindowsからssh接続できるようにしておく
    • 例えばvscodeを使いたいときなど、ゲスト側にインストールする選択肢もあるが、ホスト側のものを使えた方が画質も悪くなく便利なこともある
    • GUIアプリを使う必要がない、あるいはGUIアプリを使う場合もデスクトップまでは不要でsshのForwardX11設定で最低限だけ引っ張ってこれればOK、ということもある

検証環境

  • 本体PC: ASUS Mini PC PN51
    • AMD Ryzen 7 5700U with Radeon Graphics
  • Windows11 Pro
    • バージョン23H2(OSビルド 22631.3447)
    • Hyper-Vマネージャー バージョン10.0.2262.1
    • (Hyper-VはProやEducationでないと基本的に使えないはずなので注意)

セットアップ手順

Hyper-Vの有効化

↓などを参照

https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v#enable-the-hyper-v-role-through-settings

一例としてはWindowsキーを押して「Windowsの機能機能の有効化または無効化」を検索して開き、
"Hyper-V"のチェックボックスをクリックして有効化、再起動、といった流れでHyper-Vを有効化できる。

インストール用イメージの取得

公式からUbuntu24.04LTS(Desktop版)のisoファイルをダウンロードする

https://ubuntu.com/download/desktop

6GBくらいあって結構重い

仮想マシンの作成

まずはHyper-Vマネージャーを開く
(Windowsキーを押して"Hyper"などと入力して検索すると候補にでてくるはず)

アプリの左上のメニューから「操作」→「新規」→「仮想マシン」と選択する:

これで仮想マシンの新規作成ウィザードが起動する。

設定内容例を順に貼っていく:

名前は今回はUbuntu-24.04LTS-Exampleとした。
"仮想マシンを別の場所に格納する"はお好みで適当に設定する。

仮想マシンの世代は第2世代を選択しておく。

o

メモリの割り当ても適当に設定する。
今回はデフォルト通り。

ネットワークは今回は"Default Switch"に接続しておく。
※参考:
https://atmarkit.itmedia.co.jp/ait/articles/2008/14/news018.html

仮想ハードディスクもデフォルトの通りの感じで設定する。
(今回は適当にDドライブに置いている)

インストールオプションで、予めダウンロードしておいたUbuntu24.04(Desktop版)のisoファイルを指定する。

これで一旦完了を押すが、このままだとWindows用のセキュアブートが有効になっているせいでうまく起動できないため、
Hyper-Vマネージャー右側の「操作」部分から作成した仮想マシンの「設定」をクリックし、「セキュリティ」から「セキュアブートを有効にする」のチェックをOFFにしておく。

この後この仮想マシンを起動するとGrub2が立ち上がり、
"Try or Install Ubuntu"のような感じのものを選択するとインストール用のライブメディア(isoファイルの中身)を起動した状態となる。
ここで画面にでてきた選択肢や入力欄を埋めていくと先ほどの手順の中で作った仮想ディスクにUbuntuのインストールを実施できる。

詳細は省略するが、今回は

言語: English

キーボードレイアウト: Japanese

ユーザー名とマシン名(sshするときに使う):

  • username: example-user
  • マシン名: hyperv-ubuntu2404-example

などとした。

後は全部デフォルト通りでひたすらクリックし続けた。

あとはしばらく待つと再起動を促されるので、その通りにする。

次回からは立ち上げるとUbuntuが立ち上がる。

作成したマシンのセットアップ

これまでの手順だけだと画面の解像度が変えられなかったり、
クリップボードの共有ができないなど色々と不便なので、少し手を加えていく。

拡張セッションの設定(xrdp)

Linuxマシンをリモートデスクトップサーバーとして使うためのソフトでxrdpというものがあり、
適当な設定を行うとHyper-Vの拡張セッションからxrdpを統合して使うことができる。
これによって解像度の可変化やマルチディスプレイへの対応、クリップボードやその他音声などの共有も可能になる。

まず、Ubuntu側でTerminalを開く。
(画面左下のUbuntuのロゴみたいなものをクリックするとアプリメニューが起動するので、そこから選択することもできる)

まずはxrdp(xorgxrdp)をインストールする。

# 以下、Terminalで操作

sudo apt update

sudo apt install xrdp xorgxrdp

デフォルトの設定だとうまく拡張セッションと連携されないので、設定ファイル/etc/xrdp/xrdp.iniを編集する。
sudo vi /etc/xrdp/xrdp.iniなどで以下のように変更を加える:

/etc/xrdp/xrdp.ini(抜粋)
- port=3389
+ port=vsock://-1:3389

Ubuntu24.04だとおそらくインストールした時点で起動しているが、
systemctlコマンドでxrdpサービスが有効化されていることを確認する:

sudo systemctl status xrdp

# 有効化
sudo systemctl enable xrdp

# 再起動
sudo systemctl restart xrdp

ここまでやったら一度仮想マシンをシャットダウンする。

PowerShellを管理者権限で起動し、以下のコマンドを実行:

Set-VM -VMName <作成した仮想マシン名> -EnhancedSessionTransportType HvSocket

これで再度接続すると、以下のような画面が出てくるはず:

適当な画面サイズを選んで接続すると、以下のようなxrdpのログイン画面が出てくる:

usernameとpasswordは今までと変わらずに普通に入力すればOK

ログインに成功すると↓のような感じになる:

当初のデスクトップ環境(Gnome-Shell)に比べるとかなり質素な感じになっている。
(ちゃんと確認していないが、おそらくはOpenbox?)

これで十分な感じの人もいるだろうが、
当初使っていたGnome-Shellも使えるように設定方法を確認しておく。

xrdpでログインする際、/etc/xrdp/startwm.shが読み込まれる。

/etc/xrdp/startwm.sh
#!/bin/sh
# xrdp X session start script (c) 2015, 2017, 2021 mirabilos
# published under The MirOS Licence

# Rely on /etc/pam.d/xrdp-sesman using pam_env to load both
# /etc/environment and /etc/default/locale to initialise the
# locale and the user environment properly.

if test -r /etc/profile; then
	. /etc/profile
fi

if test -r ~/.profile; then
	. ~/.profile
fi

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession

ここで、startwm.shか、あるいはそこで読み込まれているファイルに以下の環境変数を設定する:

export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME

マシン全体に適用するか、ユーザーを個別に作成してそれぞれで切り替えるようにするか、
などで適当に設定しておく。

うまくいくと、

のような感じで、拡張セッションを使っても当初のようにGnome-Shellが起動するようになる。

(ToDo: Gnome-Shell以外のデスクトップの設定方法)

sshの設定

デスクトップでしか使わないのであればここまでの設定で十分だが、
冒頭で書いたようにsshも出来るようにしておくと出来ることの幅が広がって便利なので使えるようにしておく。

まずは仮想マシン側でターミナルを開き、
openssh-serverをインストールする。

sudo apt install openssh-server

おそらくはこれだけでsshサービスの設定と起動がなされる。
気になる場合は

# 状態確認
sudo systemctl status ssh

# 再起動
sudo systemctl restart ssh

などをしておく。

少なくともネットワークアダプターを"Default Switch"に設定している場合においては、この状態でホスト側のWindowsからssh接続をすることができる。

# ホスト側のWindows(Powershellなど)で実行
ssh <ゲスト側のユーザー名>@<ゲスト側のノード名>

# 今回の例では ↓
ssh example-user@hyperv-ubuntu2404-example

ノード名の部分は、今回の場合冒頭で仮想マシンをはじめに作ったときに設定したマシン名と同じになる。
(※Distroによって違いそう。)

また、vscodeで

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh-edit

などを入れていれば、vscodeから仮想マシンに入ることもできる

なお、ノード名部分は

# ゲスト側のLinux上で実行
uname -n

の出力結果などでも調べられる。

また、VcXsrv:

https://sourceforge.net/projects/vcxsrv/

などをインストールしておけば、Windows側でGUIアプリを実行することもできる。

なお、VcXsrvではおそらくwaylandの機能は使えない?気がするので、
その辺りは制約事項となる。

WSL2を使ってWSLgの機能を使えればwaylandも使えるので、
WSL2からHyper-Vで立てた仮想マシンにssh接続できれば良いのだが、
少なくともネットワークアダプターとして"Default Switch"をそのまま使う場合、
WSL2とHyper-V側はネットワーク的に直接つながりを持たないため、WSL2からsshすることはできない。
設定を頑張れば可能ではあろうと思われるが、簡単でスマートな方法はまだ発見できていないのでここではスキップする。

(hostnameについて補足)

sshするときのhostname(ここの例ではhyperv-ubuntu2404-example)について、
Ubuntuだとhostnameコマンドやuname -nコマンドで出てくる値を使えばよいが、
他のDistributionだとこれではWindows側からsshしたりrdp接続したりできないことがある模様。

そのような場合、ホスト名に.mshome.netをつけると通る場合がある。

すなわち、ここの例では

# ホストのWindows側で実行
ssh.exe example-user@hyperv-ubuntu2404-example.mshome.net

のような感じになる。

参考

(その他Tipsなど)

本筋とは関係無いが、個人的に便利そうな情報をメモしておく。

Mozc(日本語入力)の設定

参考:

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0689

日本語入力をしたい場合、ここまでの設定に加えて追加で設定が必要。

まずは以下のようにmozc関連のパッケージを仮想マシン内のUbuntuでインストールする。

sudo apt install fcitx5-mozc
im-config -n fcitx5

以前はfcitx5-mozcではなくibus-mozcを入れていたのだが、
fcitx5の方がアプリ単位で切り替えが可能などベターらしい。
参考:
https://www.linux-setting.tokyo/2023/04/linuxibus-mozc-vs-fcitx-mozcibus.html

上記のコマンドを入力してfcitx5-mozcをインストールしたら、一度再起動する。

画面の右上に"ja"などと出たりするので、ここをクリックして"Configure"を開く。

fcitx-configurationが起動するので、
Input Methodに"Mozc"を追加していく。
右の"Available Input Method"で"Mozc"などと入力して選択する。

(before)

(after)

OKを押して変更を適用すると日本語入力が使えるようになり、半角/全角キーで英数入力と切り替えられるようになる。

なお、Mozcはgoogle日本語入力のオープンソース版であり互換性があるため、
普段google日本語入力を使っている人は設定を共有し、Host側と同じ挙動になるように調整できる。

GUIでCapsCtrlをCtrlに変換する

個人的にCapsCtrlはCtrlに変換する派なので。

Hyper-Vを使っている場合、キー配置自体はホスト側のものが使われるため、
ホスト側のWindowsでCtrl2Cap:

https://learn.microsoft.com/ja-jp/sysinternals/downloads/ctrl2cap

を有効化していれば特段何もする必要はない。

もしゲスト側で設定する必要がある場合、

https://linux.just4fun.biz/?Ubuntu/Caps-LockキーをCtrlキーにする方法#s90d3275

や、

https://qiita.com/peachft/items/c5de9a0224a6e710ba1d

などを参考に、gnome-tweaksをインストールすることで設定が可能になる。

GitHubで編集を提案

Discussion