116 Commits
Author SHA1 Message Date
ahkok 6137c52bab Update README.md 2019-06-10 13:55:47 -07:00
ahkok 524810bbd2 Merge pull request #1 from sunnyflunk/beta
Allow steam to load private libpangocairo
2019-06-10 13:18:21 -07:00
Peter O'Connor d7006fdb74 Allow steam to load private libpangocairo
The latest steam beta now includes `libpangocairo-1.0.so.0` as a private
library. Currently an issue arises where it loads this file from the
distribution, but is incompatible with the privately loaded libpango due to
the lack of `pango_renderer_get_alpha` symbol.
2019-05-16 15:46:29 +10:00
Ikey Doherty 211ac7613c Any day now ...
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-03-20 17:54:38 +00:00
Ikey Doherty 5352b5deab Update README.md as I was off sick
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-02-06 10:41:26 +00:00
Ikey Doherty 54bd49281c Bump version to 0.7.3
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-15 12:00:18 +00:00
Ikey Doherty 8b09218039 Update README.md for the curious on reddit
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-15 11:58:33 +00:00
Ikey Doherty 89e7b7cfbb redirect: Avoid use of uninitialised LsiRedirectOperation
While admittedly there is no case of us using any invalid LsiRedirectOperation,
there exists the future possibility for invalid inserts into the op table
when we encounter an unhandled op type.

Knock it on the head and bail early, as appropriate.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-08 10:53:02 +00:00
Ikey Doherty ffe7825f62 Properly set preload libs in conf
Weird janky escaping is left-over from our time as an
autotools project and should've been fixed long ago as
it was obvious the compiler warnings were legit.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-08 10:49:55 +00:00
Ikey Doherty 0f24683688 meson: Start a cleanup of the build files
Additionally, add an output report to show at build time what we're
configured to do, ala autotools.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-08 10:28:44 +00:00
Ikey Doherty abcb5feeaf TEST_LIST: Add Oxygen Not Included as working perfectly
Hey, it came in a bundle deal with Don't Starve.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-07 12:21:06 +00:00
Ikey Doherty 6963c34892 intercept: Cleanup now new clang-format is less of a PITA
Old clang-format 3.8 broke the styling when using ifdefs, let's get
it fixed up now.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-07 11:50:46 +00:00
Ikey Doherty 8d9aac19f6 TEST_LIST: Document fact that Don't Starve works now
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-07 11:39:19 +00:00
Ikey Doherty c4ded16115 intercept: Only blacklist SDL overrides on 64-bit native
Instead of the potential ugly route of whitelisting (which still might be
needed in future) we'll allow the SDL2 core library to be overriden only
on 32-bit builds of Steam games.

This has the interesting side-effect of enabling Don't Starve to work
correctly, as it ships a custom patched (incompatible ABI) version of
SDL2 to change the mouse event handling.

If it turns out random 32-bit games break by using their own old and
unmodified builds of SDL2, we'll implement whitelisting. For now, this
change should suffice.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-07 11:07:15 +00:00
Ikey Doherty 6bc12dde6e Update TEST_LIST for Don't Starve weirdness
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-06 13:05:20 +00:00
Ikey Doherty 8968b69788 TEST_LIST: Document weirdness with Don't Starve's SDL library
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-04 20:50:31 +00:00
Ikey Doherty 6a5fff703c TEST_LIST: Don't Starve requires curl-gnutls, working on it atm.
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-04 12:10:29 +00:00
Ikey Doherty 11e9ff2137 Add a couple of games to the test list
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-02 14:41:53 +00:00
Ikey Doherty 05343c140f Add an initial testing list to help with next releases
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-02 14:35:10 +00:00
Ikey Doherty c03d5cdff8 mkgobuildy: Clean up and reorganise
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-02 13:41:27 +00:00
Ikey Doherty 4c68fcc7d7 Update copyright ranges to be correct
Previous copyright assignment was to myself but the range doesn't account
for the project WIPs and lifetime, so retroactively fit them to the right
year range (project duration). Now set ongoing copyright for future and
current changes.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-01 14:28:43 +00:00
Ikey Doherty 09c84f0866 libnica: Sync with upstream master
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-01 14:22:18 +00:00
Ikey Doherty fc9ae2e9c2 shim: Use setarch instead of relying on linux32 link
On some distributions, `linux32` command is not readily available in the
default install. However, `setarch` is commonly available as part of the
`util-linux` packaging, so let's invoke `setarch` directly now without
relying on links.

Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-01 14:16:51 +00:00
Ikey Doherty 9624bde1b9 mkgobuildy: Gracefully handle missing linux32 availability
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2019-01-01 14:04:34 +00:00
Ikey Doherty a951a49910 frontend: Apply update-format.sh
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2018-12-21 14:22:48 +00:00
Ikey Doherty fc88ee1496 Improve formatting in README
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2018-12-21 13:53:56 +00:00
Ikey Doherty ae48c61932 Update README.md for this fork
Signed-off-by: Ikey Doherty <ikey.doherty@intel.com>
2018-12-20 17:08:23 +00:00
Ikey Doherty fb56eca35d Merge pull request #66 from davidpocina/startup-wm-class
Add StartupWMClass to lsi-steam.desktop
2018-05-20 16:38:25 +01:00
David Pocina 1c3a39ebfa Add StartupWMClass to lsi-steam.desktop 2018-05-20 16:13:52 +01:00
Ikey Doherty 62cf7443ac intercept: Support new sonames in Feral's Tomb Raider port
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-04-20 08:47:14 +01:00
Ikey Doherty 46c423d065 shim: Remove legacy (non GLVND) path support for snapd runtime
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-01-29 18:28:07 +00:00
Ikey Doherty c34938a43a Fix incorrect snap name (fixes issue #50)
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-01-04 21:06:30 +00:00
Ikey Doherty 62bd3dffb7 redirect: We might return NULL here.
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-24 18:33:22 +00:00
Ikey Doherty 5c809fdc07 redirect: Add new override on getpwuid
This is required for some Aspyr ports which will form their own fixed
paths to directories based on getpwuid() as opposed to using the environment
`HOME` variable.

With this we force the home directory to be consistent under snapd and
alleviate any issues with denials based on home directory lookups.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-24 18:29:17 +00:00
Ikey Doherty e7eae9d577 shim: When in snapd mode, chdir to SNAP_USER_COMMON
This will alleviate some weird apparmor confinement denials when trying
to access the wrong directory.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-24 18:10:35 +00:00
Ikey Doherty a1c2235120 Add new snapd pulseaudio script workaround
This is as yet untested, but the basic idea is that when games call out
to `system("pulseaudio --check > /dev/null 2>&1")` we'll put our script
in their way and unconditionally return 0. This is for games using libfmod,
which will die when trying to execute pulseaudio right now.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-24 15:12:43 +00:00
Ikey Doherty 5b59075ec0 Revert "intercept: Allow disabling (build-time) the udev redirection"
This reverts commit c640f2f215.

Turns out this is due to a very weird situation where Arch has their
libudev.so.0 as an incompatible API which all current games expect to
be of libudev.so.1 ABI, and isn't something LSI should be fixing, the
distro should.
2017-12-23 21:30:54 +00:00
Ikey Doherty c640f2f215 intercept: Allow disabling (build-time) the udev redirection
Arch Linux uses a funky udev shim package which is incompatible with
our udev workaround, so allow them to disable it and use their shim
instead (as some packages are apparently **built** against the shim.)

For all other distros which are binary-built in ABI lockstep with udev
proper, keep it enabled.

This fixes #46.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-23 19:52:37 +00:00
Ikey Doherty b80f79c8d0 Resync po
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-20 16:32:17 +00:00
Ikey Doherty 851f354f9f Promote v0.7.2
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 15:36:35 +00:00
Ikey Doherty 10d3be6a38 redirect: Split all Unity code out to fix linking problems
This should fix our linking issues that appeared once we opted to include
the `fcntl.h` header, which adds `#define`s for the exact symbols that
we are trying to override.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 15:35:48 +00:00
Ikey Doherty c8a45b7303 Promote 0.7.1
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 14:22:20 +00:00
Ikey Doherty 1b932e94fa redirect: Demote debug to info
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 14:21:59 +00:00
Ikey Doherty 003c462a77 Bump version to 0.7
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 13:55:26 +00:00
Ikey Doherty 7880b98f87 Remove old test.sh - not needed
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 13:54:04 +00:00
Ikey Doherty a91a00f1f5 Sync po
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 13:53:32 +00:00
Ikey Doherty 5998318a20 po: Sync po for unity string
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 12:48:32 +00:00
Ikey Doherty 1a725088af po: Sync translations
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 12:47:35 +00:00
Ikey Doherty f185b54c4d Add new LSI Settings screenshot
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 12:47:20 +00:00
Ikey Doherty 368e6ca7c7 Document the new sexies
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 12:45:14 +00:00
Ikey Doherty f12643039a common: Return realpath'd config dir where possible
This ensures we only use a sane realpath and collapse the slashes where
we can to allow trivial string matching.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-19 12:23:20 +00:00
Ikey Doherty 7cfdd41c7c redirect: Reduce error to info
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-18 18:55:16 +00:00
Ikey Doherty 889a4a7b7b Allow disabling Unity hack by the lsi-settings UI
By default we will keep this enabled now.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-18 18:54:46 +00:00
Ikey Doherty 4f810bfe97 redirect: Add workaround for the Unity Black Screen Of Nope
If we detect access to a unity3D configuration file, we'll enter the
unity3d workaround mode. Through this mode we'll abstract the real
"prefs" file away into `/dev/shm` so that Unity games do not directly
access that file again.

If no original prefs file exists, we'll write a new prefs file with the
absolute minimum requirement, i.e. disabling of fullscreen mode by default.
If one DOES exist, we'll copy all of the prefs file **except** for the
fullscreen option, and again, disabling it.

Upon library exit, again, we'll duplicate the unity config to the real
target file from the shm file, with the rewritten fullscreen option.

The net effect is that we create a circle of consumption that forcibly
disables unity games of a particular age (using `prefs` file) to not
start in fullscreen mode, which almost always means one of two things:

 - Missing UI text elements
 - Unity3D clamps resolution to 0x0

Many ports aren't going to see updates to their Unity build for a long time,
or indeed, ever. Instead we work around this in LSI and sit in between the
game and the configuration file.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-18 18:26:09 +00:00
Ikey Doherty 97e5813e4c intercept: Allow html5app_steam to load widevine
This should permit the encrypted playback to work correctly once more.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-12-15 18:35:52 +00:00
Ikey Doherty 0faa29aecd intercept: Handle /steamapps paths for #41
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-24 17:47:55 +00:00
Ikey Doherty 383b6492b5 shim: Fix vdpau for potential issues with not breaking the path
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-24 06:06:21 +00:00
Ikey Doherty f8b583bc0b intercept: Handle override of libudev.so.0 -> libudev.so.1
This should help with issue #38 but will need validation.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-15 14:34:37 +00:00
Ikey Doherty 9975bd5780 data: Don't set $SNAP, let lsi-exec work that stuff out
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-15 00:27:06 +00:00
Ikey Doherty 00ee48ee22 data: If we're using snap mode, configure frontend to use lsi-exec
This will ensure that the settings UI will always work, which will
somewhat perversely use lsi-exec through the config that it sets to
launch itself to set the config of lsi-exec..

This will allow us to actually expose lsi-settings as a usable thing
within the snap, where it is currently omitted. If we're not using snapd
mode, we'll just keep the file how it used to look.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-15 00:15:05 +00:00
Ikey Doherty 16a0750ed2 Revert "data: If we're using snap mode, configure frontend to use lsi-exec"
This reverts commit 657a911004.
2017-11-14 23:55:02 +00:00
Ikey Doherty 947654d9d3 shim: Read config AFTER setting up the environment
Under snapd we forcibly change XDG_CONFIG_HOME away from the "norm", and
read before the variable is set. Thus, the config written by lsi-settings
is correct, but under snapd the wrong file would be read all the time.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 23:16:09 +00:00
Ikey Doherty c59949cf0e frontend: Fix copy/paste and actually update liblsi-intercept config
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 22:58:31 +00:00
Ikey Doherty 657a911004 data: If we're using snap mode, configure frontend to use lsi-exec
This will ensure that the settings UI will always work, which will
somewhat perversely use lsi-exec through the config that it sets to
launch itself to set the config of lsi-exec..

This will allow us to actually expose lsi-settings as a usable thing
within the snap, where it is currently omitted. If we're not using snapd
mode, we'll just keep the file how it used to look.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 22:44:55 +00:00
Ikey Doherty 1d339cab05 shim: Drop derpy errno based checks
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 22:23:33 +00:00
Ikey Doherty a518fc6720 shim: Use a less derpy error dialog.
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 22:09:50 +00:00
Ikey Doherty 03758879ab shim: Allow lsi-exec to use the system path (execvp) instead
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 22:07:10 +00:00
Ikey Doherty 7131fd9771 shim: Add a new lsi-exec binary
This binary will allow us to run any command using the full LSI environment
and fully set it up as we would for Steam, greatly simplifying the testing
of the snap (and even for non-steam games!)

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 22:03:44 +00:00
Ikey Doherty 5013e0d747 shim: Split majority of the code into shim.c
This helps separate the main launch entry from the bulk of the bootstrap
code, and will also allow us to build a new lsi-exec tool that will just
execute whatever you tell it to, with the full shim setup routine.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 21:53:18 +00:00
Ikey Doherty 05bd0e0dac common: Fix broken ikey mind - correctly build Steam path
Thanks to @TingPing for bailing me out of my own insanity.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 21:17:47 +00:00
Ikey Doherty aa1b7374db common: Respect XDG specification for directories
If `XDG_{DATA,CONFIG}_HOME` variables are set in the environment, use
those to ensure portability and integration with the platform. This ensures
we always use the right locations for accessing config files and the Steam
root.

This fixes #34.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 21:13:27 +00:00
Ikey Doherty 82130bfbe8 shim: Use SNAP_USER_COMMON for our home tree
LSI enables Steam, which will invariably have massive games on disk.
We do NOT want this large data being moved around between upgrades,
and need this data to be "sticky" and unversioned.

To alleviate le huge pains of upgrades, start using this directory before
we go into production. This will mean only one last switch of the games
tree.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 05:58:19 +00:00
Ikey Doherty d73b7e7381 shim: Support Ubuntu ICD files
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 04:43:53 +00:00
Ikey Doherty 9f57d0ebf0 intercept: Fix one of the Ubuntu crashes
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 03:58:41 +00:00
Ikey Doherty f8d12b9800 intercept: Fix compiler warnings
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 01:32:04 +00:00
Ikey Doherty b3a562f4f9 intercept: Remove old snapd paths
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 01:31:26 +00:00
Ikey Doherty 94e5d09eba intercept: When in Steam mode, try to find host libraries ourselves
This gives help when LD_LIBRARY_PATH is a bit busted, as the "normal"
operational mode gets more help than we currently give to games.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 01:30:37 +00:00
Ikey Doherty 04e32cd5c5 intercept: Attempt using existing code-paths for all snapd libgl work
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-14 00:24:16 +00:00
Ikey Doherty cd5a1e6f97 intercept: Clamp down that intercept properly
Again for #38

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 18:45:59 +00:00
Ikey Doherty 287781356c intercept: Help Fedora by redirecting bzip2 automatically
Fedora doesn't seem to have `libbbz2.so.1` so let's intercept requests for
this guy and send them to the proper `libbz2.so.1.0.6`.

This fixes #38.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 18:44:32 +00:00
Ikey Doherty 80603598af Only use the new "gl32" location from now on, drop old guy
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 03:46:24 +00:00
Ikey Doherty e81f379882 shim: Make the vdpau code handle biarch, multiarch, and host
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 03:03:56 +00:00
Ikey Doherty 8d7b56f68c shim: Get ready for the new Vulkan snapd changes
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 02:14:54 +00:00
Ikey Doherty 87fab0c747 shim: Prepare for gl32 snapd paths
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 01:35:46 +00:00
Ikey Doherty 208585eebc shim: Fix broken shim_export_ld_dir, export VDPAU_DRIVER_PATH
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 01:33:47 +00:00
Ikey Doherty 01237d30c6 shim: Take a far more robust approach to LD_LIBRARY_PATH
This ensures we correctly set up `LD_LIBRARY_PATH` with required extra
directories inside the snap environment - only if they actually exist.
This allows us to expand that search path to ensure that tls and vdpau
bits are available on multiarch systems, and things continue to tick
over as normal on biarch systems.

This is part of tackling issue #35.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-13 00:07:17 +00:00
Ikey Doherty 4b6ec38bbf intercept: Don't match non-cuda files
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-12 11:06:20 +00:00
Ikey Doherty 70fb1de048 Mark vulkan work done, add 2 more TODO items
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-11 23:31:11 +00:00
Ikey Doherty 393d335af4 shim: Add initial support for Vulkan under snapd
This will require modifications to snapd, but at the moment we'll attempt
to look for vulkan icd (`10*.json`) passed from the hostfs from their
proprietary NVIDIA driver within the GL shared directory.

If we find these files, we'll insert the `VK_ICD_FILENAMES` variable into
the environment, taking care to preserve the original glob order by doing
this part in reverse.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-11 22:26:52 +00:00
Ikey Doherty 02ccceae42 intercept: Fix swiftshader
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-11 05:39:04 +00:00
Ikey Doherty 2462f93f39 intercept: Never deal with /var/lib/snapd in DRI requests
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-11 05:05:13 +00:00
Ikey Doherty b34e3f928d shim: When Solus d-bus is used, silence endless D-BUS warnings.
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-11 04:37:09 +00:00
Ikey Doherty 9da279eeda intercept: Redirect all curl.so.3 to curl.so.4
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-11 00:19:32 +00:00
Ikey Doherty 8effde3adf Whoops.
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 23:27:06 +00:00
Ikey Doherty c7882a9ac7 shim: Ensure XDG_RUNTIME_DIR always exists
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 23:16:42 +00:00
Ikey Doherty 3e15d71936 shim: Make sure the user directories are set up under snapd
This fixes up the `XDG_*` variables and locations to be correct and
present when running under snapd.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 23:14:48 +00:00
Ikey Doherty 8d50a4f289 shim: Add some more bootstrap variables
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 23:07:39 +00:00
Ikey Doherty 589dda31a5 shim: Add new simplified variable management code
This will allow us to extend the number of bootstrap variables we need
to set up for snapd, and actually makes the existing code much simpler
to follow when dealing with existing environmental variables.

With this change we also introduce initial bootstrap for setting the PATH,
as it's incorrect on entering the snap.

This is part of the ongoing issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 23:00:17 +00:00
Ikey Doherty c2ba77b5ab Revert "intercept: Add initial test workaround for libpdf.so"
This reverts commit aa485def04.
We'll look elsewhere until this is solved..
2017-11-10 07:21:00 +00:00
Ikey Doherty aa485def04 intercept: Add initial test workaround for libpdf.so
We're seeing some games ship libpdf.so as a directory in their bin
directory with the real library in the lib directory, so this workaround
will hopefully alleviate the crash on start.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 07:11:08 +00:00
Ikey Doherty 6d2791b475 po: Sync lots of lovely translations :D
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 04:19:21 +00:00
Ikey Doherty 492d7d02f9 intercept: Add initial test fixes for open source drivers on snapd
This will forcibly perform redirects for "missing" DRI libraries to
help open source drivers actually work. This is as yet untested.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 03:46:56 +00:00
Ikey Doherty 8efc9a6b76 intercept: Use very explicit SDL blacklisting approach
This solves #31 by ensuring we only blacklist known library names that
we intend to override, and prevent ourselves from matching completely
moody names like "libSDL2_locale" by accident.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 02:23:00 +00:00
Ikey Doherty 00d0889280 TODO: Mark the snapd vars support as done
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 01:47:41 +00:00
Ikey Doherty 608907b6d0 shim: Fix uber-derp
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 01:33:31 +00:00
Ikey Doherty 68e3df8d1a shim: Ensure we fully set up the snapd environment
This saves us from having to rely on ugly shell scripts to bootstrap our
environment, as we're the primary entry point. We don't directly depend
on any redirected libraries, and can take care of the hand-over ourselves.

This is part of the ongoing work for issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 01:21:21 +00:00
Ikey Doherty a358864785 lsi: When ~/.config doesn't exist, create it
This helps with problems under snapd build which fails to correctly store
settings on exit, due to a missing directory.

This is part of the ongoing work for issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 01:15:29 +00:00
Ikey Doherty 60664c4c6b shim: Teach shim how to use $SNAP/ prefix for the "real steam"
This is part of issue #30

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 01:13:22 +00:00
Ikey Doherty e27d80156f shim: Teach shim how to set LD_AUDIT/LD_PRELOAD when built as a snap
This is part of issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-10 01:10:38 +00:00
Ikey Doherty 6dbc333ea0 Add big thingy about snap TODO in README
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-09 23:54:58 +00:00
Ikey Doherty 0e10afd27d intercept: Teach new snapd code how to handle NVIDIA issues
This performs the necessary internal redirections for biarch NVIDIA
libraries, as the primary directories do not contain the libraries.
Solus libraries will typically be resolved through "secure execution mode",
which is due to our security builds (full relro, etc.)

This change allows LSI to safely redirect NVIDIA linking requests for the
Steam client, using the hostfs libGL libraries dynamically.

This supports the ongoing work for issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-09 22:45:48 +00:00
Ikey Doherty 8d93b6b0ca intercept: Add support for snapd libGL redirection
Under a snapd environment, the dynamic linker gets very confused about
where libGL really is, and this causes 32-bit driver usage under LSI
to completely fall flat.

When snapd support is enabled, we'll check for specific path matches and
attempt to override the input request with the intended bi-arch replacement.
This doesn't yet support multiarch, but that will be added in time.

This is part of the ongoing issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-09 22:00:21 +00:00
Ikey Doherty 103ab0a673 intercept: Let's add some debugs to find out what is going on in snapd
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-09 19:23:19 +00:00
Ikey Doherty 5ed71d781e intercept: When built for snapd, do not override snapd private libs
Certain elements of snapd actually require the (ab)use of snapd to operate,
such as making the NVIDIA proprietary drivers available to the guest snap.
In this instance, if we happen to encounter a library from these search
paths we must unconditionally allow it to be loaded, so that we do not
break libGL resolution.

This adds initial support for issue #30.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-09 19:09:58 +00:00
Ikey Doherty 3eeb731224 intercept: Blacklist vendoring libmpg123/libz/libfreetype
Discovered while validating 'Overlord II', these libraries should be
provided by the LSI integrator, especially at such a low level in the
stack (and mpg123 being security sensitive.)

Additionally these files are relative to the CWD so got missed by the
previous "./" grouping, thus we'll conditionally replace these guys
with the host libraries per the blacklist only.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-08 01:40:46 +00:00
Ikey Doherty ce3cab3270 intercept: Rewrite libopenal-soft.so.1 -> libopenal.so.1
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2017-11-08 01:06:17 +00:00
60 changed files with 2670 additions and 297 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 104 KiB

+49 -21
View File
@@ -5,7 +5,7 @@ Linux Steam* Integration is a helper system to make the Steam Client and Steam
games run better on Linux. In a nutshell, LSI automatically applies various workarounds
to get games working, and fixes long standing bugs in both games and the client.
![screenshot](https://raw.githubusercontent.com/solus-project/linux-steam-integration/master/.github/LSI_Settings.png)
![screenshot](https://raw.githubusercontent.com/clearlinux/linux-steam-integration/master/.github/LSI_Settings.png)
In many cases this will involve controlling which libraries are allowed to be used
at any given time, and these libraries may be overriden for any of the following
@@ -15,40 +15,68 @@ reasons:
- Compatibility
- Performance
Additionally we apply dynamic workarounds to fix some filesystem path related bugs in Linux
ports (or even shader workarounds for ARK*) through our redirect module.
This project, and by extension the platforms it runs on, are not officially endorsed by, or affiliated with, Steam, or its parent company, Valve*.
This fork of linux-steam-integration is now being maintained separately from the original project, to suit the cadence and requirements of the
Clear Linux* Project for Intel Architecture.
This project will retain backwards compatibility with the original project at the time of forking to alleviate maintainer concerns, whilst focusing
on improvements to match a wider audience than the original project, and ensuring native runtimes continue to work unimpeded.
### Linking compatibility
With LSI, you don't need to worry any more about manually mangling your Steam installation
just to make the open source drivers work, or manually creating links and installing
unsupported libraries. LSI is designed to take care of all of this for you.
Many library names are redirected through the main "intercept" module, which ensures
games will (where appropriate) use the updated system libraries. Additionally the
module can override how games and the Steam client are allowed to make use of
vendored libraries. This will help with many launch failures involving outdated
libraries, or indeed the infamous `libstdc++.so.6` vendoring which breaks open
source graphics drivers on systems compiled with the new GCC C++ ABI.
### Apply path based hotfixes to games
The redirect module contains some profiles to allow us to dynamically fix some
issues that would otherwise require new builds of the games to see those issues
resolved.
- Project Highrise: Ensure we don't `mmap` a directory as a file (fixes invalid prefs path)
- ARK Survival Evolved: Use the correct shader asset from TheCenter DLC to fix broken water surfaces.
### Unity3D Black Screen Of Nope
Older builds of Unity3D had (long since fixed) issues with launching to a black
screen when defaulting to full screen mode. This is commonly addressed by launching the
games with `-screen-fullscreen 0`, and is due to an invalid internal condition clamping
the renderer size to 0x0 after setting the fullscreen (borderless) window size.
Note - updating these games to newer versions of Unity will fix this bug on Linux, however
LSI currently ships a workaround. This workaround will abstract access to the configuration
file in `$XDG_CONFIG_HOME/.config/unity3d/*/prefs` through the Linux `/dev/shm` system,
and will provide initial game configuration whilst also masking the harmful fullscreen
setting.
Net result - all Unity3D games using this pref path (the older generation) will start
in windowed mode always. They can be fullscreened from inside the game, and this will
help with making sure games **actually launch**.
### Notes
Note that LSI will not modify your Steam installation, and instead makes use of two
modules, `liblsi-redirect.so` and `liblsi-intercept.so`, to dynamically apply all of the
workarounds at runtime, which in turn is set up by the main LSI `shim` binary.
For a more in depth view of what LSI is, and how to integrate it into your distribution,
please check the [technical README document](https://github.com/solus-project/linux-steam-integration/blob/master/TECHNICAL.md).
please check the [technical README document](https://github.com/clearlinux/linux-steam-integration/blob/master/TECHNICAL.md).
Do note that we intend to remove the need for distributions to integrate LSI in the near future, by providing
the LSI system as a [snap](https://snapcraft.io/) package for all supported distributions.
This project, and by extension Solus, is not officially endorsed by, or affiliated with, Steam, or its parent company, Valve*.
Linux Steam Integration is a [Solus project](https://solus-project.com/)
![logo](https://build.solus-project.com/logo.png)
## Getting LSI
LSI may not yet be available for your distribution, however some community maintained repositories do exist.
- [Arch Linux](https://aur.archlinux.org/packages/linux-steam-integration/)
- [Fedora](https://copr.fedorainfracloud.org/coprs/alunux/linux-steam-integration/)
- Solus uses LSI by default, just install the `steam` package.
## License
Copyright © 2016-2017 Ikey Doherty
Copyright © 2016-2018 Ikey Doherty
Copyright © 2018-2019 Intel Corporation
linux-steam-integration is available under the terms of the `LGPL-2.1` license.
+10 -8
View File
@@ -196,7 +196,7 @@ Currently this INI file supports three options. The root section in this INI fil
`force-32bit = $boolean`
If set to a true boolean value (yes/true/on), the shadowed Steam binary will
be run via the `linux32` command. This will force the `steam` process
be run via the `setarch linux32` command. This will force the `steam` process
and all children to believe they are running on a 32-bit system. This
may be useful for 64-bit games that are buggy only on 64-bit.
@@ -226,6 +226,14 @@ Currently this INI file supports three options. The root section in this INI fil
The default value of this variable is `true`.
`use-unity-hack = $boolean`
If set to a true boolean value (yes/true/on), the `liblsi-redirect.so`
library will apply a preference workaround to Unity3D based games and
abstract access to their configuration files. This is used to force
Unity3D games to always start in windowed mode, and to ensure that
they're unable to make use of the stored fullscreen setting.
## Common issues
@@ -262,13 +270,7 @@ If you are noticing performance regressions, you can:
- As a packager: Disable `liblsi-intercept` via build flags. This will hurt compatibility.
- As a distribution integrator: Add weight to upstream issue and import patch into your distribution.
This will retain LSI compatibility magic and mitigate performance issues.
As an example, Solus has already [integrated the patch](https://dev.solus-project.com/R927:afa5b639e8a9b62618457a304d1e6fb42a9f2066).
The long term solution is to remove this burden from non-Solus Linux distributions, and for the Solus & LSI projects to
provide a specialised runtime & strict LSI build via third party mechanisms so that all this work only needs doing once.
This will help ensure the same gaming experience regardless of Linux distribution, remove all compatibility issues, and
any pressures on distributions. Additionally this will allow even distributions not supporting multilib to provide a
curated and well integrated gaming runtime.
As an example, Solus has already [integrated the patch](https://dev.getsol.us/R927:afa5b639e8a9b62618457a304d1e6fb42a9f2066).
`* Some names may be claimed as the property of others.`
+19
View File
@@ -0,0 +1,19 @@
Initial test list for next release of LSI
- DOTA 2
- Don't Starve Together
- Requires curl-gnutls (integrating into CLR now)
- Vendored SDL is patched in non upstreamable fashion
https://forums.kleientertainment.com/forums/topic/30218-crash-on-linux-steam-without-error/?page=0&tab=comments#comment-386249
We'll need to allow certain games to vendor SDL now.
Fixed in https://github.com/clearlinux/linux-steam-integration/commit/c4ded161159d2d6faa5a1dba45af8426738632b7
- Oxygen Not Included (working perfectly)
- Cities:Skylines
- Various Source titles (L4D2, Portal, etc)
- Various Feral titles (2018/2019 kits)
- Stardew Valley
- Rocket League
+1 release:
- Proton compat
@@ -1,7 +1,7 @@
[Desktop Entry]
Name=Linux Steam Integration
Comment=Application for managing Steam integration settings
Exec=lsi-settings
Exec=@LSI_SETTINGS@
Icon=steam
Terminal=false
Type=Application
+1
View File
@@ -8,6 +8,7 @@ Type=Application
Categories=Network;FileTransfer;Game;
MimeType=x-scheme-handler/steam;
Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends;
StartupWMClass=Steam
[Desktop Action Store]
Name=Store
+13 -5
View File
@@ -1,10 +1,18 @@
appsdir = join_paths(datadir, 'applications')
path_appsdir = join_paths(path_datadir, 'applications')
# If frontend is enabled, install lsi-settings.desktop
if with_frontend == true
install_data(
'lsi-settings.desktop',
install_dir: appsdir,
data_conf = configuration_data()
if with_snap_support == true
data_conf.set('LSI_SETTINGS', 'linux-steam-integration.exec linux-steam-integration.settings')
else
data_conf.set('LSI_SETTINGS', 'lsi-settings')
endif
configure_file(
input: 'lsi-settings.desktop.in',
output: 'lsi-settings.desktop',
configuration: data_conf,
install_dir: path_appsdir,
)
endif
@@ -12,6 +20,6 @@ endif
if shim_behaviour == 'co-exist'
install_data(
'lsi-steam.desktop',
install_dir: appsdir,
install_dir: path_appsdir,
)
endif
+92 -15
View File
@@ -1,7 +1,7 @@
project(
'linux-steam-integration',
['c'],
version: '0.6',
version: '0.7.3',
license: [
'LGPL-2.1',
],
@@ -10,7 +10,6 @@ project(
],
)
am_cflags = [
'-fstack-protector',
'-pedantic',
@@ -33,63 +32,141 @@ add_global_arguments(am_cflags, language: 'c')
dep_gtk3 = dependency('gtk+-3.0', version: '>= 3.4.0')
# Grab all our main paths
path_prefix = get_option('prefix')
path_bindir = join_paths(path_prefix, get_option('bindir'))
path_datadir = join_paths(path_prefix, get_option('datadir'))
path_vendordir = join_paths(path_datadir, 'defaults', meson.project_name())
path_sysconfdir = join_paths(path_prefix, get_option('sysconfdir'))
path_localedir = join_paths(path_prefix, get_option('localedir'))
# Set up our basic configuration
cdata = configuration_data()
cdata.set_quoted('PACKAGE_NAME', meson.project_name())
prefix = get_option('prefix')
datadir = join_paths(prefix, get_option('datadir'))
vendordir = join_paths(datadir, 'defaults', meson.project_name())
sysconfdir = join_paths(prefix, get_option('sysconfdir'))
localedir = join_paths(prefix, get_option('localedir'))
cdata.set_quoted('SYSTEMCONFDIR', sysconfdir)
cdata.set_quoted('VENDORDIR', vendordir)
cdata.set_quoted('LOCALEDIR', localedir)
cdata.set_quoted('SYSTEMCONFDIR', path_sysconfdir)
cdata.set_quoted('VENDORDIR', path_vendordir)
cdata.set_quoted('LOCALEDIR', path_localedir)
cdata.set_quoted('GETTEXT_PACKAGE', meson.project_name())
# Configurables
cdata.set_quoted('LSI_PRELOAD_LIBS', get_option('with-preload-libs'))
with_preload_libs = get_option('with-preload-libs')
cdata.set_quoted('LSI_PRELOAD_LIBS', with_preload_libs)
cdata.set_quoted('STEAM_BINARY', get_option('with-steam-binary'))
# Future reports
shim_system_report = []
intercept_module_report = []
redirect_module_report = []
# Control the shim behaviour
shim_behaviour = get_option('with-shim')
shim_enabled = false
if shim_behaviour == 'replacement'
cdata.set('REPLACE_STEAM', '1')
endif
if shim_behaviour != 'none'
shim_enabled = true
endif
shim_system_report += ' behaviour: @0@'.format(shim_behaviour)
shim_system_report += ' preload libraries: @0@'.format(with_preload_libs)
# Do we have liblsi-intercept?
with_libintercept = get_option('with-libintercept')
if with_libintercept == true
cdata.set('HAVE_LIBINTERCEPT', '1')
endif
# Do we have liblsi-redirect?
with_libredirect = get_option('with-libredirect')
if with_libredirect == true
cdata.set('HAVE_LIBREDIRECT', '1')
endif
# Do we have the frontend?
with_frontend = get_option('with-frontend')
if get_option('with-new-libcxx-abi') == true
# Using the new libc++ ABI? Important for mesa drivers
with_new_libcxx_abi = get_option('with-new-libcxx-abi')
if with_new_libcxx_abi == true
cdata.set('LSI_USE_NEW_ABI', '1')
endif
shim_system_report += ' New C++ ABI: @0@'.format(with_new_libcxx_abi)
# How are we handling LibreSSL?
with_libressl_mode = get_option('with-libressl-mode')
intercept_module_report += ' LibreSSL handling: @0@'.format(with_libressl_mode)
if with_libressl_mode == 'native'
# LibreSSL is provided by the distro as the native libssl, libcrypto, etc
cdata.set('LSI_LIBRESSL_MODE_NATIVE', '1')
cdata.set('LSI_OVERRIDE_LIBRESSL', '1')
elif with_libressl_mode == 'shim'
# A shim package has been provided for soname redirects to updated/secure libressl
# This allows distros to secure libressl without making it the system libssl/libcrypto option
cdata.set('LSI_LIBRESSL_MODE_SHIM', '1')
cdata.set('LSI_OVERRIDE_LIBRESSL', '1')
cdata.set_quoted('LSI_LIBRESSL_SUFFIX', get_option('with-libressl-suffix'))
with_libressl_suffix = get_option('with-libressl-suffix')
intercept_module_report += ' LibreSSL library suffix: @0@'.format(with_libressl_suffix)
cdata.set_quoted('LSI_LIBRESSL_SUFFIX', with_libressl_suffix)
else
message('LibreSSL mode isn\'t configured which may impact security')
endif
# Got snap support?
with_snap_support = get_option('with-snap-support')
if with_snap_support == true
cdata.set('HAVE_SNAPD_SUPPORT', '1')
path_fake_scripts_dir = join_paths(path_datadir, meson.project_name(), 'scripts')
cdata.set_quoted('FAKE_SCRIPTS_DIR', path_fake_scripts_dir)
subdir('snapd')
message('Enabling snapd support. Do NOT do this for distribution builds!')
endif
# Let's write the global config.h now
config_h = configure_file(
configuration: cdata,
output: 'config.h',
)
# Make it discoverable
config_h_dir = include_directories('.')
# Descend into source trees
subdir('data')
subdir('src')
subdir('po')
report = [
' Build configuration:',
' ====================',
'',
' prefix: @0@'.format(path_prefix),
' datadir: @0@'.format(path_datadir),
' sysconfdir: @0@'.format(path_sysconfdir),
' bindir: @0@'.format(path_bindir),
'',
' Shim System (Execution/Environment Control):',
' ============================================',
'',
' enabled: @0@'.format(shim_enabled),
'@0@'.format('\n'.join(shim_system_report)),
'',
' Intercept Module (Dynamic Linker Control):',
' ==========================================',
'',
' enabled: @0@'.format(with_libintercept),
'@0@'.format('\n'.join(intercept_module_report)),
'',
' Redirect Module (Standard Library Control):',
' ===========================================',
'',
' enabled: @0@'.format(with_libredirect),
'',
' Snap Support (run as a snap):',
' =============================',
'',
' enabled: @0@'.format(with_snap_support),
'@0@'.format('\n'.join(redirect_module_report)),
]
# Output some stuff to validate the build config
message('\n\n\n' + '\n'.join(report) + '\n\n')
+3 -1
View File
@@ -3,7 +3,7 @@ option('with-shim', type : 'combo', choices : ['replacement', 'co-exist', 'none'
option('with-steam-binary', type: 'string', description: 'Set the path to the Steam binary', value: '/usr/lib/steam/steam')
option('with-frontend', type: 'boolean', description: 'Build the LSI Settings UI', value: false)
option('with-preload-libs', type: 'string', description: 'Colon separated list of libraries required to launch Steam games',
value: '/usr/\$LIB/libxcb.so.1:/usr/\$LIB/libX11.so.6:/usr/\$LIB/libstdc++.so.6')
value: '/usr/$LIB/libxcb.so.1:/usr/$LIB/libX11.so.6:/usr/$LIB/libstdc++.so.6')
option('with-libintercept', type: 'boolean', description: 'Enable libintercept library for controlling Steam linking', value: true)
option('with-libredirect', type: 'boolean', description: 'Enable libredirect library for fine-tuning Steam games', value: true)
option('with-new-libcxx-abi', type: 'boolean', description: 'Enable when using the new libstdc++ ABI', value: false)
@@ -12,3 +12,5 @@ option('with-libressl-mode', type: 'combo', choices: ['native', 'shim', 'none'],
description: 'Control how LibreSSL replacements are performed')
option('with-libressl-suffix', type: 'string', value: '-libressl',
description: 'Suffix for shim LibreSSL library when using --with-libressl-mode=shim')
option('with-snap-support', type: 'boolean', description: 'Build LSI with explicit support for snapd', value: false)
+19 -2
View File
@@ -1,12 +1,29 @@
#!/bin/bash
set -e
DEFAULT_ARGS="-Dwith-libressl-mode=shim -Dwith-new-libcxx-abi=true"
if [[ ! -d buildroot/build32 ]]; then
CC="gcc -m32" linux32 meson buildroot/build32 -Dwith-libressl-mode=shim --prefix=/usr --sysconfdir=/etc --datadir=/usr/share --libdir=/usr/lib32 -Dwith-shim=none -Dwith-new-libcxx-abi=true --buildtype debugoptimized
ASFLAGS="$ASFLAGS --32" CFLAGS="$CFLAGS -m32" CXXFLAGS="$CXXFLAGS -m32" LDFLAGS="$LDFLAGS -m32" \
meson buildroot/build32 $DEFAULT_ARGS \
--prefix=/usr \
--sysconfdir=/etc \
--datadir=/usr/share \
--libdir=/usr/lib32 \
-Dwith-shim=none \
--buildtype debugoptimized
fi
if [[ ! -d buildroot/build64 ]]; then
meson buildroot/build64 -Dwith-libressl-mode=shim --prefix=/usr --sysconfdir=/etc --datadir=/usr/share --libdir=/usr/lib64 -Dwith-shim=replacement -Dwith-steam-binary=/usr/lib64/steam/steam -Dwith-frontend=true -Dwith-new-libcxx-abi=true --buildtype debugoptimized
meson buildroot/build64 $DEFAULT_ARGS \
--prefix=/usr \
--sysconfdir=/etc \
--datadir=/usr/share \
--libdir=/usr/lib64 \
-Dwith-shim=replacement \
-Dwith-steam-binary=/usr/lib64/steam/steam \
-Dwith-frontend=true \
--buildtype debugoptimized
fi
ninja -C buildroot/build32
+1 -1
View File
@@ -5,7 +5,7 @@ git submodule init
git submodule update
# Script for ikey because he went with meson. *shrug*
VERSION="0.6"
VERSION="0.7.3"
NAME="linux-steam-integration"
git-archive-all.sh --format tar --prefix ${NAME}-${VERSION}/ --verbose -t HEAD ${NAME}-${VERSION}.tar
xz -9 "${NAME}-${VERSION}.tar"
+12
View File
@@ -3,17 +3,27 @@ ca_ES
ca
cs
da_DK
da
de_CH
de
en_GB
eo
es_419
es_AR
es_ES
es_MX
es_PE
es
fi
fr_FR
he
hu
id_ID
it_IT
ko_KR
ko
lt
nb_NO
ne_NP
nl_BE
nl_NL
@@ -22,5 +32,7 @@ pl
pt_BR
pt_PT
ro_RO
ru
sv_SE
tr
zh_CN
+25 -13
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"POT-Creation-Date: 2017-12-19 12:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Davidmp <medipas@gmail.com>, 2017\n"
"Language-Team: Catalan (https://www.transifex.com/solus-project/teams/68407/ca/)\n"
@@ -20,11 +20,11 @@ msgstr ""
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
#: src/frontend/main-window.c:132 src/frontend/main-window.c:149
msgid "Linux Steam® Integration"
msgstr "Integració de Linux Steam®"
#: src/frontend/main-window.c:162
#: src/frontend/main-window.c:163
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
@@ -34,20 +34,20 @@ msgstr ""
" tindrà efecte fins que no es reiniciï el client d'Steam. Useu l'opció "
"\"Surt de l'Steam\" per assegurar-vos que es tanqui."
#: src/frontend/main-window.c:191
#: src/frontend/main-window.c:192
msgid "Use native runtime"
msgstr "Usa l'entorn d'execució natiu"
#: src/frontend/main-window.c:192
#: src/frontend/main-window.c:193
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Canvieu entre l'entorn natiu i l'entorn d'Steam agrupat."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
#: src/frontend/main-window.c:202
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Aquesta opció s'ha inhabilitat ja que el sistema ja és de 32 bits."
#: src/frontend/main-window.c:205
#: src/frontend/main-window.c:206
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
@@ -55,15 +55,15 @@ msgstr ""
"Això pot solucionar alguns jocs trencats, però inhabilitarà el navegador de "
"la botiga d'Steam."
#: src/frontend/main-window.c:210
#: src/frontend/main-window.c:211
msgid "Force 32-bit mode for Steam"
msgstr "Força el mode de 32 bits per a l'Steam"
#: src/frontend/main-window.c:218
#: src/frontend/main-window.c:219
msgid "Use the intercept library"
msgstr "Usa la biblioteca d'intercepció"
#: src/frontend/main-window.c:219
#: src/frontend/main-window.c:220
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
@@ -71,16 +71,28 @@ msgstr ""
"Força que les aplicacions de l'Steam usin més biblioteques natives per "
"maximitzar la compatibilitat."
#: src/frontend/main-window.c:228
#: src/frontend/main-window.c:229
msgid "Use the redirect library"
msgstr "Usa la biblioteca de redirecció"
#: src/frontend/main-window.c:229
#: src/frontend/main-window.c:230
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Anul·la les crides de sistema per corregir errors coneguts en algunes "
"versions de Linux."
#: src/frontend/main-window.c:383
#: src/frontend/main-window.c:237
msgid "Use the Unity fullscreen workaround"
msgstr "Usa la solució provisional de pantalla completa de l'Unity."
#: src/frontend/main-window.c:238
msgid ""
"Prevent some Unity games from launching in full screen mode to fix numerous "
"issues"
msgstr ""
"Evita que alguns jocs d'Unity s'obrin en pantalla completa per tal de "
"corregir uns quants problemes."
#: src/frontend/main-window.c:403
msgid "Failed to save configuration"
msgstr "Ha fallat desar la configuració"
+2 -2
View File
@@ -68,7 +68,7 @@ msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Přinutit programy ze služby Steam používat více nativních knihoven pro "
"Přinutí programy ze služby Steam používat více nativních knihoven pro "
"zajištění maximální kompatibility."
#: src/frontend/main-window.c:228
@@ -78,7 +78,7 @@ msgstr "Používat knihovnu pro přesměrování"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Přepsáním systémových volání opravit známé chyby v linuxových portech her."
"Přepsáním systémových volání opraví známé chyby v linuxových portech her."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
+85
View File
@@ -0,0 +1,85 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: scootergrisen <scootergrisen@gmail.com>, 2017\n"
"Language-Team: Danish (https://www.transifex.com/solus-project/teams/68407/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Integration med Linux Steam®"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Styr opførslen af Steam-klienten og spil. Indstillingerne vil ikke træde i "
"kraft før Steam-klienten er blevet genstartet. Brug 'Afslut Steam' for af "
"sikre at programmet lukkes."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Brug nativ runtime"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Skift mellem nativ runtime og den runtime som følger med Steam."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr ""
"Denne mulighed er blevet deaktiveret eftersom systemet allerede er 32-bit"
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Det løser muligvis problemer for nogle ødelagte spil, til gengæld "
"deaktiveres Steam butik-browseren."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Tving 32-bit-tilstand for Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Brug intercept-biblioteket"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Tving Steam-programmer til at bruge flere native biblioteker for at "
"maksimere kompatibilitet."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Brug redirect-biblioteket"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr "Tilsidesæt systemkald for at rette kendte fejl i nogle Linux-porte."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Kunne ikke gemme konfiguration"
+10 -8
View File
@@ -30,9 +30,9 @@ msgid ""
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Beeinflusse das Verhalten des Steam-Clients und von Spielen. Die "
"Kontrolliere das Verhalten des Steam-Clients und von Spielen. Die "
"Einstellungen werden erst aktiv, nachdem der Steam-Client neu gestartet "
"wurde. Nutze 'Steam beenden', um sicherzugehen, dass es beendet wird."
"wurde. Nutze \"Steam beenden\", um sicherzugehen, dass es beendet wird."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
@@ -47,19 +47,21 @@ msgstr ""
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Diese Option ist deaktiviert, da dies bereits ein 32-bit System ist."
msgstr ""
"Diese Option ist deaktiviert, da es sich bereits um ein 32-Bit-System "
"handelt."
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Dies behebt möglicherweise Fehler bei kaputten Steam-Spielen, wird aber den "
"Steam Store Browser deaktivieren."
"Diese Option behebt möglicherweise Probleme mit Steam-Spielen, wird aber den"
" Steam Store Browser deaktivieren."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Erzwinge 32-bit-Modus für Steam"
msgstr "Erzwinge 32-Bit-Modus für Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
@@ -70,7 +72,7 @@ msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Zwinge Steam Anwendungen dazu, mehr native Bibliotheken zu nutzen, um die "
"Zwinge Steam-Anwendungen dazu, mehr native Bibliotheken zu nutzen, um die "
"Kompatibilität zu maximieren."
#: src/frontend/main-window.c:228
@@ -80,7 +82,7 @@ msgstr "Nutze die Redirect-Bibliothek"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Überschreibe Systemcalls, um bekannte Bugs in manchen Linux-Ports zu "
"Überschreibe Systemaufrufe, um bekannte Bugs in manchen Linux-Ports zu "
"beheben."
#: src/frontend/main-window.c:383
+89
View File
@@ -0,0 +1,89 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: f vg <f_vongellhorn@outlook.de>, 2017\n"
"Language-Team: German (Switzerland) (https://www.transifex.com/solus-project/teams/68407/de_CH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de_CH\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integration "
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Kontrolliere das Verhalten des Steam-Clients und der Spiele. Die "
"Einstellungen werden erst wirksam, wenn der Steam Client neu gestartet wird."
" Verwenden Sie die Option \"Steam beenden\", um sicherzustellen, dass Steam "
"geschlossen wird."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Verwende Systemeigene Laufzeitumgebung "
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Wechseln zwischen Systemeigene und der gebündelten Steam Laufzeitumgebung"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr ""
"Diese Option wurde deaktiviert, da das System bereits auf 32-Bit läuft."
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Dies könnte einige Probleme von fehlerhafte Spiele umgehen, wird jedoch den "
"Steam Store Browser deaktivieren. "
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Erzwinge den 32-Bit-Modus für Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Verwende die intercept-Bibliothek "
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Zwingen Sie die Steam-Anwendungen dazu mehr Systemeigene Bibliotheken zu "
"verwenden, um die Kompatibilität zu maximieren."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Verwende die Redirect-Bibliothek "
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Überschreiben Sie Systemaufrufe, um bekannte Fehler in einigen Linux-Ports "
"zu beheben."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Konfiguration konnte nicht gespeichert werden"
+25 -13
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"POT-Creation-Date: 2017-12-19 12:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,11 +19,11 @@ msgstr ""
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
#: src/frontend/main-window.c:132 src/frontend/main-window.c:149
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integration"
#: src/frontend/main-window.c:162
#: src/frontend/main-window.c:163
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
@@ -33,20 +33,20 @@ msgstr ""
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
#: src/frontend/main-window.c:191
#: src/frontend/main-window.c:192
msgid "Use native runtime"
msgstr "Use native runtime"
#: src/frontend/main-window.c:192
#: src/frontend/main-window.c:193
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Switch between the native runtime and the bundled Steam runtime."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
#: src/frontend/main-window.c:202
msgid "This option has been disabled as the system is already 32-bit"
msgstr "This option has been disabled as the system is already 32-bit"
#: src/frontend/main-window.c:205
#: src/frontend/main-window.c:206
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
@@ -54,15 +54,15 @@ msgstr ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
#: src/frontend/main-window.c:210
#: src/frontend/main-window.c:211
msgid "Force 32-bit mode for Steam"
msgstr "Force 32-bit mode for Steam"
#: src/frontend/main-window.c:218
#: src/frontend/main-window.c:219
msgid "Use the intercept library"
msgstr "Use the intercept library"
#: src/frontend/main-window.c:219
#: src/frontend/main-window.c:220
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
@@ -70,14 +70,26 @@ msgstr ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
#: src/frontend/main-window.c:228
#: src/frontend/main-window.c:229
msgid "Use the redirect library"
msgstr "Use the redirect library"
#: src/frontend/main-window.c:229
#: src/frontend/main-window.c:230
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr "Override system calls to fix known bugs in some Linux ports."
#: src/frontend/main-window.c:383
#: src/frontend/main-window.c:237
msgid "Use the Unity fullscreen workaround"
msgstr "Use the Unity fullscreen workaround"
#: src/frontend/main-window.c:238
msgid ""
"Prevent some Unity games from launching in full screen mode to fix numerous "
"issues"
msgstr ""
"Prevent some Unity games from launching in full screen mode to fix numerous "
"issues"
#: src/frontend/main-window.c:403
msgid "Failed to save configuration"
msgstr "Failed to save configuration"
+86
View File
@@ -0,0 +1,86 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Pablo Chere <pablo.foche@gmail.com>, 2017\n"
"Language-Team: Esperanto (https://www.transifex.com/solus-project/teams/68407/eo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Steam® Linuksa Integriĝo"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Ĝi kontrolas la konduton de la Steam-kliento kaj la ludoj. Agordoj ne "
"efektiviĝos ĝis la restartigo de la Steam-kliento. Uzu la elekton \"Eliri el"
" Steam\" por certiĝi pri tio ke ĝi fermiĝas."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Uzi denaskan rultempon"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Ŝanĝi inter la denaska rultempo kaj la faskigita rultempo de Steam."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Ĉi tiu elekto estis malŝaltita kaj la sistemo estas ankoraŭ 32-bita."
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Ĉi tio povas funkciigi kelkajn rompitajn ludojn sed malŝaltos la navigilon "
"de la Steam-vendejo."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Devigi 32-bitan reĝimon por Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Uzi la interkaptan bibliotekon"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Devigi la aplikaĵojn de Steam uzi pliajn denaskajn bibliotekojn por "
"maksimumigi kongruecon"
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Uzi la alidirektan bibliotekon"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Transpasi sistemajn alvokojn por solvi konatajn erarojn en kelkaj linuksaj "
"portoj."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Agordo-konservado malsukcesis"
+86
View File
@@ -0,0 +1,86 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: mrkucho <vhugo642@gmail.com>, 2017\n"
"Language-Team: Spanish (https://www.transifex.com/solus-project/teams/68407/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integration"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Controla el comportamiento del cliente y los juegos de Steam. La "
"configuración no tendrá efecto hasta que el cliente de Steam se reinicie. "
"Use la opción 'Salir de Steam' para asegurarse de que se cierre."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Usar librerías nativas"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Cambie entre las librerías nativas y las incluidas por Steam"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Esta opción ha sido desactivada ya que el sistema ya es de 32-bit"
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Esto puede mejorar algunos juegos rotos, pero desactivará el navegador de la"
" tienda de Steam."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Forzar modo de 32-bit para Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Usar librería de intercepción"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Forzar a las aplicaciones de Steam a usar más librerías del sistema para "
"maximizar la compatibilidad."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Usar librería de redirección"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Anular las llamadas del sistema para solucionar algunos problemas conocidos "
"en adaptaciones de Linux."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Error al guardar la configuración"
+4 -4
View File
@@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Víctor Rodríguez <vhugo642@gmail.com>, 2017\n"
"Last-Translator: mrkucho <vhugo642@gmail.com>, 2017\n"
"Language-Team: Spanish (Latin America) (https://www.transifex.com/solus-project/teams/68407/es_419/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -36,12 +36,12 @@ msgstr ""
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Usar tiempo de ejecución del sistema"
msgstr "Usar librerías nativas"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Cambie entre el tiempo de ejecución del sistema y el incluido por Steam"
"Cambie entre las librerías nativas del sistema y las incluidas por Steam"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
@@ -62,7 +62,7 @@ msgstr "Forzar modo de 32-bit para Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Utilizar la biblioteca de intercepción"
msgstr "Utilizar librería de intercepción"
#: src/frontend/main-window.c:219
msgid ""
+86
View File
@@ -0,0 +1,86 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: mrkucho <vhugo642@gmail.com>, 2017\n"
"Language-Team: Spanish (Spain) (https://www.transifex.com/solus-project/teams/68407/es_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integration"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Controla el comportamiento del cliente y los juegos de Steam. La "
"configuración no tendrá efecto hasta que el cliente de Steam se reinicie. "
"Use la opción 'Salir de Steam' para asegurarse de que se cierre."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Usar librerías nativas"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Cambie entre las librerías nativas y las incluidas por Steam"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Esta opción ha sido desactivada ya que el sistema ya es de 32-bit"
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Esto puede mejorar algunos juegos rotos, pero desactivará el navegador de la"
" tienda de Steam."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Forzar modo de 32-bit para Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Usar librería de intercepción"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Forzar a las aplicaciones de Steam a usar más librerías del sistema para "
"maximizar la compatibilidad."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Usar librería de redirección"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Anular las llamadas del sistema para solucionar algunos problemas conocidos "
"en adaptaciones de Linux."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Error al guardar la configuración"
+5 -5
View File
@@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Víctor Rodríguez <vhugo642@gmail.com>, 2017\n"
"Last-Translator: mrkucho <vhugo642@gmail.com>, 2017\n"
"Language-Team: Spanish (Peru) (https://www.transifex.com/solus-project/teams/68407/es_PE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -36,12 +36,12 @@ msgstr ""
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Usar tiempo de ejecución del sistema"
msgstr "Usar librerías nativas"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Cambie entre el tiempo de ejecución del sistema y el incluido por Steam"
"Cambie entre las librerías nativas del sistema y las incluidas por Steam"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
@@ -62,7 +62,7 @@ msgstr "Forzar modo de 32-bit para Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Usar la librería de intercepción"
msgstr "Usar librería de intercepción"
#: src/frontend/main-window.c:219
msgid ""
@@ -74,7 +74,7 @@ msgstr ""
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Usar la librería de intercepción"
msgstr "Usar librería de redirección"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
+1 -1
View File
@@ -59,7 +59,7 @@ msgstr ""
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Pakottaa 32-bittisen tilan Steamille"
msgstr "Pakota 32-bittinen tila Steamille"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
+87
View File
@@ -0,0 +1,87 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Kevin Németh <keiro@vivaldi.net>, 2017\n"
"Language-Team: Hungarian (https://www.transifex.com/solus-project/teams/68407/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integration"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Szabályozza a Steam-kliens működését és a játékokat. A beállításoknak nem "
"lesz hatásuk a Steam-kliens újraindításáig. Használja a 'Kilépés a Steamből'"
" opciót, hogy biztosan bezáródjon."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Natív futtatási környezet használata"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Váltás a natív futtási környezet és a csomagolt Steam futtatási környezet "
"között."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Ez az opció le van tiltva, ha a rendszer már 32 bites."
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Ez megoldja néhány játék problémáját, de le fogja tiltani a Steam Áruház "
"keresőjét."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "32 bites mód kényszerítése a Steamnek"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Az elfogó könyvtár használata"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Steam alkalmazások kényszerítése a natív könyvtársak használatára a "
"kompatibilitás maximalizálására."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Az átirányítási könyvtár használata"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Rendszerhívások felüllbírálása ismert bugok javítására néhány Linux porton."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "A konfiguráció mentése sikertelen"
+26 -14
View File
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"POT-Creation-Date: 2017-12-19 12:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Fabio Forni <fabio94xx@gmail.com>, 2017\n"
"Last-Translator: Fabio <fabio0x@keemail.me>, 2017\n"
"Language-Team: Italian (Italy) (https://www.transifex.com/solus-project/teams/68407/it_IT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,11 +20,11 @@ msgstr ""
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
#: src/frontend/main-window.c:132 src/frontend/main-window.c:149
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integration"
#: src/frontend/main-window.c:162
#: src/frontend/main-window.c:163
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
@@ -34,20 +34,20 @@ msgstr ""
"non avranno effetto finché il client Steam non sarà riavviato. Usa l'opzione"
" \"Esci da Steam\" per assicurarti che venga davvero chiuso."
#: src/frontend/main-window.c:191
#: src/frontend/main-window.c:192
msgid "Use native runtime"
msgstr "Use ambiente di runtime nativo"
#: src/frontend/main-window.c:192
#: src/frontend/main-window.c:193
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Scegli tra l'ambiente di runtime nativo e quello integrato in Steam."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
#: src/frontend/main-window.c:202
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Questa opzione è disabilitata perché il sistema è già a 32-bit"
#: src/frontend/main-window.c:205
#: src/frontend/main-window.c:206
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
@@ -55,15 +55,15 @@ msgstr ""
"Può correggere alcuni giochi non funzionanti, ma disabiliterà la navigazione"
" nel negozio Steam."
#: src/frontend/main-window.c:210
#: src/frontend/main-window.c:211
msgid "Force 32-bit mode for Steam"
msgstr "Forza Steam a 32-bit"
#: src/frontend/main-window.c:218
#: src/frontend/main-window.c:219
msgid "Use the intercept library"
msgstr "Usa la libreria di intercettazione"
#: src/frontend/main-window.c:219
#: src/frontend/main-window.c:220
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
@@ -71,16 +71,28 @@ msgstr ""
"Forza le applicazioni di Steam a usare ancor più librerie native per "
"massimizzare la compatibilità."
#: src/frontend/main-window.c:228
#: src/frontend/main-window.c:229
msgid "Use the redirect library"
msgstr "Usa la libreria di redirezione"
#: src/frontend/main-window.c:229
#: src/frontend/main-window.c:230
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Sostituisce le chiamate di sistema per correggere i bug noti di alcuni "
"porting su Linux."
#: src/frontend/main-window.c:383
#: src/frontend/main-window.c:237
msgid "Use the Unity fullscreen workaround"
msgstr "Aggira il problema di Unity a schermo intero"
#: src/frontend/main-window.c:238
msgid ""
"Prevent some Unity games from launching in full screen mode to fix numerous "
"issues"
msgstr ""
"Evita che alcuni giochi basati su Unity partano a schermo intero per "
"correggere svariate problematiche"
#: src/frontend/main-window.c:403
msgid "Failed to save configuration"
msgstr "Errore durante il salvataggio della configurazione"
+80
View File
@@ -0,0 +1,80 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: jemin_jeon <jemin.jeon@posteo.net>, 2017\n"
"Language-Team: Korean (https://www.transifex.com/solus-project/teams/68407/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "리눅스 스팀® 통합 설정"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"스팀 클라이언트와 게임의 작동방식을 설정합니다. 설정값은 스팀 클라이언트를 재시작하면 적용됩니다. \"스팀 종료하기\" 옵션을 이용해서 "
"스팀이 확실히 종료되게 해주세요."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "리눅스 자체 런타임 사용하기"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "리눅스 자체 런타임과 스팀 내장 런타임간 전환하기"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "시스템이 이미 32비트 운영체제이므로 이 옵션은 비활성화 되었습니다."
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"이 옵션을 활성화하면 올바르게 실행되지 않는 특정 게임이 정상 작동 할 수도 있습니다. 그러나 스팀 상점은 이용이 불가능합니다."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "스팀이 32비트 모드에서 실행되도록 강제합니다."
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Intercept 라이브러리를 사용합니다."
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr "스팀이 더 많은 리눅스 자체 라이브러리를 사용하여 호환성을 최대화 할 수 있도록 강제합니다."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Redirect 라이브러리 사용하기"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr "시스템 콜을 오버라이드하여 리눅스로 이식된 프로그램에서 발생하는 알려진 특정 오류를 수정합니다."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "설정 저장에 실패했습니다."
+80
View File
@@ -0,0 +1,80 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: jemin_jeon <jemin.jeon@posteo.net>, 2017\n"
"Language-Team: Korean (Korea) (https://www.transifex.com/solus-project/teams/68407/ko_KR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko_KR\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "리눅스 스팀® 통합 설정"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"스팀 클라이언트와 게임의 작동방식을 설정합니다. 설정값은 스팀 클라이언트를 재시작하면 적용됩니다. \"스팀 종료하기\" 옵션을 이용해서 "
"스팀이 확실히 종료되게 해주세요."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "리눅스 자체 런타임 사용하기"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "리눅스 자체 런타임과 스팀 내장 런타임간 전환하기"
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "시스템이 이미 32비트 운영체제이므로 이 옵션은 비활성화 되었습니다."
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"이 옵션을 활성화하면 올바르게 실행되지 않는 특정 게임이 정상 작동 할 수도 있습니다. 그러나 스팀 상점은 이용이 불가능합니다."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "스팀이 32비트 모드에서 실행되도록 강제합니다."
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Intercept 라이브러리를 사용합니다."
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr "스팀이 더 많은 리눅스 자체 라이브러리를 사용하여 호환성을 최대화 할 수 있도록 강제합니다."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Redirect 라이브러리 사용하기"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr "시스템 콜을 오버라이드하여 리눅스로 이식된 프로그램에서 발생하는 알려진 특정 오류를 수정합니다."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "설정 저장에 실패했습니다."
+23 -13
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"POT-Creation-Date: 2017-12-19 12:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,58 +19,68 @@ msgstr ""
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
#: src/frontend/main-window.c:132 src/frontend/main-window.c:149
msgid "Linux Steam® Integration"
msgstr ""
#: src/frontend/main-window.c:162
#: src/frontend/main-window.c:163
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
#: src/frontend/main-window.c:191
#: src/frontend/main-window.c:192
msgid "Use native runtime"
msgstr ""
#: src/frontend/main-window.c:192
#: src/frontend/main-window.c:193
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
#: src/frontend/main-window.c:202
msgid "This option has been disabled as the system is already 32-bit"
msgstr ""
#: src/frontend/main-window.c:205
#: src/frontend/main-window.c:206
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
#: src/frontend/main-window.c:210
#: src/frontend/main-window.c:211
msgid "Force 32-bit mode for Steam"
msgstr ""
#: src/frontend/main-window.c:218
#: src/frontend/main-window.c:219
msgid "Use the intercept library"
msgstr ""
#: src/frontend/main-window.c:219
#: src/frontend/main-window.c:220
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
#: src/frontend/main-window.c:228
#: src/frontend/main-window.c:229
msgid "Use the redirect library"
msgstr ""
#: src/frontend/main-window.c:229
#: src/frontend/main-window.c:230
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
#: src/frontend/main-window.c:383
#: src/frontend/main-window.c:237
msgid "Use the Unity fullscreen workaround"
msgstr ""
#: src/frontend/main-window.c:238
msgid ""
"Prevent some Unity games from launching in full screen mode to fix numerous "
"issues"
msgstr ""
#: src/frontend/main-window.c:403
msgid "Failed to save configuration"
msgstr ""
+99
View File
@@ -0,0 +1,99 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-19 12:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Moo <moose@mail.ru>, 2017\n"
"Language-Team: Lithuanian (https://www.transifex.com/solus-project/teams/68407/lt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lt\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:132 src/frontend/main-window.c:149
msgid "Linux Steam® Integration"
msgstr "Linux Steam® integracija"
#: src/frontend/main-window.c:163
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Valdykite Steam kliento ir žaidimų elgseną. Nustatymai neįsigalios tol, kol "
"Steam klientas nebus paleistas iš naujo. Norėdami užtikrinti, kad programa "
"Steam baigtų darbą, naudokite parametrą \"Išeiti iš Steam\"."
#: src/frontend/main-window.c:192
msgid "Use native runtime"
msgstr "Naudoti savą vykdymo aplinką"
#: src/frontend/main-window.c:193
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Perjungti tarp savos vykdymo aplinkos ir pridėtinės Steam vykdymo aplinkos."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:202
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Šis parametras buvo išjungtas, nes sistema jau ir yra 32-bitų"
#: src/frontend/main-window.c:206
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Tai galėti padėti apeiti kai kurių neveikiančių žaidimų problemas, tačiau "
"išjungs Steam parduotuvės naršyklę."
#: src/frontend/main-window.c:211
msgid "Force 32-bit mode for Steam"
msgstr "Programai Steam priverstinai naudoti 32-bitų veikseną"
#: src/frontend/main-window.c:219
msgid "Use the intercept library"
msgstr "Naudoti perėmimo biblioteką"
#: src/frontend/main-window.c:220
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Priversti Steam programas naudoti labiau savas bibliotekas, siekiant "
"padidinti suderinamumą."
#: src/frontend/main-window.c:229
msgid "Use the redirect library"
msgstr "Naudoti peradresavimo biblioteką"
#: src/frontend/main-window.c:230
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Nustelbti sistemines iškvietas, siekiant pataisyti žinomas klaidas kai "
"kuriuose Linux perkėlimuose."
#: src/frontend/main-window.c:237
msgid "Use the Unity fullscreen workaround"
msgstr "Naudoti Unity viso ekrano problemos apėjimą"
#: src/frontend/main-window.c:238
msgid ""
"Prevent some Unity games from launching in full screen mode to fix numerous "
"issues"
msgstr ""
"Neleisti kai kuriems Unity žaidimams pasileisti viso ekrano veiksenoje, "
"siekiant pataisyti daugelį klaidų"
#: src/frontend/main-window.c:403
msgid "Failed to save configuration"
msgstr "Nepavyko įrašyti konfigūracijos"
+86
View File
@@ -0,0 +1,86 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Lars-Eivind Bjørtvedt <larseivind.bjoertvedt@gmail.com>, 2017\n"
"Language-Team: Norwegian Bokmål (Norway) (https://www.transifex.com/solus-project/teams/68407/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Integrasjon"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Endre oppførselen til Steam-klienten og spill. Innstillingene vil ikke tre i"
" kraft før Steam-klienten er restartet. Bruk 'Avslutt Steam '-valget for å "
"være sikker på at det lukkes helt."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Bruk lokal kjøreomgivelse"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr "Bytt mellom lokal kjøreomgivelse og Steams innebygde kjøreomgivelse."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Dette valget er deaktivert siden systemet allerede er 32-bits"
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Dette kan få visse defekte spill til å fungere, men vil deaktivere "
"nettleseren i Steam-butikken."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Tving 32-bits modus for Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Bruk avskjæringsbiblioteket"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Tving Steam-applikasjoner til å bruke flere lokale kjøreomgivelser for å "
"maksimere kompatibiliteten."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Bruk videresendingsbiblioteket"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Overstyr systemkall for å fikse kjente feil i enkelte Linux-versjoner av "
"spill."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Kunne ikke lagre konfigurasjon"
+3 -3
View File
@@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Heimen Stoffels <vistausss@outlook.com>, 2017\n"
"Last-Translator: Thimo dZ <tsdezwart@protonmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/solus-project/teams/68407/nl_NL/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -52,12 +52,12 @@ msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Dit kan gebroken spellen doen werken, maar zal de Steam store browser "
"Dit kan niet werkende spellen doen werken, maar zal de Steam store browser "
"uitschakelen."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Forceer 32-bitmodus voor Steam"
msgstr "Forceer 32-bitsmodus voor Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
+88
View File
@@ -0,0 +1,88 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Alex Vorobyev <avorobyev@protonmail.com>, 2017\n"
"Language-Team: Russian (https://www.transifex.com/solus-project/teams/68407/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Интеграция Steam в Linux"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Настройте поведение клиента Steam и игр. Настройки не возымеют эффекта, пока"
" клиент Steam не будет перезапущен. Выберите пункт \"Выход из Steam\", чтобы"
" закрыть клиент."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Использовать системные библиотеки"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Переключение между системными библиотеками и библиотеками, поставляемыми с "
"клиентом Steam."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Эта настройка отключена, поскольку система является 32-битной"
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Эта настройка может помочь с запуском некоторых \"сломанных\" игр, но при "
"этом магазин Steam будет недоступен."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Включить 32-битный режим в Steam"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Использовать библиотеку intercept"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Приложения в Steam будут использовать системные библиотеки для лучшей "
"совместимости."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Использовать библиотеку redirect"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Перехват системных вызовов в некоторых Linux-портах для исправления "
"известных ошибок."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Не удалось сохранить конфигурацию"
+88
View File
@@ -0,0 +1,88 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the linux-steam-integration package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: linux-steam-integration\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-05 19:28+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Demiray Muhterem <mdemiray@msn.com>, 2017\n"
"Language-Team: Turkish (https://www.transifex.com/solus-project/teams/68407/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. Sort out window bits
#. header label
#: src/frontend/main-window.c:131 src/frontend/main-window.c:148
msgid "Linux Steam® Integration"
msgstr "Linux Steam® Bütünleşmesi"
#: src/frontend/main-window.c:162
msgid ""
"Control the behaviour of the Steam client and games. Settings will not take "
"effect until the Steam Client is restarted. Use the 'Exit Steam' option to "
"ensure it closes."
msgstr ""
"Steam istemcisinin ve oyunların davranışını denetleyin. Ayarlar, Steam "
"İstemcisi yeniden başlatılıncaya kadar etkili olmaz. Kapanmasını sağlamak "
"için 'Exit Steam' seçeneğini kullanın."
#: src/frontend/main-window.c:191
msgid "Use native runtime"
msgstr "Yerel çalışma zamanını kullan"
#: src/frontend/main-window.c:192
msgid "Switch between the native runtime and the bundled Steam runtime."
msgstr ""
"Yerli çalışma zamanı ve birlikte verilen Steam çalışma zamanı arasında geçiş"
" yapın."
#. Label is shown to indicate we can't enable 32-bit option
#: src/frontend/main-window.c:201
msgid "This option has been disabled as the system is already 32-bit"
msgstr "Sistem zaten 32-bit olduğu için bu seçenek devre dışı bırakılmıştır"
#: src/frontend/main-window.c:205
msgid ""
"This may workaround some broken games, but will disable the Steam store "
"browser."
msgstr ""
"Bu, bazı kırık oyunları geçici olarak çözebilir, ancak Steam deposu "
"tarayıcısını devre dışı bırakır."
#: src/frontend/main-window.c:210
msgid "Force 32-bit mode for Steam"
msgstr "Steam için 32 bitlik modu zorla"
#: src/frontend/main-window.c:218
msgid "Use the intercept library"
msgstr "Kesme kitaplığını kullanın"
#: src/frontend/main-window.c:219
msgid ""
"Force Steam applications to use more native libraries to maximise "
"compatibility."
msgstr ""
"Steam uygulamalarının uyumluluğu en üst düzeye çıkarmak için daha fazla "
"yerel kütüphane kullanmalarını zorunlu tutun."
#: src/frontend/main-window.c:228
msgid "Use the redirect library"
msgstr "Yönlendirme kütüphanesini kullanın"
#: src/frontend/main-window.c:229
msgid "Override system calls to fix known bugs in some Linux ports."
msgstr ""
"Bazı Linux bağlantı noktalarında bilinen hataları düzeltmek için sistem "
"çağrılarını geçersiz kılın."
#: src/frontend/main-window.c:383
msgid "Failed to save configuration"
msgstr "Yapılandırma kaydedilemedi"
+4
View File
@@ -0,0 +1,4 @@
install_data(
'pulseaudio',
install_dir: join_paths(path_fake_scripts_dir, 'pulseaudio'),
)
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
# Work around games using libfmod which is determined to execute:
# pulseaudio --check > /dev/null 2>&1
if [[ ! -z "$1" ]]; then
if [[ "$1" == "--check" ]] ; then
exit 0
fi
fi
exec /usr/bin/pulseaudio $*
+32 -3
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -52,11 +53,29 @@ const char *lsi_get_home_dir()
char *lsi_get_user_config_dir()
{
const char *home = lsi_get_home_dir();
const char *home = NULL;
char *c = NULL;
char *xdg_config = getenv("XDG_CONFIG_HOME");
char *p = NULL;
/* Respect the XDG_CONFIG_HOME variable if it is set */
if (xdg_config) {
p = realpath(xdg_config, NULL);
if (p) {
return p;
}
return strdup(xdg_config);
}
home = lsi_get_home_dir();
if (asprintf(&c, "%s/.config", home) < 0) {
return NULL;
}
p = realpath(c, NULL);
if (p) {
free(c);
return p;
}
return c;
}
@@ -66,7 +85,17 @@ char *lsi_get_user_config_dir()
static inline char *lsi_get_fallback_steam_dir(const char *home)
{
char *p = NULL;
if (asprintf(&p, "%s/.local/share/Steam", home) < 0) {
char *xdg_data = getenv("XDG_DATA_HOME");
int r = 0;
/* Respect the XDG_CONFIG_HOME variable if it is set */
if (xdg_data) {
r = asprintf(&p, "%s/Steam", xdg_data);
} else {
r = asprintf(&p, "%s/.local/share/Steam", home);
}
if (r < 0) {
return NULL;
}
return p;
+2 -1
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
+2 -1
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
+24 -3
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -32,6 +33,7 @@ struct _LsiSettingsWindow {
/* Only when libredirect is enabled will we have this option */
#ifdef HAVE_LIBREDIRECT
GtkWidget *check_redirect;
GtkWidget *check_unity_hack;
#endif
/* Always have these guys */
@@ -113,7 +115,7 @@ static void lsi_settings_window_init(LsiSettingsWindow *self)
lsi_config_load_defaults(&self->config);
}
/* Conditionally apply CSD */
/* Conditionally apply CSD */
#if GTK_CHECK_VERSION(3, 12, 0)
xdg_desktop = g_getenv("XDG_CURRENT_DESKTOP");
if (xdg_desktop && (strstr(xdg_desktop, "GNOME:") || strstr(xdg_desktop, ":GNOME") ||
@@ -230,6 +232,14 @@ static void lsi_settings_window_init(LsiSettingsWindow *self)
"Linux ports."));
set_row_sensitive(self->check_redirect, FALSE);
gtk_switch_set_active(GTK_SWITCH(self->check_redirect), self->config.use_libredirect);
self->check_unity_hack = insert_grid_toggle(grid,
&row,
_("Use the Unity fullscreen workaround"),
_("Prevent some Unity games from launching in "
"full screen mode to fix numerous issues"));
set_row_sensitive(self->check_unity_hack, FALSE);
gtk_switch_set_active(GTK_SWITCH(self->check_unity_hack), self->config.use_unity_hack);
#endif
/* Hook up our signals. Basically the "native runtime" option controls the two library
@@ -240,6 +250,12 @@ static void lsi_settings_window_init(LsiSettingsWindow *self)
G_CALLBACK(lsi_native_swapped),
self);
/* Changes to redirect will disable/enable unity hack */
g_signal_connect_swapped(self->check_redirect,
"notify::active",
G_CALLBACK(lsi_native_swapped),
self);
/* Ensure our properties are now in sync. */
lsi_native_swapped(self, self->check_native);
@@ -348,11 +364,15 @@ static GtkWidget *insert_grid_toggle(GtkWidget *grid, int *row, const char *titl
static void lsi_native_swapped(LsiSettingsWindow *self, __lsi_unused__ gpointer v)
{
gboolean native_runtime;
gboolean redirect;
native_runtime = gtk_switch_get_active(GTK_SWITCH(self->check_native));
#ifdef HAVE_LIBREDIRECT
redirect = gtk_switch_get_active(GTK_SWITCH(self->check_redirect));
set_row_sensitive(self->check_redirect, native_runtime);
set_row_sensitive(self->check_unity_hack, native_runtime && redirect);
#endif
#ifdef HAVE_LIBINTERCEPT
@@ -372,10 +392,11 @@ static gboolean lsi_window_closed(LsiSettingsWindow *self, __lsi_unused__ GdkEve
#ifdef HAVE_LIBREDIRECT
self->config.use_libredirect = gtk_switch_get_active(GTK_SWITCH(self->check_redirect));
self->config.use_unity_hack = gtk_switch_get_active(GTK_SWITCH(self->check_unity_hack));
#endif
#ifdef HAVE_LIBINTERCEPT
self->config.use_libredirect = gtk_switch_get_active(GTK_SWITCH(self->check_redirect));
self->config.use_libintercept = gtk_switch_get_active(GTK_SWITCH(self->check_intercept));
#endif
/* Try to write new config */
+2 -1
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
+7 -1
View File
@@ -6,8 +6,13 @@ if with_frontend == true
'main-window.c',
]
frontend_name = 'lsi-settings'
if with_snap_support == true
frontend_name = 'linux-steam-integration.settings'
endif
frontend = executable(
'lsi-settings',
frontend_name,
sources: frontend_sources + nica_sources,
include_directories: nica_includes,
dependencies: [
@@ -15,5 +20,6 @@ if with_frontend == true
link_lsi,
],
install: true,
install_dir: path_bindir,
)
endif
+172 -41
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -29,6 +30,10 @@
*/
static const char *matched_process = NULL;
static bool lsi_override_replace_with_host(const char *orig_name, const char **soname,
const char *msg);
static bool lsi_override_soname(unsigned int flag, const char *orig_name, const char **soname);
/**
* We support a number of modes, but we mostly exist to make Steam behave
*/
@@ -82,12 +87,18 @@ static const char *steam_allowed[] = {
"panorama",
"libpangoft2-1.0.so",
"libpango-1.0.so",
"libpangocairo-1.0.so",
/* steamwebhelper */
"libcef.so",
/* Swift shader */
"libGLESv2.so",
"libEGL.so",
/* widevine */
"libwidevinecdmadapter.so",
"libwidevinecdm.so",
};
static const char *wanted_steam_processes[] = {
@@ -106,15 +117,36 @@ static const char *vendor_blacklist[] = {
* loading the mesalib drivers. */
"libgcc_",
"libstdc++",
"libSDL",
/* Ensure we don't match weird made up cruft like "libSDL2_locale" */
"libSDL-1.2",
#if UINTPTR_MAX == 0xffffffffffffffff
/* Only blacklist SDL on native 64-bit builds
* 32-bit builds tend to do weird stuff, like ship incompatible
* patched builds of libSDL (Don't Starve, for example)
*/
"libSDL2-2",
#endif
"libSDL2_ttf",
"libSDL_ttf",
"libSDL2_image",
"libSDL_image",
"libSDL2_mixer",
"libSDL_mixer",
"libSDL2_net",
"libSDL_net",
"libSDL2_gfx",
"libSDL_gfx",
/* vendor-owned */
"libz.so.1",
"libfreetype.so.6",
"libmpg123.so.0",
/* general problem causer. */
"libopenal.so.",
/* thou shalt not replace drivers (swiftshader) ! */
"libGLESv2.so",
"libGL.so",
/* glews (provide glew + glew110 in your distro for full compat) */
"libGLEW.so.1.10",
"libGLEW.so.1.12",
@@ -133,6 +165,8 @@ static const char *vendor_blacklist[] = {
"libcrypto.so.1.0.0",
"libssl.so.1.0.0",
#endif
/* TODO/FUTURE:
"libaudiofile.so.1", */
};
/**
@@ -189,10 +223,18 @@ _nica_public_ unsigned int la_version(unsigned int supported_version)
/**
* lsi_search_steam handles whitelisting for the main Steam processes
*/
char *lsi_search_steam(const char *name)
char *lsi_search_steam(unsigned int flag, const char *name)
{
/* Find out if it exists */
bool file_exists = lsi_file_exists(name);
const char *soname = NULL;
/* Preemptively catch transmutations */
if (lsi_override_soname(flag, name, &soname)) {
return (char *)soname;
}
if (!lsi_file_exists(name)) {
return (char *)name;
}
/* Find out if its a Steam private lib.. These are relative "./" files too! */
if (name && (strstr(name, "/Steam/") || strncmp(name, "./", 2) == 0)) {
@@ -201,11 +243,7 @@ char *lsi_search_steam(const char *name)
return (char *)name;
}
}
if (file_exists) {
lsi_log_debug("blacklisted loading of vendor library: \033[34;1m%s\033[0m",
name);
}
lsi_log_debug("blacklisted loading of vendor library: \033[34;1m%s\033[0m", name);
return NULL;
}
@@ -233,7 +271,20 @@ static const char *vendor_transmute_source[] = {
#ifdef LSI_OVERRIDE_LIBRESSL
"libcrypto.so.36",
"libssl.so.37",
"libcrypto.so.42",
"libssl.so.44",
#endif
/* old name for openal */
"libopenal-soft.so.1",
/* invalid curls */
"libcurl-gnutls.so.3",
"libcurl.so.3",
"libbz2.so.1.0",
"libudev.so.0",
};
/**
@@ -257,10 +308,25 @@ static const char *vendor_transmute_target[] = {
#if defined(LSI_LIBRESSL_MODE_SHIM)
"libcrypto" LSI_LIBRESSL_SUFFIX ".so",
"libssl" LSI_LIBRESSL_SUFFIX ".so",
"libcrypto" LSI_LIBRESSL_SUFFIX ".so",
"libssl" LSI_LIBRESSL_SUFFIX ".so",
#elif defined(LSI_LIBRESSL_MODE_NATIVE)
"libcrypto.so.1.0.0",
"libssl.so.1.0.0",
"libcrypto.so.1.0.0",
"libssl.so.1.0.0",
#endif
/* new name for openal */
"libopenal.so.1",
/* invalid curls */
"libcurl-gnutls.so.4",
"libcurl.so.4",
"libbz2.so.1.0.6",
"libudev.so.1",
};
/**
@@ -341,53 +407,43 @@ static bool lsi_override_x86_derp(const char *orig_name, const char **soname)
orig_name,
path_lookup);
return true;
}
#else
static bool lsi_override_x86_derp(__lsi_unused__ const char *orig_name,
__lsi_unused__ const char **soname)
{
/* Don't perform x86 translation on 32-bit machines */
return false;
#endif
}
#endif
/**
* lsi_override_dlopen is used to override simple dlopen() requests typically
* used by Mono games, i.e.:
*
* <dllmap dll="SDL2.dll" os="linux" cpu="x86-64" target="./lib64/libSDL2-2.0.so.0"/>
*
* We'll attempt to do a trivial lookup for "/usr/./lib64/libSDL2-2.0.so.0 in this
* case.
* Internal helper for path replacement to host lib
*/
static bool lsi_override_dlopen(const char *orig_name, const char **soname)
static bool lsi_override_replace_with_host(const char *orig_name, const char **soname,
const char *msg)
{
static char path_lookup[PATH_MAX];
static char path_copy[PATH_MAX];
char *small_name = NULL;
static const char *library_paths[] = {
#if UINTPTR_MAX == 0xffffffffffffffff
#ifdef HAVE_SNAPD_SUPPORT
"/var/lib/snapd/lib/gl",
#endif
"/usr/lib64",
"/usr/lib/x86_64-linux-gnu",
"/usr/lib",
#else
#ifdef HAVE_SNAPD_SUPPORT
"/var/lib/snapd/lib/gl32",
#endif
"/usr/lib32",
"/usr/lib/i386-linux-gnu",
"/usr/lib",
#endif
};
if (lsi_override_dll_fail(orig_name, soname)) {
return true;
}
if (!lsi_file_exists(orig_name)) {
return false;
}
if (lsi_override_x86_derp(orig_name, soname)) {
return true;
}
if (!strcpy(path_copy, orig_name)) {
return false;
}
@@ -416,16 +472,45 @@ static bool lsi_override_dlopen(const char *orig_name, const char **soname)
}
*soname = path_lookup;
lsi_log_debug(
"intercepting vendor dlopen() \033[31;1m%s\033[0m -> \033[34;1m%s\033[0m",
orig_name,
path_lookup);
if (!msg) {
return true;
}
lsi_log_debug("%s \033[31;1m%s\033[0m -> \033[34;1m%s\033[0m",
msg,
orig_name,
path_lookup);
return true;
}
return false;
}
/**
* lsi_override_dlopen is used to override simple dlopen() requests typically
* used by Mono games, i.e.:
*
* <dllmap dll="SDL2.dll" os="linux" cpu="x86-64" target="./lib64/libSDL2-2.0.so.0"/>
*
* We'll attempt to do a trivial lookup for "/usr/./lib64/libSDL2-2.0.so.0 in this
* case.
*/
static bool lsi_override_dlopen(const char *orig_name, const char **soname)
{
if (lsi_override_dll_fail(orig_name, soname)) {
return true;
}
if (!lsi_file_exists(orig_name)) {
return false;
}
if (lsi_override_x86_derp(orig_name, soname)) {
return true;
}
return lsi_override_replace_with_host(orig_name, soname, "intercepting vendor dlopen()");
}
/**
* lsi_override_soname will deal with LA_SER_ORIG entries, i.e. the original
* soname request when the linker tries to load a library.
@@ -474,6 +559,46 @@ static bool lsi_override_soname(unsigned int flag, const char *orig_name, const
return false;
}
/**
* If the library exists locally, and we're attempting to load this from a
* relative location, strongly attempt to actually use the system-version instead.
*
* Thus, if our CWD is our LD_LIBRARY_PATH and contains "libfreetype.so.6", we'll
* try to use the host version of the library if that exists, instead of relying
* on the locally vendored, potentially insecure/buggy version.
*/
static bool lsi_override_local(unsigned int flag, const char *orig_name, const char **soname)
{
*soname = NULL;
/* We only need to deal with LA_SER_ORIG */
if ((flag & LA_SER_ORIG) != LA_SER_ORIG) {
return false;
}
/* We only care about relative paths */
if (strstr(orig_name, "/")) {
return false;
}
/* We also only care about relative paths */
if (!lsi_file_exists(orig_name)) {
return false;
}
/* Resolve all paths back to the real library path version if they exist */
for (size_t i = 0; i < ARRAY_SIZE(vendor_blacklist); i++) {
if (!strstr(orig_name, vendor_blacklist[i])) {
continue;
}
return lsi_override_replace_with_host(orig_name,
soname,
"forcing use of host library");
}
return false;
}
char *lsi_blacklist_vendor(unsigned int flag, const char *name)
{
/* Find out if it exists */
@@ -485,8 +610,14 @@ char *lsi_blacklist_vendor(unsigned int flag, const char *name)
return (char *)override_soname;
}
/* Locally exists due to directory foobar */
if (lsi_override_local(flag, name, &override_soname)) {
return (char *)override_soname;
}
/* Find out if its a Steam private lib.. These are relative "./" files too! */
if (name && (strstr(name, "/Steam/") || strncmp(name, "./", 2) == 0)) {
if (name && (strstr(name, "/Steam/") || strstr(name, "/steamapps/") ||
strncmp(name, "./", 2) == 0)) {
for (size_t i = 0; i < ARRAY_SIZE(vendor_blacklist); i++) {
if (!strstr(name, vendor_blacklist[i])) {
continue;
@@ -516,7 +647,7 @@ _nica_public_ char *la_objsearch(const char *name, __lsi_unused__ uintptr_t *coo
{
switch (work_mode) {
case INTERCEPT_MODE_STEAM:
return lsi_search_steam(name);
return lsi_search_steam(flag, name);
case INTERCEPT_MODE_VENDOR_OFFENDER:
return lsi_blacklist_vendor(flag, name);
case INTERCEPT_MODE_NONE:
+25 -3
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -127,6 +128,13 @@ bool lsi_config_load(LsiConfig *config)
map_val = NULL;
}
/* Do we want unity3d hack? */
map_val = nc_hashmap_get(nc_hashmap_get(mconfig, "Steam"), "use-unity-hack");
if (map_val) {
config->use_unity_hack = lsi_is_boolean_true(map_val);
map_val = NULL;
}
/* Check if 32-bit is being forced */
map_val = nc_hashmap_get(nc_hashmap_get(mconfig, "Steam"), "force-32bit");
if (map_val) {
@@ -147,11 +155,23 @@ bool lsi_config_store(LsiConfig *config)
{
autofree(FILE) *fp = NULL;
autofree(char) *conf = NULL;
autofree(char) *dir = NULL;
if (!config) {
return false;
}
/* Ensure we have config directory, i.e. when as a snap.. */
dir = lsi_get_user_config_dir();
if (!dir) {
return false;
}
if (!lsi_file_exists(dir)) {
if (mkdir(dir, 00755) < 0) {
return false;
}
}
conf = lsi_get_user_config_file();
if (!conf) {
return false;
@@ -163,11 +183,12 @@ bool lsi_config_store(LsiConfig *config)
}
if (fprintf(fp,
"[Steam]\nuse-native-runtime = %s\nforce-32bit = %s\nuse-libintercept = "
"%s\nuse-libredirect = %s\n",
"%s\nuse-libredirect = %s\nuse-unity-hack = %s\n",
lsi_bool_to_string(config->use_native_runtime),
lsi_bool_to_string(config->force_32),
lsi_bool_to_string(config->use_libintercept),
lsi_bool_to_string(config->use_libredirect)) < 0) {
lsi_bool_to_string(config->use_libredirect),
lsi_bool_to_string(config->use_unity_hack)) < 0) {
return false;
}
return true;
@@ -183,6 +204,7 @@ void lsi_config_load_defaults(LsiConfig *config)
config->use_native_runtime = true;
config->use_libintercept = true;
config->use_libredirect = true;
config->use_unity_hack = true;
}
void lsi_report_failure(const char *s, ...)
+1
View File
@@ -30,6 +30,7 @@ typedef struct LsiConfig {
bool use_native_runtime; /**<Do we force our native runtime? */
bool use_libintercept; /**<Do we force libintercept? */
bool use_libredirect; /**<Do we force libredirect? */
bool use_unity_hack; /**<Do we enable unity3d hack? */
} LsiConfig;
/**
+68 -31
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -18,13 +19,20 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "config.h"
/* Expose getpwuid override in snapd */
#ifdef HAVE_SNAPD_SUPPORT
#include <pwd.h>
#endif
#include "../common/common.h"
#include "../common/files.h"
#include "../common/log.h"
#include "nica/util.h"
#include "private.h"
#include "profile.h"
#include "redirect.h"
@@ -47,13 +55,6 @@ static volatile bool lsi_init = false;
*/
static volatile bool lsi_override = false;
/**
* Handle definitions
*/
typedef int (*lsi_open_file)(const char *p, int flags, mode_t mode);
typedef FILE *(*lsi_fopen64_file)(const char *p, const char *modes);
/**
* Known profiles
*/
@@ -62,19 +63,6 @@ static lsi_profile_generator_func generators[] = {
&lsi_redirect_profile_new_project_highrise,
};
/**
* Global storage of handles for nicer organisation.
*/
typedef struct LsiRedirectTable {
lsi_open_file open;
lsi_fopen64_file fopen64;
/* Allow future handle opens.. */
struct {
void *libc;
} handles;
} LsiRedirectTable;
/**
* Easy mapping to make it quick and easy to add new function overrides
*/
@@ -102,6 +90,9 @@ static LsiRedirectProfile *lsi_profile = NULL;
static LsiSymbolBinding lsi_libc_bindings[] = {
SYMBOL_BINDING(libc, open),
SYMBOL_BINDING(libc, fopen64),
#ifdef HAVE_SNAPD_SUPPORT
SYMBOL_BINDING(libc, getpwuid),
#endif
};
/**
@@ -119,6 +110,8 @@ __attribute__((destructor)) static void lsi_redirect_shutdown(void)
}
lsi_init = false;
lsi_unity_cleanup(&lsi_table);
if (lsi_table.handles.libc) {
dlclose(lsi_table.handles.libc);
lsi_table.handles.libc = NULL;
@@ -213,7 +206,9 @@ __attribute__((constructor)) static void lsi_redirect_init(void)
return;
}
/* Grab the stam installation directories */
lsi_unity_startup(&lsi_table);
/* Grab the steam installation directories */
orig = paths = lsi_get_steam_paths();
/* For each path try to form a valid profile for the process name and Steam directory */
@@ -305,16 +300,20 @@ _nica_public_ int open(const char *p, int flags, ...)
mode = va_arg(va, mode_t);
va_end(va);
lsi_maybe_init_unity3d(&lsi_table, p);
/* Not interested in this guy apparently */
if (!lsi_override) {
return lsi_table.open(p, flags, mode);
goto fallback_open;
}
replacement = lsi_get_redirect_path("open", op, p);
if (!replacement) {
return lsi_table.open(p, flags, mode);
if (replacement) {
return lsi_table.open(replacement, flags, mode);
}
return lsi_table.open(replacement, flags, mode);
fallback_open:
return lsi_table.open(p, flags, mode);
}
_nica_public_ FILE *fopen64(const char *p, const char *modes)
@@ -327,18 +326,56 @@ _nica_public_ FILE *fopen64(const char *p, const char *modes)
*/
lsi_redirect_init_tables();
lsi_maybe_init_unity3d(&lsi_table, p);
/* Not interested in this guy apparently */
if (!lsi_override) {
return lsi_table.fopen64(p, modes);
goto fallback_open;
}
replacement = lsi_get_redirect_path("fopen64", op, p);
if (!replacement) {
return lsi_table.fopen64(p, modes);
if (replacement) {
return lsi_table.fopen64(replacement, modes);
}
return lsi_table.fopen64(replacement, modes);
fallback_open:
if (is_unity3d_prefs_file(&lsi_table, p)) {
return lsi_unity_redirect(&lsi_table, p, modes);
}
return lsi_table.fopen64(p, modes);
}
#ifdef HAVE_SNAPD_SUPPORT
#include <unistd.h>
_nica_public_ struct passwd *getpwuid(uid_t uid)
{
/* Must ensure we're **really** initialised, as we might see open happen
* before the constructor..
*/
lsi_redirect_init_tables();
struct passwd *ret = NULL;
const char *snap_root = getenv("SNAP_USER_COMMON");
/* If they're requesting our uid and SNAP_USER_COMMON is set, then
* let us override the home directory to be correct.
*/
ret = lsi_table.getpwuid(uid);
if (!ret) {
return NULL;
}
if (uid == getuid() && snap_root && *snap_root) {
ret->pw_dir = (char *)snap_root;
}
return ret;
}
#endif
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
+3
View File
@@ -4,12 +4,14 @@ if with_libredirect == true
# Might not need libdl for alt libcs
libdl = meson.get_compiler('c').find_library('dl', required : false)
librt = meson.get_compiler('c').find_library('rt', required : false)
redirect_sources = [
'main.c',
'profile.c',
'profiles/ark.c',
'profiles/project_highrise.c',
'unity.c',
]
sym_map = join_paths(meson.current_source_dir(), 'sym.map')
@@ -22,6 +24,7 @@ if with_libredirect == true
include_directories: nica_includes,
dependencies: [
libdl,
librt,
link_lsi_common,
],
install: true,
+83
View File
@@ -0,0 +1,83 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2017 Ikey Doherty <ikey@solus-project.com>
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*/
#pragma once
#include <stdbool.h>
#include <stdio.h>
#include "config.h"
#ifdef HAVE_SNAPD_SUPPORT
#include <pwd.h>
#endif
/**
* Handle definitions
*/
typedef int (*lsi_open_file)(const char *p, int flags, mode_t mode);
typedef FILE *(*lsi_fopen64_file)(const char *p, const char *modes);
#ifdef HAVE_SNAPD_SUPPORT
typedef struct passwd *(*lsi_getpwuid)(uid_t uid);
#endif
/**
* Global storage of handles for nicer organisation.
*/
typedef struct LsiRedirectTable {
lsi_open_file open;
lsi_fopen64_file fopen64;
#ifdef HAVE_SNAPD_SUPPORT
lsi_getpwuid getpwuid;
#endif
/* Allow future handle opens.. */
struct {
void *libc;
} handles;
/* Our shm_open() unity3d redirect.. */
struct {
char *original_config_path;
char *config_path;
char *shm_path;
bool enabled;
bool failed;
bool had_init;
} unity3d;
} LsiRedirectTable;
void lsi_unity_startup(LsiRedirectTable *lsi_table);
void lsi_unity_cleanup(LsiRedirectTable *lsi_table);
/* API Definitions for Unity handlers */
void lsi_maybe_init_unity3d(LsiRedirectTable *lsi_table, const char *p);
void lsi_unity_backup_config(LsiRedirectTable *lsi_table);
FILE *lsi_unity_redirect(LsiRedirectTable *lsi_table, const char *p, const char *modes);
FILE *lsi_unity_get_config_file(LsiRedirectTable *lsi_table, const char *modes);
void lsi_unity_trim_copy_config(FILE *from, FILE *to);
bool is_unity3d_prefs_file(LsiRedirectTable *lsi_table, const char *p);
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 8
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=8 tabstop=8 expandtab:
* :indentSize=8:tabSize=8:noTabs=true:
*/
+3 -2
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -63,7 +64,7 @@ void lsi_redirect_profile_insert_rule(LsiRedirectProfile *self, LsiRedirect *red
default:
lsi_log_error("Attempted insert of unknown rule into '%s'", self->name);
lsi_redirect_free(redirect);
break;
return;
}
/* Set head or prepend the rule */
+2 -1
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
+2 -1
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
+1
View File
@@ -1,6 +1,7 @@
{
global:
fopen64;
getpwuid;
open;
local:
*;
+333
View File
@@ -0,0 +1,333 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*/
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include "../common/files.h"
#include "../common/log.h"
#include "nica/util.h"
#include "private.h"
/**
* Cheap and cheerful, this is our default fake unity3d config which we write
* out to trick unity3d games into reading a non broken config on Linux.
* This forces the equivalent of "-screen-fullscreen 0" because the older
* Unity builds will set fullscreen to 1, but they'll also set the resolution
* width and height to 0 (which is then clamped)
*/
static const char *unity3d_config =
"\
<unity_prefs version_major=\"1\" version_minor=\"1\">\n\
<pref name=\"Screenmanager Is Fullscreen mode\" type=\"int\">0</pref>\n\
</unity_prefs>\n\
";
/**
* When we rewrite the config file in place we'll repllace the "Is Fullscreen mode"
* line with this one so that we forcibly disable it.
*/
static const char *unity3d_snippet =
" <pref name=\"Screenmanager Is Fullscreen mode\" type=\"int\">0</pref>\n";
static inline bool str_has_prefix(const char *a, const char *b)
{
size_t lena, lenb;
lena = strlen(a);
lenb = strlen(b);
if (lenb > lena) {
return false;
}
return strncmp(a, b, lenb) == 0;
}
/**
* The unity3d config path has been accessed, so we need to turn on our
* workaround for unity3d prefs
*/
void lsi_maybe_init_unity3d(LsiRedirectTable *lsi_table, const char *p)
{
if (lsi_table->unity3d.enabled) {
return;
}
if (!lsi_table->unity3d.config_path) {
return;
}
if (!str_has_prefix(p, lsi_table->unity3d.config_path)) {
return;
}
/* Set by the main shim */
if (!getenv("LSI_USE_UNITY_HACK")) {
return;
}
/* We're in action */
lsi_table->unity3d.enabled = true;
lsi_log_set_id("unity3d");
lsi_log_info("Activating \"black screen of nope\" workaround");
}
/**
* Determine if the input path is a unity3d "prefs" file
*/
bool is_unity3d_prefs_file(LsiRedirectTable *lsi_table, const char *p)
{
autofree(char) *clone = NULL;
char *basenom = NULL;
/* Must only happen when enabled */
if (!lsi_table->unity3d.enabled) {
return false;
}
/* We found it already */
if (lsi_table->unity3d.original_config_path) {
return false;
}
/* Must be in config path */
if (!str_has_prefix(p, lsi_table->unity3d.config_path)) {
return false;
}
clone = strdup(p);
if (!clone) {
return false;
}
basenom = basename(clone);
if (!basenom) {
return false;
}
/* Must be called "prefs" */
return strcmp(basenom, "prefs") == 0 ? true : false;
}
/**
* Copy the config from the @from file to the @to file, which
* will also strip out any "evil" lines, i.e. the fullscreen
* stanza.
*
* If the input file does not exist, the default configuration
* will be used.
*/
void lsi_unity_trim_copy_config(FILE *from, FILE *to)
{
char *buf = NULL;
size_t sn = 0;
ssize_t r = 0;
/* No input? Write the default configuration then */
if (!from) {
if (fwrite(unity3d_config, strlen(unity3d_config), 1, to) != 1) {
lsi_log_error("Failed to create initial Unity3D config: %s",
strerror(errno));
}
return;
}
/* Have an input file, write to the output but omit all the bad lines */
while ((r = getline(&buf, &sn, from)) != -1) {
const char *to_write = NULL;
/* Rewrite this line, it breaks games. */
if (strstr(buf, "Screenmanager Is Fullscreen mode")) {
to_write = unity3d_snippet;
r = strlen(to_write);
} else {
to_write = buf;
}
if (fwrite(to_write, r, 1, to) != 1) {
lsi_log_error("Failed to write Unity3D config: %s", strerror(errno));
goto failed;
}
if (buf) {
free(buf);
buf = NULL;
}
}
fflush(to);
failed:
if (buf) {
free(buf);
}
}
/**
* Clone the existing shm configuration into the real config path, and copy
* all lines that we "like"
*
* Basically this ensures we force the dumped config to omit the fullscreen
* options as they break so many games.
*/
void lsi_unity_backup_config(LsiRedirectTable *lsi_table)
{
autofree(FILE) *shm_file = NULL;
autofree(FILE) *dest_file = NULL;
if (!lsi_table->unity3d.enabled || !lsi_table->unity3d.original_config_path) {
return;
}
shm_file = lsi_unity_get_config_file(lsi_table, "r");
if (!shm_file) {
return;
}
dest_file = lsi_table->fopen64(lsi_table->unity3d.original_config_path, "w");
if (!dest_file) {
return;
}
lsi_log_debug("Saved Unity3D config to %s", lsi_table->unity3d.original_config_path);
lsi_unity_trim_copy_config(shm_file, dest_file);
}
/**
* Get the shm file as a FILE stream
*/
FILE *lsi_unity_get_config_file(LsiRedirectTable *lsi_table, const char *modes)
{
int perm = O_RDONLY;
if (strstr(modes, "w")) {
perm = O_RDWR | O_CREAT | O_TRUNC;
}
/* Attempt to shm_open our fake path */
int fd = shm_open(lsi_table->unity3d.shm_path, perm, 0666);
if (!fd) {
return NULL;
}
return fdopen(fd, modes);
}
/**
* We now need to initialise the unity3d config if we haven't done so
*/
static void lsi_unity_init_config(LsiRedirectTable *lsi_table)
{
autofree(FILE) *source = NULL;
autofree(FILE) *dest = NULL;
if (lsi_table->unity3d.had_init || lsi_table->unity3d.failed) {
return;
}
lsi_table->unity3d.had_init = true;
dest = lsi_unity_get_config_file(lsi_table, "w");
source = lsi_table->fopen64(lsi_table->unity3d.original_config_path, "r");
lsi_unity_trim_copy_config(source, dest);
}
/**
* Redirect requests for non-existant config files in Unity3D to a temporary
* shm file which we'll write our initial "sane" configuration to.
*/
FILE *lsi_unity_redirect(LsiRedirectTable *lsi_table, const char *p, const char *modes)
{
FILE *ret = NULL;
/* Preserve this path for later cloning.. */
lsi_table->unity3d.original_config_path = strdup(p);
lsi_unity_init_config(lsi_table);
ret = lsi_unity_get_config_file(lsi_table, modes);
if (!ret) {
return NULL;
}
lsi_log_debug("fopen64(%s): Redirecting unity config '%s' to shm(%s)",
modes,
p,
lsi_table->unity3d.shm_path);
return ret;
}
/**
* Set up any needed variables for future unity usage
*/
void lsi_unity_startup(LsiRedirectTable *lsi_table)
{
autofree(char) *xdg_config_dir = NULL;
/* Ensure we know the path to unity3d config */
xdg_config_dir = lsi_get_user_config_dir();
if (asprintf(&lsi_table->unity3d.config_path, "%s/unity3d", xdg_config_dir) < 0) {
fputs("OOM\n", stderr);
abort();
}
/* shm path for our fake unity3d config path */
if (asprintf(&lsi_table->unity3d.shm_path,
"/u%d-LinuxSteamIntegration.unity3d.%d",
getuid(),
getpgrp()) < 0) {
fputs("OOM\n", stderr);
abort();
}
/* Symbolic, we don't just use this for anyone, yknow. :P */
lsi_table->unity3d.enabled = false;
lsi_table->unity3d.failed = false;
}
void lsi_unity_cleanup(LsiRedirectTable *lsi_table)
{
if (lsi_table->unity3d.original_config_path) {
lsi_unity_backup_config(lsi_table);
free(lsi_table->unity3d.original_config_path);
lsi_table->unity3d.original_config_path = NULL;
}
if (lsi_table->unity3d.config_path) {
free(lsi_table->unity3d.config_path);
lsi_table->unity3d.config_path = NULL;
}
if (lsi_table->unity3d.shm_path) {
(void)shm_unlink(lsi_table->unity3d.shm_path);
free(lsi_table->unity3d.shm_path);
lsi_table->unity3d.shm_path = NULL;
}
}
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 8
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=8 tabstop=8 expandtab:
* :indentSize=8:tabSize=8:noTabs=true:
*/
+59
View File
@@ -0,0 +1,59 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*/
#define _GNU_SOURCE
#include <linux/limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lsi.h"
#include "shim.h"
int main(int argc, char **argv)
{
const char *command = NULL;
if (!shim_bootstrap()) {
return EXIT_FAILURE;
}
/* Drop our own binary from the passed in options */
--argc;
++argv;
if (argc < 1) {
lsi_report_failure("lsi-exec was not passed a valid command");
return EXIT_FAILURE;
}
command = argv[0];
--argc;
++argv;
/* Now execute. */
return shim_execute_path(command, argc, argv);
}
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 8
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=8 tabstop=8 expandtab:
* :indentSize=8:tabSize=8:noTabs=true:
*/
+80
View File
@@ -0,0 +1,80 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*/
#define _GNU_SOURCE
#include <linux/limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../common/files.h"
#include "config.h"
#include "lsi.h"
#include "shim.h"
/**
* Helper to get the Steam binary, respecting "$SNAP" if needed
*/
static const char *shim_get_steam_binary(const char *prefix)
{
static char tgt[PATH_MAX] = { 0 };
if (snprintf(tgt, sizeof(tgt), "%s%s", prefix ? prefix : "", STEAM_BINARY) < 0) {
return STEAM_BINARY;
}
return tgt;
}
int main(int argc, char **argv)
{
const char *operation_prefix = NULL;
const char *steam_binary = NULL;
__attribute__((unused)) const char *tdir = NULL;
__attribute__((unused)) int dir_ret = 0;
if (!shim_bootstrap()) {
return EXIT_FAILURE;
}
#ifdef HAVE_SNAPD_SUPPORT
operation_prefix = getenv("SNAP");
tdir = getenv("SNAP_USER_COMMON");
#endif
steam_binary = shim_get_steam_binary(operation_prefix);
if (!lsi_file_exists(steam_binary)) {
lsi_report_failure("Steam isn't currently installed at %s", steam_binary);
return EXIT_FAILURE;
}
if (tdir) {
dir_ret = chdir(tdir);
}
return shim_execute(steam_binary, --argc, ++argv);
}
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 8
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=8 tabstop=8 expandtab:
* :indentSize=8:tabSize=8:noTabs=true:
*/
+24
View File
@@ -7,8 +7,20 @@ endif
if shim_behaviour != 'none'
shim_sources = [
'shim.c',
'main.c',
]
exec_sources = [
'shim.c',
'lsi-exec.c',
]
exec_name = 'lsi-exec'
frontend_name = 'lsi-settings'
if with_snap_support == true
exec_name = 'linux-steam-integration.exec'
endif
shim = executable(
shim_target_name,
sources: shim_sources + nica_sources,
@@ -17,5 +29,17 @@ if shim_behaviour != 'none'
link_lsi,
],
install: true,
install_dir: path_bindir,
)
lsi_exec = executable(
exec_name,
sources: exec_sources + nica_sources,
include_directories: nica_includes,
dependencies: [
link_lsi,
],
install: true,
install_dir: path_bindir,
)
endif
+297 -65
View File
@@ -1,7 +1,8 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2016-2018 Ikey Doherty <ikey@solus-project.com>
* Copyright © 2018-2019 Intel Corporation
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
@@ -12,6 +13,7 @@
#define _GNU_SOURCE
#include <errno.h>
#include <glob.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
@@ -19,97 +21,298 @@
#include <unistd.h>
#include "../common/files.h"
#include "../common/log.h"
#include "../nica/files.h"
#include "config.h"
#include "lsi.h"
/**
* Required to force Steam into 32-bit detection mode, which is useful for
* recent issues like the CS:GO 64-bit update with huge FPS drops
*/
#define EMUL32BIN "linux32"
#include "shim.h"
/**
* Audit path is used for the libintercept library to ensure Steam only uses the
* host SDL, etc.
*/
#define AUDIT_PATH "/usr/\$LIB/liblsi-intercept.so"
#define AUDIT_PATH "/usr/$LIB/liblsi-intercept.so"
/**
* Redirect path is used for the libredirect library to perform internal
* redirections in functions like `open()` where needed to hotfix games
* at runtime.
*/
#define REDIRECT_PATH "/usr/\$LIB/liblsi-redirect.so"
#define REDIRECT_PATH "/usr/$LIB/liblsi-redirect.so"
/**
* Potential for the host Vulkan ICD files (old vs new)
*/
#define VK_GLOB "/var/lib/snapd/lib/gl/*nvidia*.json"
#define VK_GLOB_2 "/var/lib/snapd/lib/vulkan/*nvidia*.json"
/**
* Used to update a value in the environment, and perform a prepend if the variable
* is already set.
*/
static void shim_export_merge_vars(const char *var_name, const char *prefix, const char *value)
{
static char copy_buffer[PATH_MAX] = { 0 };
const char *env_exist = NULL;
int ret = 0;
env_exist = getenv(var_name);
ret = snprintf(copy_buffer,
sizeof(copy_buffer),
"%s%s%s%s",
prefix ? prefix : "",
value,
env_exist ? ":" : "",
env_exist ? env_exist : "");
if (ret < 0) {
lsi_log_error("failed to update variable '%s'", var_name);
return;
}
lsi_log_debug("%s = %s", var_name, copy_buffer);
setenv(var_name, copy_buffer, 1);
}
/**
* Set up the LD_AUDIT environment - respecting $SNAP if set
*/
static void shim_set_audit_path(const char *prefix)
{
shim_export_merge_vars("LD_AUDIT", prefix, AUDIT_PATH);
}
/**
* Set up LD_PRELOAD, respecting an existing LD_PRELOAD and forcing ourselves
* to be first in the list.
*/
static void shim_set_ld_preload(void)
static void shim_set_ld_preload(const char *prefix)
{
const char *preload = NULL;
static char tgt[PATH_MAX] = { 0 };
preload = getenv("LD_PRELOAD");
if (!preload) {
setenv("LD_PRELOAD", REDIRECT_PATH, 1);
return;
}
if (snprintf(tgt, sizeof(tgt), "%s:%s", REDIRECT_PATH, preload) < 0) {
setenv("LD_PRELOAD", REDIRECT_PATH, 1);
return;
}
setenv("LD_PRELOAD", tgt, 1);
shim_export_merge_vars("LD_PRELOAD", prefix, REDIRECT_PATH);
}
int main(int argc, char **argv)
#ifdef HAVE_SNAPD_SUPPORT
/**
* This function is only used during our initial bootstrap phase to ensure
* we're able to set up the environment and directories correctly under the
* snapd system.
*/
static void shim_init_user(const char *userdir)
{
LsiConfig config = { 0 };
bool is_x86_64;
const char *n_argv[argc + 2];
const char *exec_command = NULL;
/* Use the appropriate Steam depending on configuration */
const char *lsi_exec_bin = NULL;
int i = 1;
int8_t off = 0;
int (*vfunc)(const char *, char *const argv[]) = NULL;
static const char *paths[] = {
".local/share",
".config",
".cache",
};
static const char *vars[] = {
"XDG_DATA_HOME",
"XDG_CONFIG_HOME",
"XDG_CACHE_HOME",
};
static char tgt[PATH_MAX] = { 0 };
lsi_exec_bin = STEAM_BINARY;
for (size_t i = 0; i < ARRAY_SIZE(paths); i++) {
if (snprintf(tgt, sizeof(tgt), "%s/%s", userdir, paths[i]) < 0) {
lsi_log_error("memory failure");
return;
}
if (!lsi_file_exists(tgt)) {
if (!nc_mkdir_p(tgt, 00755)) {
lsi_log_error("failed to construct %s: %s", tgt, strerror(errno));
goto write_var;
}
lsi_log_debug("Constructing %s: %s", vars[i], tgt);
}
write_var:
setenv(vars[i], tgt, 1);
}
}
/* Initialise config */
if (!lsi_config_load(&config)) {
lsi_config_load_defaults(&config);
/**
* Attempt to set up Vulkan in the environment by looking for the ICD files
* passed from the hostfs
*/
static bool shim_init_vulkan(const char *glob_path)
{
glob_t glo = { 0 };
glob(glob_path, GLOB_DOOFFS, NULL, &glo);
if (glo.gl_pathc < 1) {
globfree(&glo);
return false;
}
is_x86_64 = lsi_system_is_64bit();
/* Preserve glob order and insert environment in reverse */
for (int i = glo.gl_pathc - 1; i >= 0; i--) {
shim_export_merge_vars("VK_ICD_FILENAMES", NULL, glo.gl_pathv[i]);
}
if (!lsi_file_exists(lsi_exec_bin)) {
lsi_report_failure("Steam isn't currently installed at %s", lsi_exec_bin);
return EXIT_FAILURE;
globfree(&glo);
return true;
}
#endif
#ifdef HAVE_SNAPD_SUPPORT
/**
* Attempt to push a path into the variable name if it actually exists
*/
static void shim_export_ld_dir(const char *var_name, const char *dir)
{
if (!lsi_file_exists(dir)) {
return;
}
shim_export_merge_vars(var_name, NULL, dir);
}
/**
* Set up any extra environment pieces that might need fixing
*
* Currently this only sets up the snapd environmental variables, so that
* we don't rely on separate bootstrap scripts out of tree.
*/
static void shim_export_extra(const char *prefix)
{
static const char *snap_user = NULL;
static const char *xdg_home = NULL;
/* Add all of these guys to LD_LIBRARY_PATH if they exist.
* This allows us to handle the special-case multiarch mounts.
*/
static const char *ld_library_dirs[] = {
"/var/lib/snapd/lib/gl/vdpau", /**<64-bit vdpau */
"/var/lib/snapd/lib/gl32/vdpau", /**<32bit vdpau */
"/var/lib/snapd/lib/gl", /**<Potential host NVIDIA libraries */
"/var/lib/snapd/lib/gl32", /**<Potential host NVIDIA 32-bit libraries (new location) */
};
/* Add any necessary DRI drivers to the path, though in reality this
* shouldn't REALLY be needed, but let's just play it safe.
*/
static const char *dri_drivers_extra[] = {
"/usr/lib32/dri",
"/usr/lib/dri",
};
unsetenv("LIBGL_DRIVERS_PATH");
unsetenv("LD_LIBRARY_PATH");
/* Include all GLI driver paths */
for (size_t i = 0; i < ARRAY_SIZE(dri_drivers_extra); i++) {
shim_export_ld_dir("LIBGL_DRIVERS_PATH", dri_drivers_extra[i]);
shim_export_ld_dir("LD_LIBRARY_PATH", dri_drivers_extra[i]);
}
/* Now set the library path accordingly */
for (size_t i = 0; i < ARRAY_SIZE(ld_library_dirs); i++) {
shim_export_ld_dir("LD_LIBRARY_PATH", ld_library_dirs[i]);
}
/* the vdpau directory only exists on multiarch */
if (lsi_file_exists("/var/lib/snapd/lib/gl/vdpau")) {
shim_export_ld_dir("VDPAU_DRIVER_PATH", "/var/lib/snapd/lib/gl/vdpau");
} else {
shim_export_ld_dir("VDPAU_DRIVER_PATH", "/var/lib/snapd/lib/gl");
}
/* Path */
shim_export_merge_vars("PATH", prefix, "/usr/bin");
shim_export_merge_vars("PATH", prefix, "/bin");
/* We require our PulseAudio fake script to be seen first. */
shim_export_merge_vars("PATH", prefix, FAKE_SCRIPTS_DIR "/pulseaudio");
/* Try both known Vulkan ICD paths */
if (!shim_init_vulkan(VK_GLOB_2)) {
shim_init_vulkan(VK_GLOB);
}
/* XDG */
shim_export_merge_vars("XDG_CONFIG_DIRS", NULL, "/etc/xdg");
shim_export_merge_vars("XDG_CONFIG_DIRS", NULL, "/usr/share/xdg");
shim_export_merge_vars("XDG_CONFIG_DIRS", prefix, "/etc/xdg");
shim_export_merge_vars("XDG_CONFIG_DIRS", prefix, "/usr/xdg");
shim_export_merge_vars("XDG_DATA_DIRS", prefix, "/usr/share");
snap_user = getenv("SNAP_USER_COMMON");
shim_export_merge_vars("XDG_DATA_DIRS", NULL, "/usr/share");
shim_export_merge_vars("XDG_DATA_DIRS", prefix, "/usr/share");
if (snap_user) {
shim_export_merge_vars("XDG_DATA_DIRS", NULL, snap_user);
shim_init_user(snap_user);
}
/* Ensure XDG_RUNTIME_DIR really exists */
xdg_home = getenv("XDG_RUNTIME_DIR");
if (!xdg_home) {
return;
}
if (lsi_file_exists(xdg_home)) {
return;
}
if (!nc_mkdir_p(xdg_home, 00755)) {
lsi_log_error("Failed to setup XDG_RUNTIME_DIR %s: %s", xdg_home, strerror(errno));
return;
}
lsi_log_debug("Constructed XDG_RUNTIME_DIR: %s", xdg_home);
}
#else
static void shim_export_extra(__lsi_unused__ const char *prefix)
{
}
#endif
static LsiConfig lsi_config = { 0 };
/* Public API */
bool shim_bootstrap()
{
const char *operation_prefix = NULL;
#ifdef HAVE_SNAPD_SUPPORT
/* Snapd specific prefix */
operation_prefix = getenv("SNAP");
#endif
/* We might have additional variables we need to export and we
* might also end up changing XDG_CONFIG_HOME - ensure we actually
* read our settings from the right place. */
shim_export_extra(operation_prefix);
/* Ensure we now have some kind of config */
if (!lsi_config_load(&lsi_config)) {
lsi_config_load_defaults(&lsi_config);
}
/* Force STEAM_RUNTIME into the environment */
if (config.use_native_runtime) {
if (lsi_config.use_native_runtime) {
/* Explicitly disable the runtime */
setenv("STEAM_RUNTIME", "0", 1);
#ifdef HAVE_LIBINTERCEPT
/* Only use libintercept in combination with native runtime! */
if (config.use_libintercept) {
setenv("LD_AUDIT", AUDIT_PATH, 1);
if (lsi_config.use_libintercept) {
shim_set_audit_path(operation_prefix);
}
#endif
#ifdef HAVE_LIBREDIRECT
/* Only use libredirect in combination with native runtime! */
if (config.use_libredirect) {
shim_set_ld_preload();
if (lsi_config.use_libredirect) {
shim_set_ld_preload(operation_prefix);
}
/* And unity hack is dependent on libredirect.. */
if (lsi_config.use_unity_hack) {
setenv("LSI_USE_UNITY_HACK", "1", 1);
}
#endif
} else {
/* Only preload when needed. */
if (lsi_system_requires_preload()) {
setenv("LD_PRELOAD", lsi_preload_list(), 1);
shim_export_merge_vars("LD_PRELOAD", operation_prefix, lsi_preload_list());
}
setenv("STEAM_RUNTIME", "1", 1);
}
@@ -118,6 +321,9 @@ int main(int argc, char **argv)
* usage of dbus by Steam. Help them out */
setenv("DBUS_FATAL_WARNINGS", "0", 1);
/* Requires Solus patch to actually work */
setenv("DBUS_SILENCE_WARNINGS", "1", 1);
/* A recent regression is to interpret XMODIFIERS and then fail to
* make it beyond `SDL_InitSubSystem` due to `InitIME` failing to
* properly use D-BUS ...
@@ -125,37 +331,63 @@ int main(int argc, char **argv)
unsetenv("XMODIFIERS");
unsetenv("GTK_MODULES");
memset(&n_argv, 0, sizeof(char *) * (argc + 2));
/* All done now. */
return true;
}
/* If we're 64-bit and 32-bit is forced, proxy via linux32 */
if (config.force_32 && is_x86_64) {
exec_command = EMUL32BIN;
n_argv[0] = EMUL32BIN;
n_argv[1] = lsi_exec_bin;
off = 1;
/* Use linux32 in the path */
static int shim_execute_internal(const char *command, int argc, char **argv, bool use_path)
{
bool is_x86_64;
const char *n_argv[argc + 5];
const char *exec_command = NULL;
int i = 1;
int8_t off = 1;
int (*vfunc)(const char *, char *const argv[]) = NULL;
is_x86_64 = lsi_system_is_64bit();
memset(&n_argv, 0, sizeof(char *) * (argc + 5));
/* If we're 64-bit and 32-bit is forced, proxy via setarch linux32 */
if (lsi_config.force_32 && is_x86_64) {
exec_command = "setarch";
n_argv[0] = "setarch";
n_argv[1] = "linux32";
n_argv[2] = "--";
n_argv[3] = command;
off = 4;
/* Use setarch in the path */
vfunc = execvp;
} else {
/* Directly call lsi_exec_bin */
exec_command = lsi_exec_bin;
n_argv[0] = lsi_exec_bin;
/* Full path here due to shadow nature */
vfunc = execv;
exec_command = command;
n_argv[0] = command;
/* Full path here due to shadow nature unless asked not to */
vfunc = use_path ? execvp : execv;
}
/* Point arguments to arguments passed to us */
for (i = 1; i < argc; i++) {
for (i = 0; i < argc; i++) {
n_argv[i + off] = argv[i];
}
n_argv[i + 1 + off] = NULL;
/* Go execute steam. */
if (vfunc(exec_command, (char **)n_argv) < 0) {
lsi_report_failure("Failed to launch Steam: %s [%s]",
strerror(errno),
STEAM_BINARY);
lsi_report_failure("Failed to launch command: %s\n\n%s", command, strerror(errno));
return EXIT_FAILURE;
}
/* Can't happen */
return EXIT_FAILURE;
}
int shim_execute(const char *command, int argc, char **argv)
{
return shim_execute_internal(command, argc, argv, false);
}
int shim_execute_path(const char *command, int argc, char **argv)
{
return shim_execute_internal(command, argc, argv, true);
}
/*
+47
View File
@@ -0,0 +1,47 @@
/*
* This file is part of linux-steam-integration.
*
* Copyright © 2016-2017 Ikey Doherty <ikey@solus-project.com>
*
* linux-steam-integration is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*/
#define _GNU_SOURCE
#include <stdbool.h>
/**
* Attempt to bootstrap the shim environment prior to execution of
* a command.
*/
bool shim_bootstrap(void);
/**
* Execute the given command
*
* @note If this succeeds, we will not return
*/
int shim_execute(const char *command, int argc, char **argv);
/**
* Execute the given command, respecting the $PATH variable
*
* @note If this succeeds, we will not return
*/
int shim_execute_path(const char *command, int argc, char **argv);
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 8
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=8 tabstop=8 expandtab:
* :indentSize=8:tabSize=8:noTabs=true:
*/
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
set -e
env -i DBUS_SESSION_ADDRESS=$DBUS_SESSION_ADDRESS \
PATH=$PATH \
DISPLAY=$DISPLAY \
HOME=$HOME \
USER=$USER \
USERNAME=$USERNAME \
LD_AUDIT="`pwd`/buildroot/install/usr/\$LIB/liblsi-intercept.so" \
LD_PRELOAD="/usr/\$LIB/libxcb.so.1:/usr/\$LIB/libX11.so.6:/usr/\$LIB/libstdc++.so.6" \
DBUS_FATAL_WARNINGS=0 \
STEAM_RUNTIME=0 /usr/lib64/steam/steam