Difference between revisions of "Proton"

From FEX-Emu Wiki
Jump to navigation Jump to search
Line 4: Line 4:
 
== Prerequisites ==
 
== Prerequisites ==
 
=== Updating pressure-vessel ===
 
=== Updating pressure-vessel ===
Pressure-vessel is the container software that Proton uses to containerize itself. Steam doesn't ship a version of pressure-vessel that supports FEX-Emu, so this needs to be built and overwrite the version that Steam ships.
+
Make sure to use the SteamLinuxRuntime soldier beta branch. That way you can have a new enough version of pressure-vessel that supports FEX.
* On an x86-64 device
 
* Clone this git repo https://gitlab.steamos.cloud/steamrt/steam-runtime-tools
 
* Follow build instructions here: https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/blob/master/build-aux/many-builds.md
 
* If all dependencies are already installed then this can be as simple as following
 
** ./build-aux/many-builds.py setup
 
** ./build-aux/many-builds.py build
 
** ./build-aux/many-builds.py install
 
* After which it gives you an rsync command to follow to get the build in to the correct folder on an AArch64 device.
 
  
 
=== Gotchas ===
 
=== Gotchas ===
* When Steam updates its runtimes, it may overwrite the one you've installed. rsync again to overwrite again
 
 
* If pressure-vessel complains about missing lib64 files or unable to execute some adverb then two things could have happened
 
* If pressure-vessel complains about missing lib64 files or unable to execute some adverb then two things could have happened
** Your pressure-vessel changes got overwritten, rsync again
+
** Your version of pressure-vessel is too old. Update to the beta
 
** Your version of FEX is too old, needs at least FEX-2207
 
** Your version of FEX is too old, needs at least FEX-2207
  
Line 28: Line 19:
 
== Testing on x86-64 host ==
 
== Testing on x86-64 host ==
 
Sometimes it is good to test FEX-Emu on an x86-64 host. Setting this up for pressure-vessel to run under Proton takes a bit of setup.
 
Sometimes it is good to test FEX-Emu on an x86-64 host. Setting this up for pressure-vessel to run under Proton takes a bit of setup.
* Change your FEX-Emu rootfs config to nothing, so the host x86-64 system is used
 
 
* Copy FEX binaries over to pressure vessel
 
* Copy FEX binaries over to pressure vessel
 
** ~/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier/soldier_platform_0.20220601.0/files/bin/
 
** ~/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier/soldier_platform_0.20220601.0/files/bin/
Line 66: Line 56:
 
* Might be because your rootfs is currently "unbroken", thus having a `/tmp` folder inside of it. execute `break_chroot.sh` and ensure `/tmp` is not in the rootfs.
 
* Might be because your rootfs is currently "unbroken", thus having a `/tmp` folder inside of it. execute `break_chroot.sh` and ensure `/tmp` is not in the rootfs.
 
* Not 100% triaged.
 
* Not 100% triaged.
 +
 +
== Development ==
 +
=== Updating pressure-vessel ===
 +
* On an x86-64 device
 +
* Clone this git repo https://gitlab.steamos.cloud/steamrt/steam-runtime-tools
 +
* Follow build instructions here: https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/blob/master/build-aux/many-builds.md
 +
* If all dependencies are already installed then this can be as simple as following
 +
** ./build-aux/many-builds.py setup
 +
** ./build-aux/many-builds.py build
 +
** ./build-aux/many-builds.py install
 +
* After which it gives you an rsync command to follow to get the build in to the correct folder on an AArch64 device.

Revision as of 00:48, 18 July 2022

Proton is the Windows on Linux compatibility layer that Steam uses to run Windows titles. Read more about it here


Prerequisites

Updating pressure-vessel

Make sure to use the SteamLinuxRuntime soldier beta branch. That way you can have a new enough version of pressure-vessel that supports FEX.

Gotchas

  • If pressure-vessel complains about missing lib64 files or unable to execute some adverb then two things could have happened
    • Your version of pressure-vessel is too old. Update to the beta
    • Your version of FEX is too old, needs at least FEX-2207

Running

Selecting a Proton game inside of the Steam install and running it should be all that is necessary. Be patient as due to how pressure-vessel and FEX interacts with each other, building the chroot environment can take a few minutes. Watch the processes in htop if you want to make sure.

DXVK

Lots of games require Vulkan in order to run since they will be executed using DXVK. Make sure your AArch64 device has a new enough Vulkan driver to handle DXVK.

Testing on x86-64 host

Sometimes it is good to test FEX-Emu on an x86-64 host. Setting this up for pressure-vessel to run under Proton takes a bit of setup.

  • Copy FEX binaries over to pressure vessel
    • ~/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier/soldier_platform_0.20220601.0/files/bin/
    • Need FEXInterpreter
  • Modify the soldier file tree file to include the new FEXInterpreter file
    • ~/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier/soldier_platform_0.20220601.0/usr-mtree.txt.gz
    • neovim can edit this file in place
    • ./bin/FEXInterpreter type=file mode=755 time=1551367831.0 size=64320 sha256=4d0a7056b0b20a1d99782de7db552b257ecce50b98aed6cae0d3e1f4674738e7
    • sha other data doesn't really need to be correct
  • Set an environment variable to ensure Steam launches applications through FEX
    • export STEAM_GAME_LAUNCH_SHELL=/usr/bin/FEXBash
  • Run Steam outside of emulation. Steam itself doesn't need to run under FEX here
  • Launch the proton game and it should now be wrapped in FEX
  • Look at the processes under htop if you want to confirm

Running outside of pressure-vessel

WIP

Environment variables

  • STEAM_COMPAT_DATA_PATH
    • This needs to point to a path where proton will set up a wine prefix
    • export STEAM_COMPAT_DATA_PATH=$HOME/test_proton
    • mkdir $STEAM_COMPAT_DATA_PATH
  • STEAM_COMPAT_INSTALL_PATH
    • Needs to point to the game install path
    • export STEAM_COMPAT_INSTALL_PATH=$STEAM_LIBRARY/steamapps/common/Sonic\ Mania/
  • STEAM_COMPAT_CLIENT_INSTALL_PATH
    • Needs to point to steam
    • export STEAM_COMPAT_CLIENT_INSTALL_PATH=$HOME/.steam

Running

  • ./proton waitforexitandrun $STEAM_LIBRARY/steamapps/common/Sonic\ Mania/SonicMania.exe


Pressure-vessel errors

 bwrap: Can't get type of source /usr/lib64: No such file or directory
  • Might need /usr/lib64 in your AArch64 root?
  • Might be because your rootfs is currently "unbroken", thus having a `/tmp` folder inside of it. execute `break_chroot.sh` and ensure `/tmp` is not in the rootfs.
  • Not 100% triaged.

Development

Updating pressure-vessel