Linux Mint 18.3 (Sylvia) を使っているが、Ubuntu(と言うか、Debian)の仲間のOSでは、Snes9xは動かないので、ZSNESで我慢しなければならないらしい。
しかし、ZSNESにはゲームをする上で許容できない以下の問題がある。
- ファンクションキーのガイドがないため、セーブ(ロード)したいのにうっかりロード(セーブ)しやすい
- サウンドノイズや再生不良が頻繁に起こる
こちらのサイトによれば、FedoraならSnes9xが動作するとのことなので、Linux Mint上のDockerコンテナとして起動したFedoraでSnes9xを動かそうと考えた。
手順
以下に示す通り、順番にファイルの作成、および、コマンドの実行を行う。
Dockerfile
適切なディレクトリ(例:~/docker/fedora30_snes9x)を作成し、そこに以下のDockerfileを作成する。
FROM fedora:30
RUN dnf -y install wget
RUN wget http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-30.noarch.rpm
RUN rpm -Uvh rpmfusion-nonfree-release-30.noarch.rpm
RUN dnf -y install snes9x-gtk
RUN dnf -y install dbus-x11
RUN dnf -y install libGL
build.sh
いちいち長いコマンドを打つのが面倒なので、前述のDockerfileと同じディレクトリに以下のbuild.shを作成しておくと良い。
# !/bin/sh
docker build -t fedora30/snes9x .
run.sh
さらに長いコマンドを打つのはもっと面倒なので、前述のDockerfileと同じディレクトリに以下のrun.shを作成しておくと良い。
以下を見れば分かる通り、 $HOME/snes を /root/snes にマッピングしている。
これは、ホストの $HOME/snes にROMファイルを置くことを想定している。
# !/bin/sh
docker run -it --name=fedora30_snex9x \
--net host \
-e DISPLAY=$DISPLAY \
-v $HOME/.Xauthority:/root/.Xauthority \
-v $HOME/snes:/root/snes \
-v /tmp/.X11-unix:/tmp/.X11-unix -v /var/lib/dbus:/var/lib/dbus \
-v /var/run/dbus:/var/run/dbus -v /etc/machine-id:/etc/machine-id \
--device=/dev/dri:/dev/dri --device=/dev/snd:/dev/snd \
--device=/dev/input:/dev/input \
fedora30/snes9x bash
ビルド&起動
以下のコマンドを実行し、Dockerコンテナをビルドして起動しよう。
なお、便宜上 $ で始まる行はDockerホスト、 # で始まる行はDockerコンテナで実行するコマンド。
$ cd ~/docker/fedora30_snes9x
$ chmod +x build.sh
$ chmod +x run.sh
$ ./build.sh
$ ./run.sh
# cd /root/snes
# snes9x-gtk
Snes9xの設定
以下の初期設定は必須である。
- View → Change Size で適切なサイズを選択
- Options → Controller Ports → SNES Port 1 → Joypad を選択してキーボード使用
- Options → Preferences → Sound で Dynamic rate control をオンでノイズ低減
- Options → Preferences → Joypads → Buttons でキーボードの割り当て
もともとなのか、環境のせいかは不明だが、設定変更を行うと不正終了することがある。
それでも繰り返し設定すれば、設定は反映されるのでめげずに進めて欲しい。
参考
以下がなかったら実現困難だったので、とても感謝している。
- 古賀政純の「攻めのITのためのDocker塾」:第22回 Dockerで3Dゲームを動かす――稼働編 (1/3)
- Docker コンテナ上で動く X11 アプリケーションのウィンドウをディスプレイに表示させる
追記
- Fedoraリポジトリのバイナリが悪いのか、Dockerコンテナ環境が悪いのか、Snes9xのメニューを表示したときなどにcore dumpするときがあり、安定性に欠けるのが残念である。Windows版の安定性はかなり優れている。