Title: Turning a 15 years old laptop into a children proof retrogaming | |
station | |
Author: Solène | |
Date: 24 July 2023 | |
Tags: gaming life linux | |
Description: In this article, I'm sharing how I turned an old laptop | |
into an emulation platform that could be safely used by children | |
# Introduction | |
This article explains a setup I made for our family vacation place, I | |
wanted to turn an old laptop (a Dell Vostro 1500 from 2008) into a | |
retrogaming station. That's actually easy to do, but I wanted to make | |
it "childproof" so it will always work even if we let children alone | |
with the laptop for a moment, that part was way harder. | |
This is not a tutorial explaining everything from A to Z, but mostly | |
what worked / didn't work from my experimentation. | |
# Choosing an OS | |
First step is to pick an operating system. I wanted to use Alpine, | |
with the persistent mode I described last week, this would allow having | |
nothing persistent except the ROMs files. Unfortunately, the packages | |
for Retroarch on Alpine were missing the cores I wanted, so I dropped | |
Alpine. A retroarch core is the library required to emulate a given | |
platform/console. | |
Then, I wanted to give FreeBSD a try before switching to a more | |
standard Linux system (Alpine uses the libc musl which makes it | |
"non-standard" for my use case). The setup was complicated as FreeBSD | |
barely do anything by itself at install time, but after I got a working | |
desktop, Retroarch had an issue, I couldn't launch any game even though | |
the cores were loaded. I can't explain why this wasn't working, | |
everything seemed fine. On top of this issue, game pad support have | |
been really random, so I gave up. | |
Finally, I installed Debian 12 using the netinstall ISO, and without | |
installing any desktop and graphical server like X or Wayland, just a | |
bare Debian. | |
# Retroarch on a TTY | |
To achieve a more children-proof environment, I decided to run | |
Retroarch directly from a TTY, without a graphical server. | |
This removes a lot of issues: | |
* no desktop you could lock | |
* no desktop you could log out from | |
* no icons / no menus to move / delete | |
* nothing fancy, just retroarch in full screen | |
In addition to all the benefits listed above, this also reduces the | |
emulation latency, and makes the system lighter by not having to render | |
through X/Wayland. I had to install the retroarch package and some GL | |
/ vulkan / mesa / sdl2 related packages to have it working. | |
One major painful issue I had was to figure a way to start retroarch in | |
tty1 at boot. Actually, this is really hard, especially since it must | |
start under a dbus session to have all features enabled. | |
My solution is a hack, but good enough for the use case. I overrode | |
the getty@tty1 service to automatically log in the user, and modified | |
the user `~/.bashrc` file to exec retroarch. If retroarch quits, the | |
tty1 would be reset and retroarch started again, and you can't escape | |
it. | |
# Retroarch configuration | |
I can't describe all the tweaks I did in retroarch, some were for pure | |
enhancement, some for "hardening". Here is a list of things I changed: | |
* pre-configure all the controllers you want to use with the system | |
* disable all menus except the playlists, they automatically group | |
games by support which is fine | |
* set the default core for each playlist, this removes an extra weird | |
step for non-technical users | |
* set a special shortcut to access the quick menu from the controller, | |
something like select+start should be good, this allows to drop/pause a | |
game from the controller | |
In addition to all of that, there is a lovely kiosk mode. This | |
basically just allow you to password protect all the settings in | |
Retroarch, once you are done with the configuration, enable the kiosk | |
mode, nothing can be changed (except putting a ROM in favorite). | |
# Extra settings | |
I configured a few more extra things to make the experience more | |
children proof. | |
## Grub config | |
Grub can be a major issue if a children boots up the laptop but press a | |
key at grub time. Just set `GRUB_TIMEOUT=0` to disable the menu | |
prompt, it will directly start into Debian. | |
## Disabled networking | |
The computer doesn't need to connect to any network, so I disabled all | |
the services related to network, this reduced the boot time by a few | |
seconds, and will prevent anything weird from happening. | |
## Bios lock | |
It may be wise to lock the bios, so in case you have children who know | |
how to boot something on a computer, they wouldn't even be able to do | |
that. This also prevent mistakes in the bios, better be careful. | |
Don't lose that password. | |
## Plymouth splash screen | |
If you want your gaming console to have this extra thing that will turn | |
the boring and scary boot process text into something cool, you can use | |
Plymouth. | |
I found a nice splash screen featuring Optimus head from Transformers | |
while the system is booting, this looks pretty cool! And surely, this | |
will give the system some charm and persona compared to systemd boot | |
process. This delays the boot by a few seconds though. | |
# Conclusion | |
Retroarch is a fantastic software for emulation, and you can even run | |
it from a TTY for lower latency. Its controller mapping is really | |
smart, you have to configure each controller against some kind of | |
"reference" controller, and then each core will have a map from the | |
reference controller to convert into the console controller you are | |
emulating. This mean you don't have to map your controller for each | |
console, just once. | |
Doing a children proof kiosk computer wasn't easy, I'm sure there is | |
room for improvement, but I'm happy that I turned a 15 years old laptop | |
into something useful that will bring joy for kids, and memories for | |
adults, without them fearing that the system will be damaged by kids | |
(except physical damage but hey, I won't put the thing in a box). | |
Now, I have to do some paint job for the laptop behind-the-screen part | |
to look bright and shiny :) |