Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Turning Linux Mint 21.x into a Retrogaming Kiosk ====== ===== Base Install ===== Install Mint 21.x - Select language - Select keyboard - Install multimedia codecs - Erase disk and install Linux mint - Select region When entering a user, use any normal credentials you want, e.g. * username 'user' * password 'password' These will be the account you launch the emulator front end with. Ensure you tick the 'log in automatically' option. Let the install complete, then restart. ==== Disable Unnecessary Services ==== A typical Linux desktop comes with services that are not needed for full-screen gaming. You may (optionally) disable these to save a little bit of memory and gain a speed up in startup time. Open a terminal and disable these: <code> # Disable services not needed for gaming sudo systemctl disable apparmor sudo systemctl disable blueman-mechanism sudo systemctl disable colord sudo systemctl disable cups sudo systemctl disable cups-browsed sudo systemctl disable keyboard-setup sudo systemctl disable ModemManager sudo systemctl disable openvpn sudo systemctl disable ufw sudo systemctl disable evolution-addressbook-factory sudo systemctl disable evolution-source-registry </code> These disable the apparmor security service, bluetooth services, colour profile management, printing, modems, VPN and firewall. None of which should be strictly necessary on a gaming system that is not being actively used to browse the internet or run general purpose software. ==== Disable swap ==== If you have 8GB+ of memory, I would also suggest disabling swapfile use: <code> sudo swapoff -a sudo systemctl disable swapfile.swap sudo systemctl disable swap.target </code> Also ensure you have commented out the ///swap// line in **/etc/fstab**: <code> #/swapfile none swap sw 0 0 </code> ==== Change Default Desktop Session ==== Linux Mint defaults to the Cinnamon desktop, which whilst nice, does take up more system resources than some of the other options. You can change to a more lightweight desktop, such as MATE, as follows: <code root> sudo apt-get install task-mate-desktop sudo vi /etc/lightdm/lightdm.conf.d/70-linuxmint.conf </code> In **/etc/lightdm/lightdm.conf.d/70-linuxmint.conf**, change the entry **user-session=cinnamon** to **user-session=mate**. Reboot, and you should auto-login to the MATE desktop instead of Cinnamon. ==== Disable Desktop Applications ==== We don't need many of the auto-launched applications that start after loading the desktop, so you can disable most of these. Go to Start menu -> Preferences -> Startup Applications. You can disable all of them unless you specifically need to use this as a normal desktop machine. ===== Kiosk Gaming Applications ===== ==== Emulation Station Desktop Edition ==== As the kiosk user ('user' in the initial setup), create a **~/bin** folder to hold your custom software and download [[https://es-de.org/#Installation|Emulation Station Desktop Edition]], and ensure that it runs: <code> cd mkdir bin wget https://gitlab.com/es-de/emulationstation-de/-/package_files/101581937/download -O bin/emulationstation chmod 700 bin/emulationstation bin/emulationstation </code> The first time running EmulationStation DE it will ask for the location of your rom directory. This directory you enter **must** have sub-directories in it named after the [[https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#supported-game-systems|supported platforms detailed here]]. For example: * /data/roms * /data/roms/arcade * /data/roms/gamegear * /data/roms/megadrive === Autostart === In your start menu -> Preferences -> Startup Applications, add EmulationStation: - Click 'Add' - Name is 'EmulationStation Desktop Edition' - Command is: <code>/home/user/bin/emulationstation</code> - Comment 'Starts ES DE' Logging out of the desktop and back in again should automatically launch the application, fullscreen. ==== MAME ==== Supports: * Most arcade games * NeoGeo AES/MVS * Capcom CPS First install all of the required packages: <code> sudo apt-get install git build-essential python3 libsdl2-dev libsdl2-ttf-dev libfontconfig-dev libpulse-dev qtbase5-dev qtbase5-dev-tools qtchooser qt5-qmake </code> Now you can build MAME from source: <code> cd mkdir src/ cd src/ git clone https://github.com/mamedev/mame.git cd mame make strip -s mame cp mame ~user/bin </code> This takes a **long** time, so if you have multiple cores available, add the suffix **-j4**, **-j6**, **-j8** or more to the **make** command, depending on the cores/threads available. It //still// takes quite a while though. You should end up with a mame binary in the current directory of over 400MB. There are a few bits and pieces from the mame source tree that you need to put in the correct places: <code> cd mkdir bin/mame-data/ mkdir .mame/ cd src/mame cp -a artwork /path/to/your/mame/artwork/directory cp -a bgfx /user/bin/mame-data </code> === Customisation === Now create the base MAME config files **mame.ini** and **ui.ini**: <code> cd cd .mame mame -createconfig </code> In the newly created **mame.ini** edit the following options to the values shown: <code> rompath /path/to/your/mame/roms/directory samples /path/to/your/mame/samples/directory artwork /path/to/your/mame/artwork/directory bgfx /home/user/bin/mame-data/bgfx skip_gameinfo 1 video bgfx window 0 maximize 1 gl_glsl 1 gl_glsl_filter 0 </code> These should enable fullscreen mode and use the bgfx screen effects to enable old-style CRT emulation. ==== Mednafen ==== Supports: * Sega Mastersystem * Sega Megadrive/CD/32X * Sega Saturn * Nintendo NES/Famicom * Nintendo SNES/Super Famicom * Nintendo Gameboy * NEC PC-Engine/Turbografx * .... plus a load more First install all of the required packages: <code> sudo apt-get install zlib1g-dev libasound2-dev libsdl2-dev libflac-dev </code> Mednafen does not appear to have a public Github repository, but source releases are available on https://mednafen.github.io/releases/: <code> cd cd src wget https://mednafen.github.io/releases/files/mednafen-1.31.0-UNSTABLE.tar.xz xz -d mednafen-1.31.0-UNSTABLE.tar.xz tar xf mednafen-1.31.0-UNSTABLE.tar cd mednafen ./configure --prefix=/home/user make strip -s src/mednafen make install </code> === Customisation === Enable default fullscreen mode and 25% brightness scanlines to get a more authentic look to the display from Mednafen. Be sure to enable scanlines for any system you are using it for (in my case, PC-Engine, Megadrive, SNES, Saturn. <code> video.fs 1 # PC-Engine pce.scanlines 25 pce.shader none pce.special nn2x pce.stretch aspect # Megadrive md.scanlines 25 md.shader none md.special nn2x md.stretch aspect # SNES snes.scanlines 25 snes.shader goat snes.special nn2x snes.stretch aspect # Saturn ss.special none ss.shader goat ss.scanlines 25 ss.strech aspect </code> There are optional OpenGL shader effects available, as [[https://mednafen.github.io/documentation/|described in the Mednafen documentation]], but my personal preference for the PC-Engine is no shaders and just basic scanlines, or it starts to look a little artificial. On later systems the 'goat' shader can look quite nice. ==== Redream ==== Supports: * Sega Dreamcast The Redream project release [[https://redream.io/download|pre-built binaries]] that are self-contained and just need to be extracted. They do not have any specific requirements listed other than libSDL. <code> cd cd bin wget https://redream.io/download/redream.x86_64-linux-v1.5.0-1080-g1053967.tar.gz -O redream.tgz tar xfz redream.tgz chmod 700 redream </code> === Customisation === We need to make a few edits to the redream config file. First create a blank config inside bin: <code> cd rm bin/redream.cfg touch bin/redream.cfg </code> Now make the following entries: <code> mode=exclusive fullscreen width=1280 height=720 fullmode=exclusive fullscreen fullwidth=1920 fullheight=1080 aspect=4:3 vsync=1 cable=vga region=europe broadcast=pal </code> Ensure that your //fullwidth// and //fullheight// options are the same as your display. Obviously your //region// and //broadcast// settings should match the region of the games you wish to play (though in //vga// mode, it mostly doesn't matter). If you are using a 360 controller and want the Guide button to work as a quit key, then whilst playing Redream: Press Escape to bring up the Redream menu and select Input from the top menu: {{:blog:redream-1.jpg?300|}} Click on your 360 controller in Port A and move the cursor down to the 'Exit' function, click on it (it will change to 'Waiting'): {{:blog:redream-2.jpg?300|}} Now press the Guide button (joy8, according to Redream): {{:blog:redream-3.jpg?300|}} Exit Redream to save the new config. The Guide button on the controller will then quit the game from that point onwards. ===== XBox 360 Controller ===== The typical Xbox 360 controller works fine out of the box on most Linux systems, but we can make better use of it by mapping the normally unused Guide button to the escape key on the keyboard - which most emulators use as a 'quit' option. This means that in 99% of situations, we never even need a keyboard. We've seen that we can remap it directly in Redream, but a lot of emulators just use Escape as the quit key, so if we can get it to replicate that behaviour, then we don't need to remap it in most use cases. Fortunately the [[https://github.com/AntiMicroX/antimicrox|AntiMicroX utility]] can map USB controller inputs to arbitrary keyboard codes, so we will use that to turn the central Xbox Guide button to an escape key. First install the requirements to build it: <code> sudo apt install g++ cmake extra-cmake-modules qttools5-dev qttools5-dev-tools libsdl2-dev libxi-dev libxtst-dev libx11-dev itstool gettext ninja-build </code> Then download the source version and compile: <code> cd cd src git clone https://github.com/AntiMicroX/antimicrox.git cd antimicrox mkdir build cd build cmake .. make chmod 700 bin/antimicrox </code> Start up antimicrox (run **bin/antimicrox** from a terminal) whilst you have your controller plugged in. Scroll down to the Guide button, click it: {{:blog:antimicrox-1.jpg?300|}} ... and then select the Esc key on the virtual keyboard that pops up: {{:blog:antimicrox-2.jpg?300|}} Now, select the //Options// menu, click the //Settings// entry, set the the 'close to tray', 'minimize to taskbar', 'autoload last profile' and 'launch in tray' checkboxes: {{:blog:antimicrox-3.jpg?300|}} Save your profile (I called it 'xpad-settings' in my user home directory) and then add antimicrox to your startup applications list: * Name: Antimicrox * Command: <code>/home/user/bin/antimicrox --profile /home/user/xpad-settings.gamecontroller.amgp</code> * Comment: Game controller keyboard mapping Once configured, antimicrox will always start minimised, so you may want to create a desktop shortcut to start the utility again. Here's the content of a desktop shortcut which will do just that: <code> [Desktop Entry] Name=AntiMicroX Exec=/home/user/bin/antimicrox --show Comment= Terminal=false Icon= Type=Application </code> Create it as **AntiMicroX.desktop** on your desktop with a text editor and set it to be executable. Once you have logged out and back in again, the antimicrox tool will launch in the background to the system tray, EmulationStation DE will launch, and any time you start MAME, Mednafen or any other emulator which treats the Escape key as 'quit', pressing the Guide button on the 360 controller will exit the game for you. blog/retrogaming.txt Last modified: 2023/12/04 19:54by john