justindarc Posted April 27 Posted April 27 Hello! Drawing from inspiration from https://forums.launchbox-app.com/topic/56154-running-launchbox-and-big-box-on-linux/, I have created a Docker image for running LaunchBox on my Unraid server! Why do this? To answer this, I should first explain my existing setup: BigBox on a dedicated Windows PC in my arcade cabinet for launching games LaunchBox on a separate standalone Windows PC for managing my game library An Unraid server with shares for ROMs and a backup of my LaunchBox installation Scripts for performing a 3-way sync of ROMs and my LaunchBox installation between the two PCs and the Unraid server The primary reason for syncing LaunchBox to my standalone Windows PC is so that I can manage my game library, update artwork assets, etc. from my desk instead of having to do this at my arcade cabinet. I also like to keep my Unraid server's backup of my LaunchBox installation up to date so that it is the canonical source of truth for my LaunchBox library. Unfortunately, this means that my workflow is usually: Update LaunchBox library at my standalone Windows PC Sync LaunchBox from the standalone Windows PC to my Unraid server Sync LaunchBox from my Unraid server to my arcade PC Given that I rarely use LaunchBox on my standalone Windows PC for actually launching games, I wanted to be able to simply run LaunchBox directly on my Unraid server so that I could completely eliminate a whole sync operation in my workflow. This led me to create docker-launchbox, a Docker image for running LaunchBox in a container on my Unraid server via Wine! How does this work? The docker-launchbox image is based on linuxserver/docker-baseimage-selkies which is a base image for running Linux-based desktop applications in a Docker container and presenting them via a web-based interface using Selkies. This provides a responsive, low-latency interface that is performant enough to actually stream games through a web browser. But, LaunchBox is a Windows app, not a Linux app. How can this even work? Well, as I mentioned at the start, I was inspired to attempt to stitch this entire workflow together using Wine as was explored in detail in this thread. Although I was able to use the information in that thread to get this up and running relatively easily, there were many issues I encountered: Closing any window in LaunchBox (the loading/splash screen, the "About" dialog, etc.) caused the entire app to hang for 60 seconds seemingly related to issues with uiautomationcore.dll The standard Windows folder picker dialog had issues that sometimes resulted in the entire app hanging Various issues with exceptions not being handled gracefully when crossing managed vs. unmanaged boundaries (e.g. ImageDupeGrouper) An incomplete implementation in Wine for windows.storage.applicationdata.dll To work around these issues, I spent time debugging the Wine source code directly and put together several patches (some more hacky than others) found here. I may spend some more time refining these fixes to see if they may be made to be more general purpose and submit them upstream to the WineHQ project, but in the meantime, I have bundled fixed DLLs in the Docker image. I plan to continue to refine this Docker image as time permits, especially since it now will greatly simplify my workflow. I can now just open a browser on any machine on my home network and manage my LaunchBox library hosted directly on my Unraid server! As a bonus, I have found that I can actually use LaunchBox to play games using MAME through my browser with this Docker image as well! I have not tested this capability with other emulators yet as playing games through this was never my primary use case, so YMMV. I'd be glad to hear if anyone else finds this project useful or has any feedback on potential improvements or enhancements. Once I feel a little more comfortable with the overall stability of this image, I plan on submitting a template to the Unraid community apps repository so that other Unraid users can directly install this from there. Until then, the Docker container will need to be added from Docker Hub manually with the ports and volumes mapped as described in the documentation. -Justin 4 1 1 Quote
stigzler Posted May 4 Posted May 4 This is a really interesting project. I have a similar setup (linux server + an arcade machine + a windows based gaming console - both running big box). Props for getting lb up and running on linux and in a docker container to boot. I also felt there had to be a better way to manage multiple installations of lb on a LAN. I got fed up of having to go into the lb interface to add games onto my living room bb machine so made this: However, since then, I have discovered this: https://romm.app/ Think of it like Plex/Jellyfin, but for roms. I tested a load of others, but this came out tops (although it insists on a flat roms structure which is a shame, but on balance, have superior rom matching algorithms). This way I can have a canon set of full romsets on my server, with all the associated media (it's really good at scraping across lots of different meta-data providers) and then 'pull/sync' the roms I want form this onto my client machines. There are a couple of lb plugins I've tried for this, but one was really buggy and the other quite limited. I've scoped and proof-of-concepted a plugin that will allow you to pull a rom from your server to lb OR bb and it will pull all the mateadata + media with it. It'll operate a bit like a steam library. In middle of finishing house renovations atm, but this plugin will be my next priority. I am wanting to keep my arcade machine and living room box 'portable' thus not simply pointing lb to the server roms and media. Glad to see there are others working on this problem and will follow with interest. 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.