
EmulatorJs可以让我们在浏览器运行全能模拟器RetroArch玩各种各样的怀旧游戏,个人感觉EmulatorJs的加载速度和使用体验都比RetroArch-Web强多了。一个月前KASM推了一个RetroArch的镜像,似乎是用KasmVNC实时传输服务端运行的图像,类似远程桌面的实现方式,我尝试启动没起来,提示system-config-printer-applet: failed to connect to system D-Bus,之后折腾半天也没成功,最后放弃了。EmulatorJs似乎在每次进页面加载游戏的时候都会下载游戏文件,之后用模拟器运行游戏。
搭建教程
首先建文件夹,用来存放配置文件和游戏文件
mkdir -p /root/emulatorjs/config && mkdir /root/emulatorjs/data 之后运行启动命令,DockerHub地址:https://hub.docker.com/r/linuxserver/emulatorjs,在此感谢为EmulatorJs项目和RetroArch项目做出贡献的人们
docker run -d --name emulatorjs -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai -p 7777:80 -p 8087:3000 -v /root/emulatorjs/config:/config -v /root/emulatorjs/data:/data linuxserver/emulatorjs:1.7.2 参数说明
-d:后台运行容器
--name emulatorjs:给容器起名emulatorjs,方便之后管理
-e PUID=1000 -e PGID=1000:指定用户ID=1000、指定组ID=1000,可以解决-v挂载目录造成的文件权限问题
-e TZ=Asia/Shanghai:修改时区
-p 7777:80 -p 8087:3000 端口映射,冒号前是宿主机端口,冒号后是容器端口
-v /root/emulatorjs/config:/config -v /root/emulatorjs/data:/data 挂载目录,冒号前是宿主机的文件夹,冒号后是容器的文件夹 下面命令可以看容器日志
docker logs -f --tail 1000 emulatorjs 容器起来后记得开放宿主机的7777端口(容器内80端口)和8087端口(容器内3000端口)(在防火墙/云安全组配置)
使用教程
浏览器访问宿主机ip:8087(容器内3000端口),进到后台管理界面,之后下载模拟器运行所需的一些文件,如果下载中断了,刷新页面再点下载,会继续下载

点击Download下载文件

点击File Management管理游戏文件
下载完成点击Profile Management,进入文件管理页面

点击roms进入游戏文件夹
之后先点击左侧游戏平台(以FC平台为例),再点击roms进入游戏文件夹,右键空白处,点击upload,选择游戏文件上传

点击Upload弹出上传界面

点击选择文件上传游戏文件
上传之后的截图

游戏文件夹示例
之后点Rom Management,点gba的scan,之后点左侧gba

点击Scan扫描游戏文件

点击左侧gba进入导入游戏界面

点击Add All Roms to Config导入游戏文件
之后gba游戏会被添加成功,其余游戏都要这么添加一遍,最后访问宿主机ip+7777(容器内80端口)就可以愉快玩耍了
键盘↑↓切换模拟器,→前进,←返回

模拟器选择界面
进入游戏后按F1可以打开RetroArch的快捷菜单

RetroArch的快捷菜单
这时候按Z或者鼠标点击左上角的图标,会出现主菜单,主菜单左边有个Settings,选中后右边有个Input选项

RetroArch的主菜单
进入Input往下找,有个Port 1 Control选项,在这里可以修改按键映射,比如将上下左右改成WSAD,光标悬浮在想要修改的按键上,按Enter键进行修改,按Delete键移除不需要的映射

配置按键映射
下面是游戏截图

FC-重装机兵

GBC-宝可梦银

GBA-公主同盟

SMD-幽游白书

SFC-超时空之轮
手机浏览器也可以玩(up用的via浏览器,浏览器设置全屏),上滑隐藏Tab栏,左上角按钮可以打开RetroArch设置界面

GBA-换装迷宫2
访问加密
如果想输入正确的用户名密码才能进入游戏界面,可以用Nginx将宿主机端口转发一下,Nginx配置访问密码
容器启动时配置 -p 5233:80 -p 5234:3000,5233、5234端口不需要对外开放,之后Nginx进行如下配置
server {
#服务器IP地址
server_name 服务器IP地址;
#是否校验用户名密码
auth_basic on;
#这里配置htpasswd命令生成的密码文件(比如文件名frisk,放到了/etc/nginx/password/目录下)
auth_basic_user_file /etc/nginx/password/frisk;
#请求体最大1G,设置太小的话,管理界面上传游戏文件时Nginx会提示上传失败
client_max_body_size 1024m;
#将请求转发到5233端口
location / {
proxy_pass http://localhost:5233;
}
#监听7777端口
listen 7777;
} 之后访问宿主机ip:7777,输入用户名密码之后就能进入游戏页面了
密码文件生成方法
yum install httpd-tools
htpasswd -cb ./frisk chara sans 执行后会在当前目录生成名为frisk的密码文件,登录的用户名chara,密码sans

生成密码文件
关于存档
模拟器的存档似乎保存到了浏览器的缓存里,如果把浏览器缓存清了,存档就没了
我们需要先在上传游戏的文件管理界面创建一个用户

创建用户
之后在游戏主界面点击左上角的文件管理图标

点击左上角图标进入文件管理界面
先在左上角输入用户名密码进行登录,登录后可以在文件管理界面做很多事

文件管理界面介绍
可以理解成手动版的云存档功能,比如说在手机浏览器上玩RPG类的游戏玩到一半,想在电脑浏览器上接着玩,就可以在手机上将存档push到服务器上,之后在电脑上将存档pull下来接着玩。
后记
可能有人想问,up为什么要费这么大劲弄这个,用模拟器玩不香吗?大概上初一的时候,up在奶奶家的WindowsXP电脑上打开4399玩过一阵子宝可梦金银,那时候曾幻想拥有一个只属于自己的游戏网站。可能up想放下小时候的执念,也可能up仅仅想重温小时候在web页玩宝可梦的美好回忆吧。