Chapter 5

Games

You can not play games under Linux!

Yes I can 😏

…and you could, too.

*Limiting myself to flight/space sim stuff that I own and play regularly here. There is more, of course.

Beko Pharm Sep 14, 2023

License

This content is, unless otherwise noted, licensed under Creative Commons Attribution-ShareAlike 4.0 International license

Subsections of Games

Elite Dangerous

1.0 2.0 4.0

Visiting Hong Kong cavaliers
Visiting Hong Kong cavaliers

Primary Buffer Panel

All works.

There are a bunch of videos showcasing Elite Dangerous with my Primary Buffer Panel on my YouTube and PeerTube accounts.

Launch parameters

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

I launch Elite Dangerous from Steam and for most people it’ll be just click Play. Elite had this atrocious overloaded and slow launcher though so I switched to MinEdLauncher instead, which would also kindly chainload further 3rd party apps for me.

The new launcher Elite Dangerous got a few weeks ago is a lot faster and also very minimalistic. Good thing we have choices though. Here are a bunch of ways I launch Elite depending on what I’m going to do:

Launch within gamescope for proper screen size, show MangoHud overlay, use MinEdLauncher and launch directly into Elite Dangerous: Odyssey:

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – mangohud ./MinEdLauncher %command% /autorun /autoquit /EDO

Start MinEdLauncher from a gnome-terminal and launch directly into Elite Dangerous: Horizons:

gnome-terminal – ./MinEdLauncher %command% /autorun /autoquit /EDH

Start MinEdLauncher from a gnome-terminal and launch directly into Elite Dangerous: Odyssey while allowing access to the Vulkan rendering for recording in OBS Studio

obs-gamecapture gnome-terminal – mangohud ./MinEdLauncher %command% /autorun /autoquit /EDO

Star Citizen

1.0 2.0 4.0

Learning how to fly in Star Citizen in an asteroid field
Learning how to fly in Star Citizen in an asteroid field

Primary Buffer Panel

Star Citizen does not export any kind of API to fiddle with. Sadly I doubt it’ll ever happen. Heck they even added EAC recently and the moment someone even mentions this they get dogpiled by competitive players whining that this would make bots possible. No, this is not how computers work. Bots happen with or without a provided API.

Anyway, this is why I can not really show live game data on the MFD or control the status indicators properly. I can only guess based on button presses what they should currently display but that is off fast. Heck, even the game itself has broken status indicators, like stuck missile warnings or a broken Altimeter.

There are a bunch of videos showcasing Star Citizen with my Primary Buffer Panel on my YouTube and PeerTube accounts.

Launch parameters

This is one of the few games that I do not have on Steam for obvious reasons. Lutris has me covered though and the Star Citizen Linux User Group (LUG) does a very of a good job in maintaining the lug-helper scripts collection for easier installation and configuration of Star Citizen on Linux PC. It also takes care of the still persisting EAC issue for Linux gamer: https://github.com/starcitizen-lug/lug-helper

Referral Code

Yeah no. Fck this πŸ’©. Get on the hype train or leave it. Personally I got the Aurora starter package for my birthday and that’s it. It’s an awesome tech demo, a great walking simulator and a bug feast with a very… unhealthy community forum. It’ll also probably never finish.

I’ll keep watching from the sides but I won’t pour any money into this until the focus shifts more to simulation that is not even more PvP. This includes an often requested API.

X4: Foundations

1.0 2.0 4.0

Watching the completion of an Asgard battleship
Watching the completion of an Asgard battleship

Primary Buffer Panel

Ah yes… my favorite space sandbox. One of the games I keep blogging about a lot. This is the game I hacked a LUA plugin for to get game data out of the game. I’m also sideloading LuaSocket for the communication with my plumbing pipeline. I’ve yet to write up in detail how I managed to do this but the socket server implementation is already avaiable on https://github.com/bekopharm/x4-projects/wiki/Quick-manual

There are a bunch of videos showcasing X4: Foundations with my Primary Buffer Panel on my YouTube and PeerTube accounts.

Launch parameters

Nothing special. The game does offer the proper resolutions even for a multihead setup in windowed mode. I usually run it like this so sound and rendering doesn’t stop when the game looses window focus:

./X4 -nosoundthrottle -nocputhrottle -skipintro

It also allows resizing of the game window so this can even be scripted e.g. with wmctrl when the game is already running:

wmctrl -x -r X4.X4 -e 0,0,109,5760,1100

Takes a few second to re-init rendering though.

Head tracking

The head tracking is explained in great detail here. Sadly I’d have to settle with Wine because the native Linux version has no head tracking capabilities. I tried to feed this via UDP from my own extensions but the camera setter function is sadly not exposed in the API and will probably never be (I asked).

Best I can do is triggering the camera hotkeys for each corner via a virtual joystick device from Opentrack. Something still on my list to test is emulating mouse input for a free lock-around. This does usually block other joystick axis though so it may not be feasible.

The current solution works, albeit it’s not perfect.

X Rebirth

1.0 2.0 4.0

Primary Buffer Panel

Approaching a plot ship in X Rebirth
Approaching a plot ship in X Rebirth

This game works internally basically like X4 so it may be possible to get everything going but frankly I never bothered. In fact many X4 extensions re-use content from Rebirth and it’s modding wiki is one of my most important sources for X4 too.

I mostly list it here because I do start it on occasion for it’s story. It also looks a lot more alive than X4 and is not that resource hungry. There’s also a VR version but I don’t own any VR hardware so I never tried.

Launch parameters

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

IL 2 Sturmovik

1.0 4.0

A typical ending of me in IL 2 Sturmovik - parachuting down to the ground
A typical ending of me in IL 2 Sturmovik - parachuting down to the ground

Primary Buffer Panel

TODO: IL 2 Sturmovik details

I honestly can’t tell any more. I think most of this worked but I didn’t play it for years. I’ve yet to try this once more but my sporadic interest in this period is usually very short. Nevertheless I did play it sometimes usually with me ending parachuting down to the ground (or dying in a burning cockpit) 🀷

Launch parameters

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

House of the Dying Sun

1.0 2.0 4.0

Entering a battle in House Of The Dying Sun
Entering a battle in House Of The Dying Sun

Primary Buffer Panel

I don’t think House Of The Dying Sun has any API to connect to at all. I never bothered. It’s fun but very very short. I’m also unsure if this game supports HOTAS or any joystick at all.

Head tracking works flawless.

There are a bunch of videos showcasing House Of The Dying Sun on my YouTube and PeerTube accounts.

Launch parameters

This remaps a X52 joystick to a gamepad and starts the game in Steam.

SDL_GAMECONTROLLERCONFIG=“03000000a3060000620700001101000016991890,Logitech X52 Professional H.O.T.A.S.,platform:Linux,a:b2,b:b3,x:b4,y:b1,back:b9,start:b8,guide:b10,leftshoulder:b30,rightshoulder:b6,leftstick:b7,rightstick:b15,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:b0,righttrigger:b5,dpup:b19,dpleft:b22,dpdown:b21,dpright:b20,” %command%

Demo

Watch this video on YouTube Vimeo PeerTube BekoPharm

That’s also one the the games that play great via our Steam Link on the 4K display in the living room πŸ€“

Playing House Of The Dying Sun with a Steam Controller via Steam Link
Playing House Of The Dying Sun with a Steam Controller via Steam Link

Kerbal Space Program

4.0

Kerbals close to exploding
Kerbals close to exploding

Ah yes, Kerbal Space Program do we, me and the kids, only play for the explosions. While the game does feature head tracking and stuff via plugins I did never bother to set it up. It is a Linux native though so very painless to start.

Launch parameters

-monitor 1

Yeah, that’s all. Just pointing it to a specific display because it would always use the primary display otherwise.

Rebel Galaxy Outlaw

1.0 2.0 4.0

Approaching a planet in Rebel Galaxy Outlaw
Approaching a planet in Rebel Galaxy Outlaw

Primary Buffer Panel

I don’t know of any API for Rebel Galaxy Outlaw but it’s a fun game with great sound tracks that I sometimes play with the children. Don’t think it even has head tracking support too.

And there will never be more because some entitled little brats mobbed the creators out of the whole god damn industry for taking an exclusive deal πŸ–•

Launch parameters

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

I launch Rebel Galaxy Outlaw with Lutris using gamescope.

Demo

Watch this video on YouTube PeerTube BekoPharm

In the beginning I did remap my X52 joystick to several virtual gamepads using MoltenGamepad before I noticed that tiny little dropdown in it’s launcher where it is possible to switch from gamepad to joystick. Boy did I feel stupid but frankly that is the first game I know of that does distinct between those two input methods. A rather weird design choice IMHO.

This image is from a test placement to see how the Primary Buffer Panel would look and feel before everything was wired up again.

Playing some RGO while having btop showing system resources
Playing some RGO while having btop showing system resources

FlightGear

1.0 2.0 4.0

I can see my house - in FlightGear
I can see my house - in FlightGear

Primary Buffer Panel

Sometimes I fire up FlightGear, one of the oldest FOSS games in simulation. Since it’s a native Linux game it runs rather painless.

Every landing you walk away from is a success

Thanks to FlightGear I’m very confident that I am now capable of crashing a Cessna just about anywhere.

Head tracking is provided via UDP from a plugin. That’s all explained on https://wiki.flightgear.org/Opentrack and fairly straight forward.

I’m pretty sure that I can connect my plumbing pipeline to FlightGear as well but I never bothered so far. It is after all open source software and many plugins exist already. It’s on my bucket list πŸ‘Œ

Launch parameters

--addon=full-path-to-the-headtracker-folder and --generic=socket,in,60,localhost,5542,udp,opentrack for the head tracking. Both can be configured in the FlightGear though.

Diaspora: Shattered Armistice

1.0 2.0 4.0

Taking off with the Raptor
Taking off with the Raptor

Primary Buffer Panel

Diaspora: Shattered Armistice is a freeware space sim based on the Battlestar Galactica show - and as old BSG fan I just have to play this from time to time. A native Linux version exists but it’s so old that I run into several walls compiling it and simply went with the last pre-build Windows release in the end launching it via Lutris.

Sadly it does only support one joystick so my Primary Buffer Panel has to act as a keyoard. There is also the issue that the GUI gets stretched weirdly with a ultra wide resolution but it does start and play alright. I’m hoping to come back to this one day and find out how to connect my blinken lights at least.

Launch parameters

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

Demo

Watch this video on YouTube PeerTube BekoPharm

Everspace (TODO)

4.0

Everspace main menu
Everspace main menu

TODO:

  • plays nice via Steam Link
  • Linux native

No Man's Sky

1.0 2.0 4.0

Entering atmosphere in No Mans Sky
Entering atmosphere in No Mans Sky

Primary Buffer Panel

Ah yes, No Man's Sky really changed a lot over the years. What it still doesn’t do is supporting joysticks. Or head tracking. We’re very used to this by now though and manage.

Launch parameters

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

This remaps a virtual joystick from Opentrack to the axis of a gamepad used for look-around in NMS.

SDL_GAMECONTROLLERCONFIG=“000022e86f70656e747261636b206800,opentrack-to-nms,rightx:a3,righty:a4,platform:Linux,crc:e822,”

Head tracking

NMS does support a gamepad but it also reads/maps all gamepads to a single device. It makes no difference between multiple gamepads!

This leaves me with a very limited amount of possible buttons on the HOTAS after mapping that to one virtual gamepad using MoltenGamepad (I usually split that one up into multiple gamepads for braindead games).

So for additional buttons I used AntiMicroX to map the rest as keyboard presses.

Doing so I noticed that NMS does “look-around” on the right stick and this is where Opentrack comes into the play. It offers a joystick output (using evdev) and that is also just… a gamepad! Needs some remapping though to get pitch and jaw to the proper axis for NMS. This is done via SDL env (basically what Steam does under the hood but boy their GUI for that sucks):

SDL_GAMECONTROLLERCONFIG=“000022e86f70656e747261636b206800,opentrack-to-nms,rightx:a3,righty:a4,platform:Linux,crc:e822,”

And there you have it. NMS with my trusty old X52 Pro and a DIY headtracker for 5 bucks πŸ€“

Watch this video on YouTube PeerTube BekoPharm

PS: I’m aware that the recording quality sucks. This was very spontaneous with a webcam sitting on my chair. I basically just finished my happy dance that this started working properly and decided to smash that recording button. PC was not even in gamemode.

Fly Dangerous

1.0 2.0 4.0

A very early version of Fly Dangerous alpha
A very early version of Fly Dangerous alpha

Primary Buffer Panel

What’s not to like about Fly Dangerous. It’s a FOSS 6dof racing game with a Newtonian flight model similar to Elite Dangerous, does HOTAS, Opentrack and a lot of other stuff, like VR. It even offers a UDP port to retrieve ship telemetry. A perfect candidate for a simulated cockpit and I’m with it for quite some time. Integrating it into my plumbing pipeline was a breeze.

There are a bunch of videos showcasing Fly Dangerous with my Primary Buffer Panel on my YouTube and PeerTube accounts.

Launch parameters

I usually play Fly Dangerous on Linux PC. The Linux version 5 defaulted to OpenGL and this resulted in like 25 FPS for me and the input of my X52 Pro (mapped as virtual gamepad) was so laggy that I could sip coffee during each course correction. This was when I remembered the magic parameter -force-vulkan from other Unity games and from here it was smooth sailing. Eventually I ended up with the game start options obs-gamecapture for recording, mangohud for some FPS info and -force-vulkan for… well, FPS.

obs-gamecapture mangohud %command% -force-vulkan

I switched to Proton because I was eager to see some upcoming changes, like head tracker support, on the public_beta branch. And while this works I was once more flabbergasted how complicated it is to set my desired display resolution of 5760x1200. I’m using a multihead setup with several displays and as usual the game engine would not let me simply set that. Even in windowed mode (I mean I get that this won’t work with fullscreen).

Like most games does this one also not detect a screen layout but only the primary display on a Linux PC so it won’t offer the maximum resolution possible e.g. with a triple head setup πŸ–₯️πŸ–₯️πŸ–₯️. This can be worked around in multiple ways, e.g. with configuring a virtual desktop in the WINEPREFIX, by adding a virtual monitor to the system or simply by making use of gamescope, the SteamOS session compositing window manager.

Here is an example how games may be started from Steam by adding the following commands to the start parameters (That’s basically the same for e.g. Lutris btw).

gamescope -h 1200 -w 5760 -H 1200 -W 5760 -b -e – %command%

This is not needed if only one monitor is used for gaming.

There are several ways to work around this, especially with Proton, but I was looking for the prefs file I know from Linux. I found it in the end in the file compatdata/1781750/pfx/user.reg (that’s like the Windows registry but as plain file read by Wine) where the values are stored as dword under [Software\\StarGoat\\FlyDangerous]. In hex!

<pref name="Screenmanager Resolution Height" type="int">1200</pref>
<pref name="Screenmanager Resolution Width" type="int">5760</pref>
<pref name="Screenmanager Resolution Use Native" type="int">0</pref>
What is a screen anyway

Why games|engines in 2023 still seem to have ideas about screen layouts is frankly beyond me.

Head tracking

Just works with Opentrack because Fly Dangerous supports this via UDP port.

Spacebourne 2

1.0 2.0 4.0

Primary Buffer Panel

This game does not yet support ultra wide and has no API or head tracker support that I know of. The HOTAS support is wonky at best. It’s also still in development so I may have to revise that at some point but it is a lot of fun. I’ve a gameplay video on my YouTube and PeerTube channel.

Launch parameters

Edited GameUserSettings.ini and Settings.ini in compatdata/1646850/pfx/drive_c/users/steamuser/AppData/Local/SB2/Saved/Config/WindowsNoEditor to get here:

GameUserSettings.ini:ResolutionSizeX=5760
GameUserSettings.ini:ResolutionSizeY=1200
GameUserSettings.ini:LastUserConfirmedResolutionSizeX=5760
GameUserSettings.ini:LastUserConfirmedResolutionSizeY=1200
GameUserSettings.ini:DesiredScreenWidth=5760
GameUserSettings.ini:DesiredScreenHeight=1200
GameUserSettings.ini:LastUserConfirmedDesiredScreenWidth=5760
GameUserSettings.ini:LastUserConfirmedDesiredScreenHeight=1200
Settings.ini:r.setres=5760x1200w

The maximum that the game allowed me was 3840x1200. I did write protect the files in the end to make the config persistent. Most UI elements center so it’s playable.

Demo

Watch this video on YouTube PeerTube