After watching Lawrence Systems' video about why it’s time to move off TrueNAS CORE—​which I had been putting off for too long already—​I finally migrated to Community (SCALE). I guess it was the last push I needed, really.

I even migrated most of my services inside my VMs to either separate TrueNAS Apps, or vanilla docker containers I manage via Dockge (such as Nextcloud AIO). But then I also noticed another available TrueNAS App which piqued my interest: Steam Headless.

Since I had an old spare NVIDIA GPU left, I gave it a spin. I enabled the Docker NVIDIA drivers via: Apps > Configuration > Settings > Install NVIDIA Drivers, and installed Steam Headless from the Apps catalog.

I set a password for the Steam Headless user, ticked the "Enable EV Dev Input" (important!) option, and selected my GPU to use. For good measure I also assigned half of my available CPU threads, and 16 GiB of RAM. For game storage, I decided to use a separate dataset, which will be automatically created and mounted at /mnt/games.

After installing, the Web VNC client worked, but Moonlight didn’t register inputs. I wanted to use Moonlight to stream from my server to my TV, as I had done before with my desktop (I wrote about that here). This proved to be an easy fix, as I just had to tick the "Enable EV Dev Input" option in the App settings, which I previously had forgotten to do.

Next, adding the /mnt/games directory as a new Steam Library in the Steam settings didn’t work. After some troubleshooting, I finally found out that the directory was mounted with the noexec option, but Steam needs exec to run (temporary) scripts in that directory, as part of adding it as a library. Simply remount the directory with the exec option:

user $ mount -o remount,exec /mnt/games

Then add the directory as a Steam Library, and don’t forget to remount it with the noexec option afterwards, to prevent any security issues:

user $ mount -o remount,noexec /mnt/games

I then added a few games to the library, and I could finally start playing 🕹️.