Releases: solus-project/linux-steam-integration
v0.7.2
The v0.7.2 release of LSI has many new cool fixes and features, including:
- Initial snapd support
- New Unity "black screen of nope" workaround
- New
lsi-exec
general-purpose binary - Massively enhanced shim
- And loads more :) Read the changelog! :P
intercept changes:
- Support
openal-soft
->openal
soname rewrite - Blacklist vendoring of
mpg123
,freetype
,zlib
- Modify SDL vendor blacklisting/transmute rules to apply to well known names only
- Rewrite
libcurl.so.3
tolibcurl.so.4
- Support Fedora
libbz2
soname transmute - Rewrite
libudev.so.0
tolibudev.so.1
- Permit
html5_app
to loadwidevine
modules for encrypted content playback - Permit
swiftshader
for CPU based GL acceleration on slower cards in Steam client - Fix vendoring rules for
libstdc++.so.6
to apply to games on separate Steam Libraries (partitions) so that Black Mesa launches again.
shim changes:
It also features a new generic lsi-exec
entry point. This entry point is used by the main steam
(or lsi-steam
) binary, and can be used to execute any given program under the LSI environment. This is useful for debugging. Future versions will add support for some GOG titles (ongoing).
- Add support for XDG specification (
XDG_CONFIG_HOME
, etc) - Reworked environment bootstrap to be robust and respect existing
LD_PRELOAD
variables, allowing Simple Screen Recorders glinject to work. - Export
DBUS_SILENCE_WARNINGS
for patched d-bus to fix message spam (only useful with this non-upstream patch or using the LSI snap)
redirect changes:
The redirect
module now has a new workaround for the "Unity Black Screen Of Nope" issue. This issue is known in older Unity3D builds where the output renderer is clamped to 0x0
resolution when in fullscreen borderless mode. Many games default to this, hence the expression "black screen of nope".
To alleviate this issue, the redirect module emulates the behaviour of the -screen-fullscreen 0
CLI argument. The $XDG_CONFIG_HOME/unity3d/*/prefs
file is abstracted through SHM (shm_open
) and we rewrite the config on save/launch, writing an initial config if one doesn't exist.
Specifically, we change a single preference on the fly:
<pref name="Screenmanager Is Fullscreen mode" type="int">0</pref>
This means all Unity3D games using this older prefs path will default to launching as a windowed game, even if the configuration already existed with fullscreen being activated. This alleviates the issue for many games (tested with "Keep Talking And Nobody Explodes" and others) - but obviously forces these games to not know about the fullscreen setting anymore. You can enable this again in-game, and this is effectively the price to pay for general compatibility. The game authors can alleviate this by updating to the latest build of Unity3D and issuing new Linux builds. You may also turn off this option through the lsi-settings
UI if you do not have any games that suffer from this common bug.
snapd support:
The new shim
architecture shared by the lsi-exec
and steam
/lsi-steam
binary entry points now has support for running within snapd, within the solus-runtime-gaming
and linux-steam-integration
snaps.
- Support full environment bootstrap, and construction of
XDG
directories - Snap environment pivots home to
$SNAP_USER_COMMON
for more efficient/sane update paths - Supports
vdpau
from host NVIDIA files dynamically - Support proprietary NVIDIA drivers from host dynamically (
/var/lib/snapd/lib/gl
and/var/lib/snapd/lib/gl32
) - Support host (and runtime) Vulakan ICD files dynamically (
/var/lib/snapd/lib/vulkan
)
Upstream snapd work:
The following changes have happened upstream to allow support for LSI:
General support for biarch distros/Solus as a runtime snap:
- canonical/snapd#3974
- canonical/snapd#3975
- canonical/snapd#3976
- canonical/snapd#3977
- canonical/snapd#3978
- canonical/snapd#3980
LSI Specific:
v0.6 - "You're a Wizard, Harry"
Linux Steam Integration (LSI) 0.6
This is a rather large release for LSI, focusing on improving compatibility
and security for gamers.
This release also features a new LD_PRELOAD
based liblsi-redirect.so
to help
with some bugs in ARK: Survival Evolved
and Project Highrise
. Read down for
more details!
New UI
liblsi-intercept.so
- Transmute vendored SDL libraries to host names
- Prevent games from using vendored libcurl
- Rewrite XNA/Mono
dlopen()
requests to use host libraries where possible - Prevent games from using vendored
openssl
libraries - Whitelist swiftshader
libGLESv2.so
- Prevent games from replacing the rest of
mesa
libs - Prevent games from using some common vendored GLU/GLEW libraries
- Redirect broken
/Plugins/x86/
dlopen()
requests to the proper directory (/Plugins/x86_64/
) - Whitelist
libx264
vendoring in the Steam client - Add new system to allow redirecting LibreSSL linking to a host library, which can be the native
libSSL or an alternatively named library (i.e Solus haslibssl-libressl.so
). This will help to
improve security for certain ports, along with the existing SSL/libcurl intercepts. - Fix preload failures for Mono games attempting to load
.dll.so
files when the.dll
path is the
correct one (Helps with "black screen of nope" issues)
liblsi-redirect.so:
- Introduced this
LD_PRELOAD
based module to fix games on the fly - Override
open()
system call to fix "ARK: Survival Evolved" using broken shader assets (requiresTheCenter
DLC) - Override
fopen64()
system call to fix "Project Highrise" attempting to use a preference directory as a file and then crashing - Introduced profile system to allow explicit + safe matching of games, with a view to extending this in future.
common:
- Lots of cleanups
- Much nicer logging system (
LSI_DEBUG=1 steam
) - Introduced a
VDF
(Valve Data Format) file parser to support multiple Steam installation directories. - Shared much of the code-base between the various modules.
lsi-settings changes:
- Completely revamped the UI
- Dynamically updates state based on selections
- Writes settings when closing the window, no need for extra buttons
- Uses CSD under supported desktop environments (dynamically)
- Community translations, thank you community!
Raw changelog commits.
v0.5: "Vendor offender"
This release is a slight refactoring to add a fallback "vendor offender" mode to liblsi-intercept.
In this fallback mode, LSI will ensure that certain vendored libraries are blacklisted which ensures certain
games (Like Black Mesa) will work correctly with the open source drivers.
This matters for distributions using the new C++ ABI, and games shipping the old C++ ABI as a vendored lib.
This resolves the typical issue seen in Steam on open source drivers:
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
With this LSI update, you'll be able to play BLM and other games without issues.
Outside of this, 0.5 builds on the previous updates to clean up the codebase, fix the ABI symbol visibility in the intercept lib, and fix the build system to always respect -Dwith-steam-binary=
to allow masking of the real Steam path even when using the co-exist shim mode.
v0.4.1 - minor integration fixes
This is a minor update to 0.4
- improving the meson
and liblsi-intercept
integration
- Improve documentation
- Fix
meson
build issues withmeson_options.txt
(thanks @alunux) - Deduplicate
liblsi-intercept
whitelist - Add
-Dwith-new-libcxx-abi=true
build option. Please use this if using GCC 6 or higher, so that fallbackLD_PRELOAD
is supported correctly when disabling the native runtime and using the Steam provided runtime.
v0.4 - with libintercept
This release of LSI adds a new "liblsi-intercept", which controls the dynamic linking for the Steam binaries,
so that many long standing issues are now solved, such as crashes on start, broken full screen views, etc.
See the Solus G+ post for more details on this release.
This package has now switched to meson, so please read the meson_options.txt
and sample .sh
files to see how to build this. Note you should ship both a 32-bit and 64-bit build of the intercept library to get full functionality.
For hints on how to package this for your distribution, see the Solus package.
Always take patches after the release if possible. A new point release will be coming soon to address
any issues found this week in testing of 0.4
v0.3
Version 0.3 includes various changes:
- Use a submodule for
libnica
and drop our modified copy, simplifying maintainence - Use latest
libnica
version with many cleanups/fixes - Support latest runtime requirements by preloading
libxcb
on native runtime. - Support a new
--disable-replace-steam
option.
By default, LSI will replace /usr/bin/steam
with it's own shim. This was to enable easier
integration into distributions at a root level, as seen in Solus. However, this made it inaccessible
to users who currently do not have LSI available.
To address this, and to stave off the latest croppings of butcherscripts that make actual alterations
to the Steam runtime, vs the passive LSI override approach, this new option will instead generate
the following files:
/usr/bin/lsi-steam
/usr/share/applications/lsi-steam.desktop
This will ensure there is no path-conflict with existing Steam, and in turn lsi-steam
will invoke /usr/bin/steam
.
Users can then use the LSI Steam
option in their menu to launch Steam via the LSI Shim. Those
building LSI should also pass --enable-frontend
if providing a package, so that users can access
the LSI Settings UI - to enable control of the runtime aspects.
N.B: Ensure you use the provided .tar.xz
tarball, it contains the submodule libnica
. Autogenerated GitHub tarballs do not.
v0.2
- Fix Arch Linux support
- Cleanup the lsi-settings UI a small bit (could do with some design-help here if anyone is interested)
- Code cleanup
v0.1
Initial release of linux-steam-integration for validation within Solus
LSI is completely distro agnostic, however, and you should check the root README.rst
for information on how to integrate into your solution.