Proxmox上のVMにデスクトップ環境を構築

作成日:2025/02/11
最終更新日:2025/02/11

Proxmox上のVMにデスクトップ環境を構築

作成日:2025/02/11
最終更新日:2025/02/11

概要

仮想化環境をESXi(VMware vSphere Hypervisor)からProxmoxに変更してみます。 Proxmoxの操作はESXi同様、Webブラウザから行うため、ESXiをインストールした端末ではたいていの場合モニタが余ってしまいます。 一方Proxmox上に構築したVM(仮想マシン)のデスクトップ環境を操作するとき、Webブラウザから操作する形となり別の端末が必要になります。

そこで、Proxmox上の仮想マシンをProxmoxを導入した端末でネイティブ動作しているかのように見せられないか試してみました。 なお、Proxmoxは8.3-1を使用しました。実施するにあたり、いくつかのサイト[1][2]を参考にしました。

PCIパススルーの設定

ProxmoxでPCIパススルーをするには、いくつかコンソールから設定します。sshでログインし、設定を変更します。コツとしては、ホストとなるProxmoxにデバイスがbindされないように無効化する必要があります。

VFIOの有効化

まずは、VFIOを有効化します。VFIOはユーザースペースからデバイスを操作するためのフレームワークで、今回はホストからデバイスを分離するために使用します。 /etc/modules に以下を追記し、 VFIOモジュールを有効化します。

ソース1. /etc/modules への追記
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

カーネルモジュール関連の変更を行った際は、忘れずにinitramfsを再構築し、再起動します。

コマンド1. initramfsの再構築
# update-initramfs -u -k all
# reboot

再起動後、VFIOが有効になっているか確認します。

コマンド2. VFIOの確認
# lsmod | grep vfio

デバイスの無効化

無効化するデバイスを探すためにlspciコマンドを使用します。ベンダIDとデバイスIDを見つけるために、-nnオプションをつけて実行します。例として、グラフィックボードを探してみます。ほかにもUSBインターフェースボードも探して値を確認しました。

コマンド3. 対象デバイスの確認
# lspci -nn | grep NVIDIA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208B [GeForce GT 730] [10de:1287] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
#

見つかったデバイスの情報を、/etc/modprobe.d/vfio.conf への追記します。必要なデバイス分記述します。

ソース2. /etc/modprobe.d/vfio.conf への追記
options vfio-pci ids=ベンダID:デバイスID

カーネル起動パラメータの変更

このままでは、特にUSBインターフェースボードでIOMMUデバイスグループがほかのPCIデバイスと重複してしまう問題がありました。 カーネルの起動パラメータとして、pcie_acs_override=downstream,multifunctionを追加します[3]。具体的なファイルとしては、/etc/default/grubです。

GRUB_CMDLINE_LINUX_DEFAULTの値に、スペース区切りで追加します。

ソース3. /etc/deault/grub の編集
GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_acs_override=downstream,multifunction"

設定変更後、update-grubコマンドを発行し、Grubに反映します。

コマンド4. Grubの設定繁栄
# update-grub

これで、再起動すると、下準備完了です。

仮想マシンの設定変更

仮想マシン(VM)にグラフィックボードとUSBインターフェースボードを追加します。 まずは、Proxmoxの管理インターフェースからVMを選択し、ハードウェアを選択します。画面上部の追加ボタンから、PCIデバイスを選択します。

[VM]-[ハードウェア]
図1. [VM]-[ハードウェア]

Rawデバイスを選択し、デバイスから当該デバイスを選択します。 グラフィックボードはプライマリGPUと全機能にチェックを入れます。

グラフィックボードの追加
図2. グラフィックボードの追加

USBインターフェースボードは全機能のみにチェックを入れます。

USBインターフェースボードの追加
図3. USBインターフェースボードの追加

設定が完了すると、以下のように表示されます。

デバイス追加後
図4. デバイス追加後

この状態でVM起動すると、PCIパススルーされるはずです。

参考文献

  1. Decomo, Proxmox VE 6.3でPCIパススルーあれこれ, のふ処, 2021
  2. naa0yama, Proxmox VE で PCI Passthrough する, naa0yama's Blog, 2020-2025
  3. Proxmox community, [Solved] Asus TUF B550 Plus and IOMMU Groups, Proxmox, 2021