【寮で最高画質設定も夢じゃない】かんたんお手軽クラウドゲーミング環境DIY！

#はじめに
みなさん、特に寮生のみなさん。ゲーム、してますか?
P●BGモバイル?C●Dモバイル?
皆さん、PCゲーム、やりましょうよ。
おそらくこの記事が投稿された数週間後にはSteamのウィンターセールも始まるでしょうし...

電力制限?ゲーミングPCは300Wじゃ収まらない?

ご安心ください。
そんな寮生の皆様方のために、今回は寮でもゲーミングPCじゃないと動かないようなゲームを余裕で動かす方法、あります。
そう、クラウドゲーミングです。

#クラウドゲーミングって?
クラウドゲーミング、最近になって名前を聞くようになった人もいるんじゃないでしょうか。
一部の人にはまだ聞き慣れない言葉かもしれませんが、名前の通り、クラウドでゲームしちゃうんです。

既に(おま国ですが)サービスが始まってるものだと、Google Stadiaとか、GeForce NOWとかがクラウドゲーミングにあたりますね。

もっと具体的に説明すると、GoogleやAmazonが持っているような、とんでもなく巨大で高性能なサーバーPCにゲームの処理を全部任せて、自分の端末ではゲームの映像データの受信と、コントローラーでの操作データの送信だけをさせる、というやつです。
これの何が良いかというと
**クライアント側の端末性能が(ほぼ)要求されないので、ネットブックだろうがスマホだろうが関係なく高グラフィクスなゲームができちゃう**
(≒寮に持ち込んでるPCがたとえヘボスペックのWindows XPマシンでもゲームができちゃう)
ということです。

#高専生なら自作しない?
クラウドゲーミング、めっちゃ良さげなんですが、定額でお金かかるしなんならほとんどのサービスおま国だし、結局高専生には厳しい条件てんこ盛りなんですよね。


**...高専生たるもの、無いなら作れば良いじゃない。**


ということで、この魅力的(?)なクラウドゲーミング環境を、自分だけが自由に、しかも追加料金無しで使い放題なクラウドゲーミング環境を作っていきましょう

#準備
早速このクラウドゲーミング環境を構築していきます。
今回、ゲーム用のホストコンピューターは実家に置くという前提の元進めていきますが、どうやらAWSとかのレンタルサーバーでもできるみたいです。(そんなサーバー借りるお金有るなら素直にクラウドゲーミングの定額サービス入りましょう。)

##前提条件
まず、前提として、PCのOSは以下の前提で進めていきます

- ホストPC : Windows 10 64bit(Home or Pro)
- Raspberry Pi : Raspbian Desktop
- クライアントPC : Steam入れば何でもおｋ (解説ではmacOSを使います)


##必須なもの
以下環境構築に必須なものたちです

- ゲーミングPC
ゲームの処理用PC、スペックはお好みで。<br>

- Raspberry Pi
WoLのマジックパケット送信用に使います。世代は何でもおｋ(zeroの場合は別途有線LANアダプタ必須)<br>

- (micro)SDカード
Raspbianを起動するのに必要、モデルによって普通のSDだったりmicro SDだったりするので環境に合わせて購入してください、8GBあればなんとかなると思いますが、余裕を持って16GB以上のものを使っておくのが良いと思います。<br>

- 適当なPCとか
ゲームをする側(寮に持ち込む側)のPC。スマホでも良い。<br>

- 有線インターネット環境
無線でもできるという噂を聞いたが安定性に欠けるので今回はなし<br>

- LANケーブル
CAT 5e以上なら基本的になんでもおｋ<br>

- リレーボードキットとジャンパワイヤ(WoL非対応マザーのみ)
WoL非対応マザーでのみ使用。型番はRK-RB1、千石電商にて500円ちょいで買えます。<br>

- 半田と半田ごて(WoL非対応マザーのみ)
リレーボードキットの組み立て用、WoL非対応マザーで尚且ラズパイゼロを使う場合はGPIOピンの接続にも使います<br>

##あると便利なもの
なくてもなんとかなりますが、あると便利なものをソフト含めて紹介します。

- WoL対応のPC
ゲーミングPC側のPCがWoLに対応してるといろいろやりやすいし見栄えもマシになります。
一応対応してなくても脳筋な方法でなんとかなる。

- スイッチングハブ
ゲーミングPCとラズパイを同一LAN内に繋ぐ必要があるので、ポートが足りない場合は必須。
Gigabit Ethernet対応のやつを買おう。<br>

- TeamViewer
何らかの理由でSteamやHamachiが自動起動しなかった場合等に遠隔操作でなんとかできるので必須じゃないけどほぼ必須。<br>

- GeForce Experience
GeForce系のGPUを積んでいる場合は入れたほうがゲームの設定最適化とかできるので便利<br>

- Windows 10 Proのライセンス
万一SteamもTeamViewerもすら起動してくれなかった際にRaspberry Piから無理やりRDPで接続することができる。<br>

##ゲーミングPC(ホストPC側)の必要ソフト
まず、ホストコンピュータとなるゲーミングPC側に、以下のソフトをインストールします。(既に入ってるならそのままでおｋ)

- [Hamachi](https://vpn.net/)
- [Steam](https://store.steampowered.com/?l=japanese)

それぞれVPNソフトとゲームランチャー兼ストリーミングソフトです
(Steamのアプデでホスト側でVPNソフトは不要になったらしいが念の為)
スタートアップフォルダにショートカットを突っ込むなり設定で有効化するなりして、PC起動時に自動起動するようにしておきましょう。

##Raspberry Pi側の必須ソフト
続いてRaspberry Piにも同様にして必要なソフトをインスコしていきます。
予めapt updateとupgradeもしておきましょう。

```shell:Terminal
$ sudo apt -y install tightvncserver
$ sudo apt -y install xrpd
$ sudo apt -y install etherwake
$ sudo apt -y install remmina
```
それぞれTightVNCサーバー、TightVNC鯖にRDPで接続できるようになる便利なやつ、マジックパケット送信ソフト、リモートデスクトップソフトです。(CUI操作に自身がある人ならSSH接続で起動する方法でも良いですが割愛します)

続けてHamachiもインストールしていきますが、標準リポジトリに存在しないので、[先程のページ](https://vpn.net/)からLinux版のHamachiをDLして、インスコします
DLしたHamachiのパッケージファイルのあるディレクトリでターミナルを開いて

```shell:Terminal
$ sudo dpkg -i logmein-hamachi_x.x.x.xxx_armel.deb
```
でインストールします。
x.x.x.xxxはバージョン番号。
Raspberry Pi 2以降ならARM HF版でもいけるらしいです。
(多分何もしてない環境だとエラー吐かれるのでその際はapt --fix-missing installとかします)

##クライアント側PCの必須ソフト
続いてクライアントPC側ですが、Windowsの場合はホスト側同様**[Hamachi](https://vpn.net/)**と**[Steam](https://store.steampowered.com/?l=japanese)**さえ入れればおｋです。
macOSの場合は上記2つに加えて**[Microsoft Remote Desktop](https://apps.apple.com/us/app/microsoft-remote-desktop-10/id1295203466)**もインストールしておきます。
Linuxの場合、Hamachi、Steamに加え、Remminaもインストールしておきましょう。(パッケージによってはRDP用のソフトが入ってない事があるので、必要に応じてfreerdp等も入れておきましょう)

```shell:Tearminal
$ sudo snap install remmina
```
また、なくても問題ありませんが、Winやmac版のように、グラフィカルにHamachiを使いたい場合は、[haguichi](https://www.haguichi.net/download/)というソフトもインストールが必要です(Raspbian版も有るみたいなんですがなんでか私の環境ではインストールできませんでした...)

スマホでやる場合はSteam LinkアプリとHamachiのVPNプロファイルを入れれば良いみたいです。

#各機器ごとの設定
クラウドゲーミングをするにあたって、各PCごとに設定をしていきます

##ホストPC側の設定
まず、ホスト側PCで、Steam Remote Playを有効にします、Steamの設定を開いて、Remote Playタブの"Remote Playを有効にする"のチェックボックスをオンにします。(多分デフォルトでオン)
その他Remote Play関連の設定はハードウェア、回線速度などによって最適な設定が異なるので適宜設定していってください。
(ゲームの場合エンコード速度を重視したほうが良いので、ハードウェアエンコードは有効化しておいた方が良いはず)
![remoteplay.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/be1dbd13-3d5d-a8bd-bf27-70d3b731f63e.png)

続いて、Hamachiのネットワークを作成しますが、これは別に既に作成したものがあるならば、それを使っても問題ありません。
Hamachiを開いて、"新規ネットワークを作成"からネットワークを作成します。
ネットワークIDとパスワードはお好みでわかりやすいものにします。
![hamachisettingwin.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/d47becaf-04f9-63b5-1dab-58dd8c8d419e.png)



####※ここから先はWoL対応マザー用
WoLをするにあたって、LANカードのMACアドレスが必要なので、予めMACアドレスをメモっておきます。
コントロールパネルの、ネットワークの状態とタスクを表示から、アダプタの設定を変更を表示し、LANカードを右クリック、状態から詳細をクリックして、物理アドレスというところに書かれているアドレスをメモっておきます。(ハイフン(-)になってるところをコロン(:)になおしておくと後々混乱せず済みます)
![control.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/ecf3e9c3-4d45-af37-02a3-22e5fa894947.png)
![network.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/17e60219-2235-0bf3-d9b0-caad5e4eeba1.png)
![adaptor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/66f9b4e6-42a2-bad1-e78f-05477fceeffe.png)



続けてPCのBIOS(UEFI)を開きます。
ここでWoLを有効化するのですが、これまたマザーボードによって設定方法が異なるので、PCの型番やマザーボードの名前と"WoL"という単語でググってください(他力本願)
一応参考としてTech TIPSのサイトを載せときます
https://www.atmarkit.co.jp/ait/articles/0602/25/news014_2.html

####※ここから先はWoL非対応マザー用
WoL非対応マザーのPCなんて今どきなかなかないと思いますが、私が前使ってたPCは非対応だったので一応
と言いたいところですが説明長くなりそうなのでこれまた他力本願寺します。下記ページ見てください、必要なことは全部ここに書いてあります。
https://www.roshi.tv/2014/10/wolwake-on-lannuc.html

上で書いてあるとおりの配線をしたら、PCのマザーボード上にある電源ピンをリレーボードと繋げばおｋです。
が、それだと電源ボタンが使えなくなるので、電源ボタンも使いたいならブレッドボードなりユニバーサル基板なりを使って電源ボタンのケーブルもマザーボードの電源ピンにつないでおきましょう。

##Raspberry Pi側の設定
続けてRaspberry Piの設定をしていきますが、Raspbianのインスコは終わってる前提で進めていきます。
ひとまず、ホストPCで作ったネットワークに接続します。

```shell:Terminal
$ hamachi login
$ hamachi join [network id]
$ hamachi set-nick raspai
```
[network id]は先程設定したネットワークIDを入力します。
set-nickは別にわかり易い名前でおｋです。

####ここからはWoL対応マザー用
続けて、Raspberry PiからWoLのマジックパケットを送信できるようにします。
これはいちいちターミナルからプログラム叩くのも面倒なので、シェルスクリプトで書きます...と入っても以下の二行だけです

```shell:wol.sh
#!/bin/bash
sudo etherwake [MAC Address]
```
(MAC Addressのところは先程メモっった物理アドレスってやつです。Windowsの表示とは異なりハイフン(-)がコロン(:)になるので注意)
ただ、これだけだと結局ターミナルからshコマンド打たなきゃいけないので実行権限を変更してアイコンダブルクリックで実行できるようにします。

```shell:Terminal
$ chmod 777 wol.sh
```

####ここからはWoL非対応マザー用
WoL非対応マザーの場合はRaspberry PiのGPIOピンからリレーボードを使ってPCの電源ピンを直接短絡させるという半ば脳筋なやり方です。
先ほど紹介したページ丸パクリですが、以下のシェルスクリプトを書きます

```shell:wakeup.sh
#!/bin/bash
GPIO_ID=17
B_TIME=0.5
echo ${GPIO_ID} > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio${GPIO_ID}/direction
echo 0 > /sys/class/gpio/gpio${GPIO_ID}/value
echo 1 > /sys/class/gpio/gpio${GPIO_ID}/value
sleep ${B_TIME}
echo 0 > /sys/class/gpio/gpio${GPIO_ID}/value
```
こちらも同様に実行権限を変更してダブルクリックで実行できるようににします。

```shell:Terminal
$ chmod 777 wakeup.sh
```

念の為試しに実行してみて正常に動くか試してみてください。

##クライアントPC(とか)の設定。
続けてクライアントPC側での設定です。
とりあえずHamachiを立ち上げて、既存のネットワークに参加から、先程作成したネットワークに参加します。
ネットワークに参加できたら、RDPを使って、Hamachi経由でRaspberry Piに接続できることを確認します。
とりあえず、HamachiがRaspberry Piに割り当てているIPアドレスをコピーします。(IPv4でも6でもどっちでもおｋ)
![hamachiip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/698e1fda-9a97-9e64-d7a3-fdac1c6b5338.png)


OSごとにやり方は異なるので一応WinとmacとLinuxのやり方を説明しておきます。

- Windowsの場合:リモートデスクトップ接続、というソフトがプリインストール済みなのでそれを開き、IPアドレスを入力、接続ボタンを押してログイン。
- macOSの場合:Mac AppStoreからMicrosoft Remote Desktopアプリをインストール、起動して左上の+ボタンからAdd PCをクリック、PC nameのところにIPアドレスを入力してAddをクリックし、追加されたところをダブルクリックしてログイン
- Linuxの場合:snap、apt、pacman等、適当なパッケージマネージャでRemminaをインストール、入力欄が有るので、RDPが選択されていることを確認してIPアドレスを入力、Enterキー(Returnキー)押してログイン
![rdp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/1ed1aa4c-e6c1-5862-97f7-a894dd47b1e9.png)
(画像のフォントの統一ができてない)

それぞれログインできたら、続けてPCが起動できるかも確認しておきましょう。
これさえ確認できればもう完成したも同然です。

#Let's Play!
さて、これでようやくリモートゲーミングができる環境が整いました。
ホストPCを起動し、クライアントPC側のSteamのライブラリ画面を開くと、普段"プレイ"とか"インストール"とか書いてあるところが"ストリーミング"に変わってると思います(変わってなかったらホストPC側に該当のゲームがインストールされてないかHamachiが起動できてません)
あとはストリーミングボタンを押せば、インターネット環境さえあればどこでも高画質なゲームができちゃいます。
![cloudgaming.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144572/e1c8aeb4-2a44-c65b-7021-c52a02b9e7b9.jpeg)

が、寮Fiの速度でろくに遊べるはずもなく、結局寮でやるならポケットWi-Fi契約しましょ。
ということになっちゃいます。orz
以上、かんたんお手軽クラウドゲーミング環境DIYでした。



#参考URL
- [Raspberry Piにリモートデスクトップ接続 - Qiita](https://qiita.com/bvtjpn/items/977478f4944bda79b55e)
- [Raspberry Piで自宅内のWindows機を起動させる (Wake-on-LAN) - たねやつの木](https://www.taneyats.com/entry/raspi-wake-on-lan)
- [LogMeIn Hamachi for Linux のインストール - F1大好きな、インチキ技術者の日記](hamachi login
hamachi join [network id])
- [WOL(Wake On LAN)非対応のNUCにリモートから電源を入れる | roshi.tv::blog](https://www.roshi.tv/2014/10/wolwake-on-lannuc.html)