For doing Kodi GUI setup changes in a headless setup in the RPis remotely, I use a VNC server installed in them that I start on-demand (when needed), e.g dispmanx. Needing this is a once-in-a-few-years type event, but yes you need this installed just in case.
ari_verse
My use case: collection based on single-flac + cuesheets, thousands, many of which are HD. Setup: all the music is in an NFS share in my HTPC, which also runs Kodi (flatpak) for both video and audio media. That machine is connected to my main audio setup via USB DAC.
The Kodi music DB is hosted externally in mariaDB in the same server. I use 2 headless Kodi (OSMC) clients with HiFiBerry DACs as streamers around the house, using the same DB/media. Lastly I also have an Nvidia Shield running Kodi also exposing the same collection/DB.
Over the years I have tested many alternatives, including navidrome, volumio, and others, but they all struggle handling my music collection, choke processing cuesheets or don't even support them, or can't handle NFS reliably or at all, or can't process 24 bit content etc.
I couldn't find any solution nearly as reliable, performant or flexible as this one. I use this setup pretty much daily. With incremental improvements, it's been running for more than 10 years.
Each Kodi client can be managed via its web interface (a little dated but fully functional and reliable), amd via Android app (I use Yatse).
The main server also exposes the music collection via DLNA.
I looked at jellyfin/Plex in the past as well but for muy use case, it's over-complicated and didn't add value.
Fair comment, I should qualified my answer: I use an ssh tunnel with auto-reconnect option, wrapped inside a systemd service. In all this years, I still have to run into a problem that wasn't external (server down, no internet at home etc) I agree that wireguard is the proper solution however it requires a lot of extra configuration and support in both ends, which now is prevalent but not so much 5+ years ago. Also for a single port solution, ssh is so much simpler, practical and reliable, you only need an ssh user at the other end.
ExecStart=/usr/bin/ssh -NT -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes -R localhost:YOUR_PORT:localhost:YOUR_PORT SOME_USER@YOUR_SERVER
This. Using simple ssh tunneling with port forwarding in a similar scenario. Working flawlessly with zero maintenance for 5 years and counting. Very reliable
This project shows a lot of promise and I am following it. I run HomeAssistant as well in my home server. At this time though (or:last time I checked) it didn't support cuesheets at all, it fell a little short for my use case.