Intel N100搭載超小型省電力マシンとProxmox VEとSteam RemotePlayで静かで省スペースで快適なゲーミング環境を作る

# はじめに
今回ご用意したマシンをご紹介します。  
## Chatreey T8 Pro(クライアント&お気に入りガジェット枠)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/b5e17396-a821-9e92-77b8-9ff6c46ba451.png)
先週末着弾したばかりのIntel N100搭載ウルトラコンパクトデスクトップPCです。  
だいたい8cm×8cm×4cmで、本当に手のひらに収まるほどです。  
外装はプラスチックで軽くてちょっと安っぽいです。実際安いです。(2万円未満で買えます)
そのくせしてCPUはパワフルで、搭載するIntel N100は4つのEコアでIntel Core i5 6500に匹敵する性能を有しており、それでいてTDPは驚きの6W！  
比較対象のi5 6500は同じく4コアではありますがTDP65Wで、非常にパフォーマンスが優れている事がわかります。
付属するAC/DCアダプタの総消費電力も最大で12V × 2.5A = 30Wと超低消費電力！  
底面に冷却ファンがついていますが、非常に静音で作業中は何も聞こえません。  
めちゃくちゃ部屋を静かにしてくっつける勢いで耳を近づければ聞こえる程度です。 
ストレージはM.2 2242サイズなのであとから大容量のものに置き換えることも出来ます。
そしてこのマシンの特筆すべき所は入出力関係で、なんと
- ギガビットLAN ×2
- Wi-Fi(5)(技適あり)
- Bluetooth 4.2(技適あり)
- HDMI2.0 ×3
- USB3.1 ×3
- 3.5ミリオーディオ出力×1

と、サイズにしては十分すぎるほどポテンシャルがあります。  
もちろん3画面同時出力に対応しており、Intel UHD Graphicsによる支援も合わさりYouTube・ニコニコ動画・Netflix等の動画配信サービスでも1080pでの視聴は特に不満なくサクサク動きます。(4Kモニタがないので4Kに関してはわかりません)  
現在はこれを常用しており、動画視聴は直接、業務はここからRDPで業務端末に繋いで作業し、ゲームは後述のSteam RemotePlayを利用して快適に活用しています。

### 概要
CPU: Intel N100 4コア4スレッド 空冷ファン搭載
RAM: LPDDR5X 4800MHz(到着時は3200MHzで動作、BIOSにて周波数変更可)
ストレージ: M.2 2242 SATAストレージ(交換可能)
GPU: Intel UHD Graphics
映像出力: HDMI2.0 ×3
LAN:Realtek ギガビットLANポート ×2(詳細なチップ情報はわかりませんでした)
Wi-Fi: あり(Wi-Fi5準拠、技適あり)
Bluetooth: あり(4.2、技適あり)
その他ポート: USB3.1(Type-A) ×3, 3.5ミリオーディオジャック(出力のみ?)
VESAマウント付属

### 良い所
- めちゃくちゃに安い(AliExpressにて2万円で買えます)
- HDMIポートが3つもあるのでマルチディスプレイも安心
- USB3.1が3つもあるので基本的にそこまで不足を感じない
- 常時稼働させても電気代が安い
- ギガビットLANポートが2つもあるのでpfSenseやOPNSenseを入れてネットワークの学習にも最適
- 全然熱くならない(負荷を掛けまくっても筐体はほんのりあったかい程度)
- めちゃくちゃに軽い
- 背面には盗難防止のケンジントンロック取付箇所がある

### 悪い所
- 筐体が非常に安っぽい(シルバー塗装樹脂)
- 重量が軽すぎるので太めのHDMIケーブル3本つなげるとケーブルの重さでPCが浮いたりどこかに行ってしまう
- 初期インストールされているWindows11の日本語フォントが所謂中華フォント&キーボードがUS状態なので事前にインストールメディアを作成してクリーンインストールする必要あり(ライセンスは自動認証されます)

## 自作マシン(サーバ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/a8715705-3355-aeb6-8c20-3b307099205c.png)
ウルトラクソデカサーバマシンです。ケースはThermaltakeのCore X9です。  
CPUはIntel Xeon-E5 2650v3を2機搭載しており、電気をバカ食いしすごい勢いで排熱します。
TDPが105Wなのでフルパワーで動作した場合、CPUだけで200W近く消費・発熱します。死にます。
検証環境用にProxmox VEを導入しており、PCI Passthroughが可能なのでVMにGPUを使わせることができます。(vGPUではないので1VMに対し1GPU占有する形になります)

### 概要
CPU: Intel Xeon E5-2650V3 ×2 20コア40スレッド 水冷式クーラー
RAM: DDR4 2133Mhz 8GB ×4
ストレージ:SATA SSD 256GB(起動ディスク)/M.2 NVMe 1TB/SATA SSD 1TB/SATA HDD 3TB ×2/SATA HDD 4TB
GPU: Nvidia Geforce GTX1060 6GB
映像出力: なし(ヘッドレス)
LAN:Realtek ギガビットLANポート (詳細なチップ情報はわかりませんでした)
Wi-Fi: なし
Bluetooth: なし
その他ポート: 特になし

### 良い所
- VMたくさん動かして検証作業するのに良い
- VMにGPUを繋げられるのでゲームも出来る
- 冬は暖房がいらない
### 悪い所
- 電気代で破産
- 夏は冷房が無いと(人もマシンも)死ぬ


# T8 Proをゲーミングマシンに仕立て上げよう
ですが流石にゴリゴリ3Dゲームは重すぎて動かないので、ここはSteam RemotePlayとスペックモリモリVMの力を借ります。  
## 1. Proxmox VEでGPUパススルーが出来るようにする
ノードのシェルにて`nano /etc/default/grub`を実行し、`GRUB_CMDLINE_LINUX_DEFAULT`に次のように追記してください。  
Intelの場合(vt-d必須)
`GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"`
AMDの場合
`GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off"`
変更完了後は`update-grub`を実行して更新。
よくわからない人はこちらの記事を見てみることをオススメします。
https://qiita.com/disksystem/items/0879f379e2bbc7a08675
その後はVMのハードウェアにPCIデバイスを追加し、画像のように設定して立ち上げてドライバを入れればOKです。(デバイスIDは異なると思います)  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/e175b6a1-64ec-6abc-9445-62cd52177b82.png)
なお、この手法の場合古いゲームや一部のゲームは互換性の問題で画面の表示が不安定になったり、ストリーミングできないことがあります。  
その場合はプライマリGPUを有効にし、グラフィックボードにダミープラグを接続することで回避することが出来る場合があります。(Parsecの15000エラーもこの手法が使えます)

## 2. Steamを導入する
そのまんまです。普通にインストールして導入してください。クライアント・サーバ両方にインストールが必要です。特に設定は弄らなくてもOKです。  

## 3. Steam RemotePlayが有効になっていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/77c238bd-77e3-6b7c-5761-24efa2a182f8.png)
サーバ側は画像のように`Remote Playを有効にする`が有効になっており、クライアントのコンピュータが認識されていれば成功です。必要なゲームをインストールしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/aa9f7a6a-3c89-e879-d9d4-9dec6776405f.png)

クライアント側は画像のように`ストリーミング`が表示されていれば、Steam RemotePlayの準備はOKです。  

## 4. ゲームをしよう！
コントローラーやキーボード・マウスをクライアントに繋いで`ストリーミング`を押せば、自動でサーバ側でゲームが立ち上がりクライアントに配信が開始します。  
(ゲームによっては初回セットアップが発生し、立ち上がりまでに時間がかかることがあるので一度サーバ側で立ち上げておくことをオススメします。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/ef399f8d-d139-e174-68c8-daa3f133e349.png)
実際に遊んでみた体感としては、ローカルネットワーク内のためほぼ遅延は感じられませんでした。
普段は寝かせておいて、ゲームしたいときだけVMを立ち上げて遊ぶといった使い方も悪くないと思います。  

## ex. Steam以外のゲームも遊びたいぜ！
Q. Steam RemotePlayってSteamゲーム以外じゃ使えないんでしょ？
A. 何でも使えます。(互換性の問題はあります)

1. サーバ側Steamから左下の`ゲームを追加`を押し、`非Steamゲームを追加...`を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/98d4f503-e44e-aa07-7afb-5de6ef66c5e3.png)

1. このメニュー内か、左下の参照からランチャーなどの実行ファイルを追加し、`選択したプログラムを追加`を押すとゲームメニューに追加することができます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/1c11e120-838a-dffd-5564-08f24aaa2d08.png)

1. メニューに追加されたら同じく`ストリーミング`を押して実行することができます。
Steamでは配信できないようなゲーム(意味深)もリモートプレイが可能になります。


# 最後に
Q. これVMでやる意味ある？
A. ロマンです。