Combining the Solus runtime and Linux Steam Integration project with Snaps for universal gaming
This is currently a Work In Progress.
We're now undergoing the upstreaming process for the new steam-support
interface, as such
consider the existing snaps broken, and you in need of a new snapd with the new support. We're
also going to drop devmode
support now and move to strict
confinement, so please consider
the vast majority of this document incorrect.
This is an ongoing effort to produce snaps to provide the Steam* client, Linux Steam Integration project, and Solus packages to create a true "universal app" variant of Steam that will work on every Linux distribution in the same way, while mitigating many of the runtime issues.
This isn't just a "native Steam" effort, LSI is a highly complex project that seeks to replace the runtime almost entirely, and fix many issues. Integrating LSI is also a large undertaking - thus Solus is now seeking to share our work on our own runtime and LSI implementation with the rest of the Linux world for a pain-free and consistent gaming experience.
A large element of this is also to help developers and studios targeting Linux as a platform to have a singular target that would work across all Linux distributions, and provide peace of mind that their games would work as intended. Additionally, as the keepers of LSI, we can rapidly deploy changes to LSI and the runtime to better support the games and alleviate regressions before they hit users.
runtime-snaps is a Solus project
Runtimes:
solus-runtime-gaming
Applications:
linux-steam-integration
+steam
(single snap)
Note that for now we'll not be focusing on strict confinement, so the snaps
should be installed with --devmode
until such point as proper confinement
is feasible.
We are not currently planning on making an SDK available, as the runtime will primarily be derived from the Solus repositories, with minor layering happening within the local runtimes.
As and when we have the core components in place we can start discussions around SDK + debugging availability.
You must be on Solus to build these snaps. You do not need to be on Solus to run these snaps.
- snapd 2.29.2 + patches
- solbuild (ensure this has been initialised on
unstable-x86_64
)
- https://github.com/snapcore/snapd/commit/ec4f3c0774620dd2bb6df765b337fa8a67d2afc8 (patch)
- canonical/snapd#4207 (patch)
Note: All of these patches are in Solus
After installing the relevant snapd, ensure your apparmor rules are applied and snapd has been restarted. Be lazy, reboot. People do it.
For Ubuntu users you may use the Snappy Edge PPA
sudo snap install --edge solus-runtime-gaming
sudo snap install --devmode --edge linux-steam-integration
snap run linux-steam-integration
sudo ./round1.sh
sudo ./mkapp.sh
You must first remove the existing installs if you've already run this step before:
sudo snap remove solus-runtime-gaming linux-steam-integration
The installation order is important, as LSI depends on the base runtime snap:
sudo snap install --dangerous solus-runtime-gaming*.snap
sudo snap install --dangerous --devmode linux-steam-integration*.snap
snap run linux-steam-integration
This will drop you to a shell within the runtime and allow you to execute LSI's Steam shim with debugging enabled.
snap run --shell linux-steam-integration
$ export LSI_DEBUG=1
$ $SNAP/linux-steam-integration
Tracking some currently known shortcomings here:
- No udev roles exposed to host. Talking with upstream to improve this in a new snapd interface
- No testing yet done outside Solus! Need to test biarch + multiarch distros with NVIDIA & open source drivers.
- "Home" for Steam is within the snap root. Removing snap will uninstall those local games
- Requires
--devmode
install as confinement isn't yet finished. LSI_DEBUG
will cause crashes on Ubuntu (potentially stack size issue?)
Copyright © 2017 Solus Project
runtime-snaps is available under the terms of the GPL-2.0
license.
The distributed binary snap will fall under multiple licenses, consult the included packages to determine licensing details for the entire binary image.
* Some names may be claimed as the property of others.