寝室でもゲームしたい
普段のゲーム環境
PS5は4K出力に対応しているので、リビングの4K出力に対応したテレビでプレイしています。
リビングはソファも置いているので快適なのですが、寝転んでやりたくなることもあります。
寝室のテレビでリモートプレイに挑戦
あり合わせのハードでリモートプレイ環境を整えます。
ソニー純正のPSリモートアプリを使用するのが簡単ですが、
Android、iOS、Windowsしか対応していません。
WinOSは重たいし高いのと、Android、iOSは据え置き環境にふさわしくないため、
今回は非公式の手法で実現します。
Linux Mint上にインストールしたchiakiを使う
ハードウェアの性能を踏まえて、OSにはLinux Mintを使用することにします。
chiakiはLinux環境で使用できる非公式のPSリモートソフトです。
ハードウェア性能
自宅のVPNサーバー用として使用していたIntel NUCを使用します。
以下、ハードウェア環境です。
- ベース:Intel BOXNUC6CAH(Celeron J3455)
- メモリ:PCL-12800 4GB×2
- SSD:Transcend TS128GSSD370S(128GB MLC)
Linux Mintのインストール
Hyper-V環境で試してみるが・・・
Linux Mintが軽量だと噂には聞いていましたが、実際にはさわったことがありません。
お試しにVMを構築して試しましたが、エラーで立ち上がりませんでした。
なのではじめから実環境にインストールします。
インストール用USBの作成
ISOファイルでDVDを作成するのは勿体無いので、インストール用USBを作成しました。
やり方はこちらのサイトを参考にしました。
安定していると言われている"MATE"で作成します。
インストールの実行
普通にインストール出来ました。無線LANもインストール時から使えるようで、
さすがデスクトップ利用を想定したOSだなという感じです。
chiakiのインストールと設定
chiakiのインストール
ソフトウェア管理で"chiaki”を検索すると2つ出てきました。
Linux Mintパッケージの方が容量が小さかったので、こちらをインストールします。
chiaki上でPS5を認識するか確認
インストールが完了したら、chiakiを起動します。
この時、同一LAN内にあるPS5も起動しておくと、chiakiのアプリ上でPS5を確認出来ます。
↓下の画像のように起動中のPS5が表示されれば問題無し
PSNでユーザーID情報を確認する
こちらのサイトを参考に、作業を行いました。
ChromeでPSNにログインしてID情報を取得します。
ポイントとしては、二段階認証のコード入力画面が出てから、ディベロッパーツールを起動します。
メールアドレス、パスワード入力画面からディベロッパーツールを開いていると、上手く画面遷移しませんでした。
ホーム画面が現れたら、ディベロッパーツールを開いたまま、
上部のナビゲーションメニューからプロフィールを開きます。
プロフィール画面が開いたところで、ディベロッパーツール画面の"Network"を選択し、
"profile/user"でフィルターをかけると、"me"部分でアカウント情報が確認出来ます。
"accountId"を記録しておきます。
accountIdをBase64形式に変換
chiakiにaccountIdを入力する際にBase64形式に変換する必要があります。
一般的には変換を行うためのPythonコードが出回っているようなので、
とりあえずそのやり方で変換しますが、C#で変換するコードも書いたので、後程紹介します。
PythonはLinux Mintでは標準搭載されているので、そちらで実行します。
参考サイトでもコード記載がありますが、下記コードになります。
"*******************"部分に"accountId"を入力します
import base64 user_id = int(*******************) user_id_base64 = base64.b64encode(user_id.to_bytes(8, "little")).decode() print() print("This is your AccountID:") print(user_id_base64) exit(0)
Linux Mint内のエディタで上記コードのファイルを"PSN_Base64.py"という名前で保存しました。
端末を開いて、下記コマンドを実行すると変換後のIDが表示されます。
PS5への接続とアカウント情報入力
ここまでで接続の準備が整ったので、PS5を接続出来る状態にしてchiakiから接続します。
PS5を起動して「設定」-「システム」-「リモートプレイ」-「機器をリンク」を選択します。
下のような画面が出た状態でchiakiでリモート接続したいPS5をダブルクリックします。
↓白塗り部分はパスコードが表示されます(おそらくワンタイム)
↑PS5をこの状態にしてから、↓chiaki上のPS5をダブルクリック。
↓メニューが出てくるのでBase64変換後のAccountIdと、PS5に表示されたパスコードを入力すると、
"Register"ボタンが押せるようになります。
↓パケット交換が完了し、設定が完了しました。
接続確認とコントローラーの設定
chiakiからの接続
下記3パターンで操作が異なります。
- PS5にログイン済みの場合
chiaki上で検出しているコンソールをダブルクリックすれば接続出来ます。 - PS5は起動中でログインしていない状態の場合
chiaki上で検出しているコンソールをダブルクリックすると、パスコード入力ダイアグラムが表示されます。
PS5にログインする際にコントローラから入力するコードをキーボードで入力することで接続出来ます。 - PS5がレストモードの場合
chiaki上で検出しているコンソールをダブルクリックすると、起動パケットを送るか聞かれます。
起動パケットを送って、10秒程度で「2.PS5は起動中で・・・」の状態になります。
PS5ログイン設定の注意点
デフォルトユーザーを設定して、起動時にいつもユーザーのパスコード入力待機画面となる機能がありますが、
chiakiでリモート接続する場合はOFFにしておく必要があります。
ONにしている場合、「1.PS5にログイン済みの場合」以外で接続する際、エラーとなります。
Steamでコントローラの設定
chiakiはコントローラの設定まではしてくれないので、別の方法でコントローラーのドライバを読み込む必要があります。
他の方法もあるかもしれませんが、Steamをインストールしてしまうのが簡単です。
その後、Bluetooth設定でDualSenseをペアリングすると使えるようになりました。
↓SteamをインストールするとSteam-devicesも入ります
↓Bluetoothは「設定」-「Bluetoothマネージャー」からペアリング出来ます
コントローラー設定後の挙動
DualSenseの場合、Steamをインストールするとタッチパッド部をマウスとして認識してしまいます。
ゲームしている時にタッチパッド部のボタンが効かなくなるので若干不便です。
ネットで対処法を探しましたが見つかっていない状態です。
C#によるPSN Account IDの変換
chiakiで使用するBase64変換の意味
ここからはマニアックな話です。
まず、PSNのAccount IDですが、数字の桁数を見てみると19桁となっています。
これは符号あり64ビットの変数となっていると推測します。
ただし、IDが負の数になることは無いため、その範囲は0~2^63-1となります。
実際の最小数はもっと大きな値であると推測します。
Base64変換を行う場合、64bit(=8byte)データを3byte(24bit)ずつに分割して、それぞれ4つの文字列に置き換えることになります。
例えば10進数で"1234567890123456789”というIDの場合、16進数に変換すると、
"11-22-10-F4-7D-E9-81-15"となります。このデータを下位Byteから3byteずつ読み込み、Base64変換します。
8byteのデータを3byteずつ読み込むと、①"15-81-E9"、②"7D-F4-10"、⓷"22-11"の順となります。
さらに、2進数に変換し6bitずつに分けると、下記のようになります。
①"000101 011000 000111 101001"
②"011111 011111 010000 010000"
⓷"001000 100001 0001** "
①②はBase64対応表で4文字ずつに変換できますが、⓷はデータが足りないので補完します。
まず"*"部分には”0”が入ります。変換すると以下のようになります。
①"000101 011000 000111 101001" → "FYHp"
②"011111 011111 010000 010000" → "ffQQ"
⓷"001000 100001 000100" → "IhE"
4文字ずつに変換するルールなので、⓷の不足分は"="を追加します。
結果、"1234567890123456789"をBase64変換すると、
"FYHpffQQIhE="になります。
C#を使用した変換
この変換を行うためのメソッドを"Int64ToBase64"として作成してみました。
変換したいIDに対応する文字列データを入れれば、Base64変換されて出力します。
string Int64ToBase64(string str) { string buf =""; if(Int64.TryParse(str,out long longBuf)) { byte[] byteList = BitConverter.GetBytes(longBuf); buf = Convert.ToBase64String(byteList); } return buf; }
適当なコンソールアプリにして実行した結果になります。
IDを入力して下さい > 1234567890123456789 [Base64変換] FYHpffQQIhE=
変換の解説で説明した通りの結果となりました。