Ubuntu日和

【第81回】非対応PCでもWindows 11を動かせる。そう、仮想マシンならね!

Windows 11の動作要件を満たしていないPCの例

 最近のPC業界における大きなトピックと言えば、なんといってもWindows 10のサポート終了だろう。Windows 11にアップグレードすればよい話なのだが、事はそう単純でもない。Windows 11を動かすにはさまざまなハードウェア的要件があり、これが「スペック的にはまだ使えるのに、Windows 11の動作要件を満たさないため、買い替えを余儀なくされる」といった問題を生み出している。

 だがWindowsが使えないというだけで、PCを廃棄するのはエコではない。こうしたPCを使い続ける策の1つが、OSをLinuxに入れ替えることだ。本サイトでもWindows 10サポート切れのPCに今度こそUbuntuをインストールをしてみよう!として、Ubuntuに入れ替える方法を紹介済みだ。

 ではOSをLinuxに入れ替えれば万事解決なのかといえば、そうでもないだろう。PCは使い続けられても、やはり手元からWindowsがなくなってしまうと困るケースも多いのではないだろうか。かといって、気軽に新しいPCを調達できるとも限らない。

 さて、上で「Windows 11の動作要件を満たさないPC」と述べたが、おもに問題となるのは以下の部分だろう。

 つまりここさえクリアできれば、Windows 11は動かせる。「いや、そもそもファームウェアが対応していないハードウェアではどうしようもないじゃん?」と思うかもしれない。そこで登場するのが仮想マシンだ。UEFIもTPMも、仮想化してソフトウェア的に実現してしまえば問題ない。今回はUbuntu上にQEMU/KVMを使った仮想マシンを作り、Windows 11非対応PCでWindows 11を動かしてみよう。

仮想環境のインストール

 今回ホストマシンとして、「ThinkPad T430s」を用意した。用意したというか、捨てるのが面倒で筆者宅の押し入れに7年ほど放置してあったPCだ。OSには最新のUbuntu 25.10のデスクトップ版をインストールした。

 仮想マシンを動かすために、以下のパッケージをインストールしよう。virt-managerはGUIの仮想マシン管理ツールだ。ちなみにQEMU/KVMで仮想マシンを動かすだけであれば、GUIは必要ない。だが今回は扱いやすさや解説のしやすさを考え、デスクトップ版のUbuntuとGUIの管理ツールを使うことにした。

 ovmfはUEFIファームウェアのFLOSS実装だ。仮想マシンをUEFIファームウェアで動かす場合に必要となる。これ以外にもいろいろと必要なパッケージはあるのだが、virt-managerさえインストールすれば、依存関係によって一式がインストールされるので問題ない。

$ sudo apt install -U virt-manager ovmf

 インストールが完了するとlibvirtグループが作成され、ユーザーは自動的にグループに加入する。これにより、virt-managerを利用して仮想マシンを操作する権限が付与されるわけだ。だがそのためには、新しいグループを反映しなくてはならない。そこで一度Ubuntuを再起動しておこう。厳密に言えば再起動する必要はなく、一旦ログアウトするだけでよいのだが、今時のUbuntuではsystemdのユーザーセッションを一度終了しないといけないため、個人用のデスクトップであれば、全体を再起動の方がたぶん簡単だ。

VirtIOとは

 従来、仮想マシンは物理的なハードウェアをそのままエミュレートしていた。仮想マシンは実機と同じように振る舞うため、ゲスト側はカーネルやデバイスドライバに手を加えることなく、実機と同じように動けるわけだ。これはこれでシンプルで手軽なのだが、ハードウェアを愚直にエミュレートするのは、いくぶん効率が悪い。

 そこで「どうせ仮想環境なんだから、実機と同じことをするんじゃなくて、もっと効率よくやろうぜ」という発想で生まれたのが、仮想環境向けに設計された準仮想化デバイスドライバであるVirtIOだ。専用のドライバを使うことで、不要なエミュレーションをスキップし、効率のよいストレージやネットワークアクセスを実現できる。今時の仮想マシンを使うのであれば、VirtIOを利用しない手はないだろう。今回も仮想マシンのストレージは、VirtIOを使って接続する。

 ここで問題となるのが、VirtIOには専用のドライバが必要となる点だ。LinuxカーネルはVirtIOドライバを持っているため、ゲストとしてLinuxを動かすのであれば問題はない。だがWindowsはVirtIOドライバを持っていない。そのためWindows 11のインストーラを起動しても、VirtIOで接続されたストレージを認識できず、インストールできないといった事態が起こる。

 そこであらかじめVirtIOのWindowsドライバをダウンロードしておき、インストーラに追加で読み込ませよう。VirtIOドライバが含まれるISOイメージは、FedoraのWebページからダウンロードできる。インストール時点での最新版をダウンロードしておこう。本記事執筆時点の最新バージョンは0.1.285-1で、ISOイメージへの直リンクはこちらだ。

インストールメディアの入手

 今回はWindows 11のダウンロードより入手できる、ISOイメージを利用してインストールする例を紹介する。あらかじめホストマシン上にISOイメージをダウンロードしておこう。

 virt-managerはデフォルトで、/var/lib/libvirt/images以下に仮想マシンのディスクイメージなどを保存する。そのためWindows 11とVirtIOの、2つのISOイメージもあらかじめここにコピーしておこう。

$ sudo cp (isoイメージファイルのパス) /var/lib/libvirt/images/

仮想マシンの作成

 準備ができたら、仮想マシンにWindows 11をインストールしていこう。まずvirt-managerを起動する。すると自動的に「QEMU/KVM」に接続されるはずだ。もしここに何らかのエラーが表示されるのであれば、ここまでの手順に間違いがある可能性がある。特にUbuntuの再起動を忘れていないか確認してみて欲しい。

virt-managerの画面

 メニューから「ファイル」→「新しい仮想マシン」を選択する。すると以下のウィンドウが表示される。ここで「ローカルのインストールメディア」を選択して「次へ」をクリックする。

新しい仮想マシンを作成する

 続いてインストールメディアを選択する。ローカルのISOイメージを読み込むため、「参照」をクリックしよう。

インストールメディアの選択

 ISOメディアボリュームの検索画面が表示される。/var/lib/libvirt/images以下にISOイメージをコピーできていれば、2つのISOイメージがリストアップされているはずだ。Windows 11のISOを選択して「ボリュームの選択」をクリックしよう。前の画面に戻ったら、「次へ」をクリックして進もう。

インストールイメージを選択する

 仮想マシンに割り当てるメモリとCPUコア数を設定する。ここは各自の要件に合わせた値を入力しよう。

メモリとCPUの設定

 ストレージを設定する。新規のストレージを使いたいため、「仮想マシン用にディスクイメージを作成する」を選択し、ここも各自の要件に合わせて容量を決定しよう。

ストレージの設定

 最後に仮想マシンに名前をつけよう。ここでは「win11」とした。重要なのが「インストールの前に設定をカスタマイズする」にチェックを入れることだ。すべての設定が完了したら「完了」をクリックしよう。

仮想マシンに名前をつけて、作成は完了

仮想マシンのカスタマイズ

 「インストールの前に設定をカスタマイズする」にチェックを入れて仮想マシンの作成を完了すると、自動的に仮想マシンの詳細画面が開く。ここで仮想マシンの設定を変更していこう。

 まずは左ペインから「SATAディスク1」をクリックする。これが先ほど作成した、仮想マシン用のディスクイメージとなる。「ディスクバス」を「VirtIO」に変更し、「適用」をクリックしよう。

ストレージはVirtIOで接続する

 続いて「TPM vNone」をクリックする。「種類」を「疑似」とし、「モデル」は「ハイパーバイザーのデフォルト」、「バージョン」は「2.0」として「適用」しよう。

TPMのバージョンの設定

 インストーラが参照できるよう、VirtIOのISOイメージを追加しよう。左下にある「ハードウェアを追加」をクリックすると、仮想ハードウェアの追加ダイアログが開く。ここで「ストレージ」をクリックしてから、「カスタムストレージの選択または作成」を選ぶ。「デバイスの種類」は「CD-ROMデバイス」とし、バスの種類は「SATA」とする。「管理」をクリックすると、先ほどと同じくISOイメージファイルを選択する画面が開くので、/var/lib/libvirt/images以下にコピーした、VirtIOのドライバISOイメージを選択しよう。

VirtIOドライバを読み込むためのCD-ROMを追加する

 最後に「ブートオプション」を変更する。インストールメディアである「SATA CDROM1」にチェックを入れ、インストール先のストレージである「VirtIOディスク1」よりも上位にしておこう。これでISOイメージからインストーラが起動する。

起動デバイスの順序を変更する

 すべての設定を適用できたら、「インストールの開始」をクリックしよう。仮想マシンが起動する。

Windows 11のインストール

 あとは通常のWindows 11のインストールと同様だ。セットアップの手順に従って、インストールを進めて行こう。

仮想マシン内で起動したWindows 11のインストーラ

 実機と異なるのが、前述のVirtIOの対応だ。繰り返しになるが、Windows 11のインストーラはVirtIOに対応していないため、インストール先を選択する画面で、存在するはずのストレージが検出できない。

VirtIOのストレージを検出できないため、インストール先の候補がない状態

 ここで青い文字で書かれている「ハードウェアが表示されていませんか?ドライバーを読み込み、ハードウェアにアクセスします。」の部分をクリックしよう。

 するとドライバのインストール画面が表示される。先ほど追加した仮想CD-ROMドライブから、VirtIOドライバを読み込もう。「参照」をクリックすると、フォルダーの参照ダイアログが開く。ここでドライバが含まれているフォルダを指定しよう。(おそらく)Eドライブの「amd64/w11」がそれだ。

CD-ROMからドライバを読み込む

 正しくドライバのフォルダを指定すると、「Red Hat VirtIO SCSI controller」というドライバがリストアップされるはずだ。これを選択して「インストール」をクリックしよう。

VirtIOドライバのインストール

 するとWindows 11のインストール先の選択画面に戻る。今度はVirtIOのストレージが表示されているはずだ。あとは通常通り、Windows 11のインストールを継続すればいい。

VirtIOのストレージが認識された状態
インストールが完了したWindows 11の画面。実機に直接インストールできなかった25H2もこの通りだ

仮想マシンをホストLANに直接接続する

 virt-managerで作成した仮想マシンは、デフォルトで「virbr0」というNAT接続のブリッジを経由してネットワークに接続している。仮想マシンから外部へ出ていく分には問題ないが、NAT接続であるため、LAN内のほかのPCから、仮想マシンに直接接続できないという問題がある。具体的に何が困るかと言えば、ほかのPCからのリモートデスクトップ接続ができないのだ。

 virt-managerでGUIを操作することはできるが、お世辞にも使いやすいとは言えない。最低限のセットアップを済ませたら、操作は普段使いのPCからリモートデスクトップで行ないたいだろう。というわけで、仮想マシンをホストと同じLANに直接接続し、ほかのPCからのリモートデスクトップを可能にする方法を紹介する。

 なおここでは、ホストPC自体はWiFiでネットワークに接続しており、空いている有線LANを仮想マシン用に使用することを想定している。もしハードウェア構成が異なる場合は、適宜読みかえて欲しい。

 まずUbuntu上で以下のコマンドを実行しよう。

$ nm-connection-editor

 すると以下のようなウィンドウが開く。左下にある「+」ボタンをクリックしよう。

NetworkManagerのコネクションエディタの画面

 作成する接続の種類を聞かれるので、「ブリッジ」を選択して「作成」をクリックする。

新しくブリッジを作成する

 ブリッジの作成ダイアログが開く。ここでは「接続名」と「インターフェース名」をともに「bridge0」とした。その上で「追加」ボタンをクリックする。

ブリッジに名前をつける

 ブリッジにつなぐポートを設定する。ここではホストPCの有線LANを使うため、「Ethernet」を選択した。

ホストの有線LANをブリッジする

 bridge0のポートの具体的な編集画面が開く。「デバイス」に有線LANのNICを選択して「保存」をクリックしよう。

ブリッジに接続するデバイスを選択する

 これでブリッジの作成は完了だ。

bridge0が作成された

 Ubuntuのデスクトップ右上にあるシステムメニューをクリックしよう。「有線」の右向き矢印をクリックすると、有線接続の一覧が表示される。先ほど作成した「bridge0 port1」がいるはずなので、これをクリックして接続しよう。

ブリッジをネットワークに接続する

 virt-managerで仮想マシンの設定を開き、「NIC」の「ネットワークソース」を「ブリッジデバイス」に、「デバイス名」を「bridge0」にしよう。これで仮想マシンがbridge0を経由して、ホストと同じLANに直接接続されるようになる。

仮想マシンのNICの設定を変更する

 仮想マシンのWindows 11を起動したら、「設定」→「システム」→「リモートデスクトップ」をオンにしよう。また「ipconfig」コマンドなどで、LANのIPアドレスが割り当てられていることも確認しておくといいだろう。

リモートデスクトップを有効化する

 あとはLAN内のほかのサーバーと同じように扱える。たとえば別のUbuntuマシンから、Remminaでリモートデスクトップ接続してみたのが下の画面だ。

別のマシンからRDPで接続した例。RDPなので、T430sの物理ディスプレイよりも大きい解像度での表示もできる

 virt-managerを直接触るよりも、快適に操作できることが分かると思う。


 このように仮想化をうまく使えば、ハードウェアが対応していない機能も利用することができる。今回テストに利用したT430sに関して言えば、ハードウェアの絶対的な性能が低すぎるため、さすがに現実的な利用には耐えないだろう。だが「性能は足りてるのに、一部の機能のせいで足切りされてしまった」系のPCを利用している人であれば、こうした延命策もアリなのではないだろうか。

 もちろんQEMU/KVMは、Windowsだけでなく、Linuxも動かせる。KVMはLinuxカーネルに統合されている機能であり、virt-managerもまた、手軽に仮想マシンを管理できるソフトウェアだ。GUIで扱える仮想化ソフトウェアといえばVirtualBoxが有名だが、もし興味を持ったなら、QEMU/KVMもぜひ試してみてほしい。