ラズパイでレトロゲームを動かす

ラズパイをレトロゲーム専用機にできると聞いたので環境を構築してみました。

Lakkaのインストール

エミュレータ専用のOSであるLakkaを公式サイトからダウンロードします。

f:id:uso59634:20200204030235p:plain
lakka.tv

インストール手順は、公式サイトのドキュメントに詳しく記載されているので一読ください。

構築環境

ここで使用する機器は、以下のとおりです。

  • ラズパイ(Raspberry Pi 3 Model B+)
  • マイクロSDカード(16GBを用意しました)
  • HDMI対応モニタ
  • HDMIケーブル
  • USBジョイパッド(LogicoolLogitech)Gamepad F310)
  • Windows 10端末(作業用)
  • SDカードリーダー(作業用)

公式サイトのハードウェアサポートで使用する機器のサポート状況を確認ください。ロジクールのUSBジョイパッドF310は問題なく認識しました。

SDカードへのOSイメージの書き込み

ダウンロードした圧縮ファイルを展開して、OSのイメージファイル(Lakka 2.3.2 / 2020年2月現在)を取り出します。

f:id:uso59634:20200209133714j:plain
展開して取り出したOSイメージファイル

SDカードへのイメージファイルの書き込みについては、過去の記事を参考にしてください。

書き込み手順は以下のとおりです。

  1. Windows 10端末(作業用)にSDカードを接続します。
  2. 使用済みのSDカードは、diskpartコマンドで構成情報を消去します。
  3. SDメモリカードフォーマッター」でSDカードをフォーマットします。
  4. 「balenaEtcher」でOSイメージファイルをSDカードに書き込みます。

書き込みが完了したSDカードをラズパイに挿入します。

Lakkaの起動と設定

HDMI対応モニタとUSBジョイパッドをラズパイに接続して電源を投入します。

GUIでの設定

Lakkaのメニューが起動したら、ジョイパッドを操作して設定を変更します。

言語設定

「Settings」 > 「User」 > 「Language」から言語設定を変更します。

  • 言語を「日本語」に変更します。

サービス設定

「設定」 > 「Lakkaのサービス」からOSに関係するサービス設定を変更します。

  • SSHを有効 : ON
  • SAMBAを有効 : ON

無線設定

「設定」 > 「Wi-Fi」から無線ネットワークに接続します。

Lakkaを無線ネットワークに接続する際の注意点として、以下の点が挙げられます。

  • ステルスSSIDの無線ネットワークには接続できません。
  • メニュー画面からIPアドレスは設定できないので、接続する無線ネットワークにはDHCPサーバーが必要です。

入力デバイスのキー設定

「設定」 > 「入力」から入力デバイスのキー設定を変更します。

  • 入力のホットキーバインド
    • メニュー切り替えのコンボ入力 : 使用するジョイパッドにあった設定に変更します。(デフォルト設定 L3 + R3)
  • 入力ユーザーxのバインド : 使用するジョイパッドにあった設定に変更します。

「メニュー切り替えのコンボ入力」のデフォルト設定は、L3 + R3に設定されているので、使用するジョイパッドにあった設定に変更します。

SSH接続での設定変更

Lakkaのメニュー画面では設定できない項目を設定します。

ターミナルソフトから以下の設定でSSH接続します。

  • ホスト名 : lakka.local
  • ユーザー名 / パスワード : root / root

f:id:uso59634:20200204223352p:plain
TeraTermでのSSH接続

タイムゾーン設定

デフォルトのタイムゾーンは、協定世界時UTC+0)に設定されているので、日本標準時UTC+9)に変更します。

# echo "TIMEZONE=Asia/Tokyo" > /storage/.cache/timezone
# reboot

再起動後、メニュー画面の時刻が日本標準時になったことを確認します。

ロムデータの転送

作業用のWindows端末からロムデータを転送します。

作業用端末のエクスプローラのアドレス欄に「\\lakka」と入力して共有フォルダにアクセスします。

f:id:uso59634:20200204222321p:plain
SMBアクセス

ROMs共有フォルダにロムデータを保存します。機種ごとにフォルダ分けして保存しておくことも可能です。

設定ファイルのバックアップ

設定ファイルretroarch.cfgのバックアップを作成しておきます。ここでは、retroarch.cfg.orgとしてコピーを作成しています。

f:id:uso59634:20200205015421p:plain
設定ファイルのバックアップを作成

ゲームの起動と終了

ゲームの起動については、こちらに詳しく書かれています。また、ゲームプレイ中に「メニュー切り替えのコンボ入力」を呼び出せば、ゲームの終了やセーブなどをおこなえます。

SSH接続設定について

SSH接続時のパスワードをpasswdコマンドで変更しようとすると、以下のメッセージが表示されて変更することができませんでした。

# passwd

There is no working 'passwd'.

The 'passwd' command changes passwords for user accounts.

With LibreELEC it is not possible to change the system password

SSH is included only as a last support resort. SSH is off by default.
Most users never need SSH and need help using it so we need a default
password. If you need to keep SSH always on then this is unsupported
but can be secured with certificates.

TIP: disable password authentication in ssh and use public key authentication.

LakkaのベースになっているLibreELECは、システムパーティションを読み取り専用としてマウントするので、パスワードを変更することはできないようです。

また、メッセージにもありますが、SSHサービスを常時有効にしておくことはサポート対象外となるので、必要な時だけサービスを有効にするのが正しい運用です。

ですが、それでは手間なので、こちらを参考にして、鍵認証を使用したSSH環境を構築しました。

鍵の生成と公開

Lakka上で鍵ペアを作成します。

公開鍵と秘密鍵を生成します。
# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/storage/.ssh/id_rsa): [ENTER]入力
Enter passphrase (empty for no passphrase): [ENTER]入力(ここではパスフレーズを空にします。)
Enter same passphrase again: [パスフレーズ]を再入力
Your identification has been saved in /storage/.ssh/id_rsa.
Your public key has been saved in /storage/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3PIF3ovmmZpaLdoEvH26534Lvhm2j8raE88bPgCZ1U8 root@Lakka
The key's randomart image is:
+---[RSA 2048]----+
|         .       |
|        . . E    |
|       +  .o     |
|     .+. o o.    |
|      o.S o o    |
|       +o+ o .   |
|      . ==@ .    |
|       B.@=X.    |
|      +oXO#*o.   |
+----[SHA256]-----+

公開鍵を`authorized_keys`に追記します。
# cd /storage/.ssh
# cat id_rsa.pub >> authorized_keys
# chmod 600 authorized_keys

秘密鍵の受け渡し

ここでは、共有フォルダ経由で秘密鍵を作業用端末に受け渡します。

ロム共有フォルダに秘密鍵をコピーします。
# cp /storage/.ssh/id_rsa /storage/roms

作業用端末から共有フォルダ(\\lakka\ROMs)にアクセスして、秘密鍵ファイルを受け取ります。共有フォルダのid_rsa秘密鍵ファイルは、忘れずに削除してください。

秘密鍵を使用したSSH接続

受け取った秘密鍵を使用して、SSH接続ができることをテストします。

f:id:uso59634:20200209173254j:plain
秘密鍵を使用したSSH接続

SSH接続設定の変更

秘密鍵を使用したSSH接続に成功したら、鍵認証だけでログインできるようにシステム起動時のスクリプトを作成します。

/storage/.config/autostart.shファイルを編集します。

# vi /storage/.config/autostart.sh
 #!/bin/bash

 (
 SSHDCONF=/storage/.cache/services/sshd.conf
 [[ -e ${SSHDCONF} ]] && echo 'SSH_ARGS="-o PasswordAuthentication=no"' >> ${SSHDCONF} && systemctl restart sshd 
 ) &

/storage/.config/autostart.shファイルに実行権限を付与して、システムを再起動します。

実行権限を付与します。
# chmod +x /storage/.config/autostart.sh

再起動して鍵認証のみで接続できることを確認します。
# reboot

秘密鍵を紛失すると、SSH接続できなくなるので注意してください。

/storage/.config/autostart.shファイルの作成については、こちらを参考にしました。