Steam for Linux

Steam for Linux

52 évaluations
Installing a Windows application as a non-Steam game : Vortex Mod Manager
De class101 [OLED deck]
This guide demonstrates how to install a Windows app as a non-steam game in order to start it with Proton.

In addition it will show you how to :
  • Manage the Proton launch parameters for the Steam and non-Steam games in a single file
  • Install the common redistributables in a Proton prefix without the need for winetricks or protontricks
  • Preserve the integrity of the Proton prefix (no system wine re-configurations for example)
  • How to integrate custom urls (like nxm://) in an application launched with Proton
  • How to create the desktop icon
  • And much more, basically, everything you need to know to handle Proton manually like a pro without third party between you Linux and Steam ;)



The chosen demonstration application is called Vortex Mod Manager, it is written by TanninOne from NexusMods [1] and it is widely used and recommended to install mods in different games such as Skyrim, Fallout 4 and a lot more. It also supports community developed extensions.

The latest Vortex tested version is : 1.4.8, 1.4.6, 1.3.22
The install instructions with Proton : 6.3-4, 6.3-2, 5.13-6, 4.11-13
And with Proton GE : 6.5-GE-2, 6.4-GE-1, 6.1-GE-2, 6.0-GE-1, 5.21-GE-1



I plan in keeping up the guide updated as much I can, as much it is required.

Votes, favorites and rewards are welcome and very appreciated, thank you :)

Feel free to use this thread for assistance, it should be more convenient than in the guide comments, but as you prefer, your choice :)
https://steamcommunity.com/app/221410/discussions/0/3094509155631896210/


4
3
2
   
Récompenser
Ajouter aux favoris
Favoris
Retirer des favoris
Prerequisites


The steps below are only needed once. If you have already done them you can directly proceed with the installation from section Script's Environment variables to the end.

Before you start with the real deal, it is important to prepare your Steam installation as follows :
  1. Prepare a cup of tea, coffee, coca, pepsi, you will need one ;D But don't worry, everything is copy & paste with detailed instructions so that you understand a minimum of what you are doing, similar to an Arch Linux installation

  2. Follow the instructions in the section Determining Proton's root

  3. Follow the instructions in the section Proton GE Installation

  4. Follow the instructions in the section File: proton_evaluatorscript_latest.vdf
    These files stores informations about the common redistributables to install

  5. Follow the instructions in the section Steamworks Redistributables Installation

Once you have done all this you will be ready to proceed with the installation from section Script's Environment variables to the end.
Determining Proton's root


If you are on Arch Linux and using the package multilib/steam, you can skip this step, the path is verified to be /home/${USER}/.local/share/Steam

In several places in the guide you will notice that I'm exporting a variable X, this variable must point to the root of the Steam directory and ideally it must be the same path Proton uses when launching a game through Steam.

The explanation for this is that the path is stored internally by Proton in order to know if a redeployment is necessary. Good practice is therefore to use the same path as that used by Proton.

Choose one of the method below to find the path for your System.

Method 1 (best)
Run a Proton game inside Steam and execute the following command
ps e -o cmd -C 'python3' | grep proton | grep -Po '\sSTEAM_COMPAT_CLIENT_INSTALL_PATH=\K[^\s]*'

Method 2
Run Steam normally with its desktop icon and execute the following command
ps e -o cmd -C steam | grep -Po '\sPWD=\K[^\s]*' | head -n 1

While the method is quick, the recommended methods are method #1 or #3. On most system Steam's root = Proton's root but this might not be true everywhere

Method 3
Follow these steps :
  1. Locate a game in your Steam library running with Proton
  2. Right-click the game
  3. Hit Properties
  4. In the Launch Options add the follows :
    PROTON_DUMP_DEBUG_COMMANDS=1 %command%
  5. Run and close the game
  6. Open the file /tmp/proton_${USER}/run

The path to look for is in the STEAM_COMPAT_CLIENT_INSTALL_PATH variable, this will be the path you will use to replace the one entered in the scripts with export X="/path/to/steam"

If this is /home/${USER}/.local/share/Steam nothing is to change in the guide's scripts, otherwise, remember to update each export X entry to the correct path for your system.

Proton GE Installation


Install instructions : Execute the command as is to install and setup the latest version of Proton GE, or define GE_VER to a specific version such as 6.0-GE-1 if needed.
The script will unpack GE in compatibilitytools.d/ and will create a symbolic link near the official Proton directories in steamapps/common/

You can execute all the commands at once to save time, by default it downloads the latest version

Install command :
#----------------------------------------------------------------------------------------
# *** PROTON GE INSTALL
#----------------------------------------------------------------------------------------
# Leave blank for latest version or use version number to download a specific one, such as 6.0-GE-1
export GE_VER=
export X="/home/${USER}/.local/share/Steam"

if [[ -z "$GE_VER" ]]; then
ge_url="$(curl -s 'https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases' | grep browser_download_url.*gz | head -n 1 | cut -d '"' -f 4)"
else
ge_url="https://github.com/GloriousEggroll/proton-ge-custom/releases/download/${GE_VER}/Proton-${GE_VER}.tar.gz"
fi
ge_tar="$(basename "$ge_url")"
ge_name="$(basename "$ge_tar" .tar.gz)"
mkdir -p "${X}/compatibilitytools.d"
cd "${X}/compatibilitytools.d"
[[ -f "$ge_tar" ]] && rm "$ge_tar"
[[ -d "$ge_name" ]] && rm -fr "$ge_name"
[[ -d "${X}/steamapps/common/${ge_name}" -o -L "${X}/steamapps/common/${ge_name}" ]] && rm -fr "${X}/steamapps/common/${ge_name}"
wget "$ge_url"
tar -xvf "$ge_tar" -C "${X}/compatibilitytools.d"
ln -s "${X}/compatibilitytools.d/${ge_name}" "${X}/steamapps/common/${ge_name}"

Restart Steam for the changes to take effect
File: proton_user_settings.py


Overview : Actually, the only way to passe launch parameters to Proton for Steam and non-Steam games such as WINEDLLOVERRIDES etc.. is to use a feature present in the Proton python script, which is to create a file called user_settings.py to place in the root directory of Proton.

While the launch parameters, found in Steam upon right-clicking a game and selecting Properties, works perfectly for Steam games, it doesn't for non-Steam games; The parameters will be passed to the wine program instead of Proton and so on, you will be unable to set WINEDLLOVERRIDES directly from Steam for a non-Steam game

We will do the same to the exception we create only one file compatdata/proton_user_settings.py and the user_settings.py files will be symbolic links to this file.

Install instructions : Copy proton_user_settings.py in the install directory and execute the command to create a link to it in all the detected installations of Proton and Proton GE.

Install directory : ~/.steam/root/steamapps/compatdata/

Install command :
#---------------------------------------------------------------------------------------- # *** PROTON USER_SETTINGS INSTALL #---------------------------------------------------------------------------------------- export X="/home/${USER}/.local/share/Steam" find "${X}/steamapps/common/" -name "Proton*" -exec echo '********** {} **********' \; -exec ln -sf "${X}/steamapps/compatdata/proton_user_settings.py" "{}/user_settings.py" \;

proton_user_settings.py :
https://gist.github.com/class101/65f3133b64ba278537ee19fbb3fbb782

File: proton_evaluatorscript_latest.vdf


Install instructions : Copy proton_evaluatorscript_latest.vdf in the install directory

Install directory : ~/.steam/root/steamapps/compatdata/

These files will be needed to install a new Proton prefix later

proton_evaluatorscript_latest.vdf :
"evaluatorscript" { "0" { "appid" "228981" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "x86 SP1" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2005\\vcredist_x86.exe" "nocleanup" "1" } "x64 SP1" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2005\\vcredist_x64.exe" "nocleanup" "1" "requirement_os" { "is64bitwindows" "1" } } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "1" { "appid" "228982" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "x86 SP1" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2008\\vcredist_x86.exe" "command 1" "/norestart" "nocleanup" "1" } "x64 SP1" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2008\\vcredist_x64.exe" "command 1" "/norestart" "nocleanup" "1" "requirement_os" { "is64bitwindows" "1" } } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "2" { "appid" "228983" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "x86" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2010\\vcredist_x86.exe" "command 1" "/norestart" "nocleanup" "1" } "x64" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2010\\vcredist_x64.exe" "command 1" "/norestart" "nocleanup" "1" "requirement_os" { "is64bitwindows" "1" } } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "3" { "appid" "228984" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "x86 Update 4" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2012\\vcredist_x86.exe" "command 1" "/norestart" "nocleanup" "1" } "x64 Update 4" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2012\\vcredist_x64.exe" "command 1" "/norestart" "nocleanup" "1" "requirement_os" { "is64bitwindows" "1" } } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "4" { "appid" "228985" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "x86 12.0.30501" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2013\\vcredist_x86.exe" "command 1" "/norestart" "nocleanup" "1" } "x64 12.0.30501" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2013\\vcredist_x64.exe" "command 1" "/norestart" "nocleanup" "1" "requirement_os" { "is64bitwindows" "1" } } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "5" { "appid" "228988" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "x86 14.24.28127.4" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2019\\VC_redist.x86.exe" "command 1" "/norestart" "nocleanup" "1" } "x64 14.24.28127.4" { "process 1" "%INSTALLDIR%\\_CommonRedist\\vcredist\\2019\\VC_redist.x64.exe" "command 1" "/norestart" "nocleanup" "1" "requirement_os" { "is64bitwindows" "1" } } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "6" { "appid" "228990" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "dxsetup" { "process 1" "%INSTALLDIR%\\_CommonRedist\\DirectX\\Jun2010\\DXSETUP.exe" "nocleanup" "1" } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "7" { "appid" "229007" "mode" "1" "commonredist" "1" "mode" "1" "compat_installscript" { "run process" { "4.8" { "process 1" "%INSTALLDIR%\\_CommonRedist\\DotNet\\4.8\\ndp48-x86-x64-allos-enu.exe" "command 1" "/norestart" "nocleanup" "1" } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "8" { "appid" "229012" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "4.0 Refresh" { "process 1" "msiexec" "command 1" "/i \"%INSTALLDIR%\\_CommonRedist\\XNA\\4.0\\xnafx40_redist.msi\" /norestart" "nocleanup" "1" } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "9" { "appid" "229020" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "2.0.7.0" { "process 1" "%INSTALLDIR%\\_CommonRedist\\OpenAL\\2.0.7.0\\oalinst.exe" "command 1" "" "nocleanup" "1" } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } "10" { "appid" "229033" "mode" "1" "commonredist" "1" "compat_installscript" { "run process" { "9.14.0702" { "process 1" "msiexec" "command 1" "/i \"%INSTALLDIR%\\_CommonRedist\\PhysX\\9.14.0702\\PhysX-9.14.0702-SystemSoftware.msi\" /norestart" "nocleanup" "1" } } } "linux_install_path" "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared" } }
Steamworks Redistributables Installation


Execute the following commands to verify the presence of the required redistributables
#----------------------------------------------------------------------------------------
# *** STEAMWORKS REDISTRIBUTABLES VERIFICATION
#----------------------------------------------------------------------------------------
export X="/home/${USER}/.local/share/Steam"
mkdir -p "${X}/steamapps/common/Steamworks Shared/_CommonRedist"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/vcredist/2005/vcredist_x64.exe" ]] && echo "VC 2005 Redist OK" || echo "VC 2005 Redist KO - Please install it in Steam console : download_depot 228980 228981"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/vcredist/2008/vcredist_x64.exe" ]] && echo "VC 2008 Redist OK" || echo "VC 2008 Redist KO - Please install it in Steam console : download_depot 228980 228982"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/vcredist/2010/vcredist_x64.exe" ]] && echo "VC 2010 Redist OK" || echo "VC 2010 Redist KO - Please install it in Steam console : download_depot 228980 228983"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/vcredist/2012/vcredist_x64.exe" ]] && echo "VC 2012 Redist OK" || echo "VC 2012 Redist KO - Please install it in Steam console : download_depot 228980 228984"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/vcredist/2013/vcredist_x64.exe" ]] && echo "VC 2013 Redist OK" || echo "VC 2013 Redist KO - Please install it in Steam console : download_depot 228980 228985"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/vcredist/2019/VC_redist.x64.exe" ]] && echo "VC 2019 Redist OK" || echo "VC 2019 Redist KO - Please install it in Steam console : download_depot 228980 228988"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/DirectX/Jun2010/DXSETUP.exe" ]] && echo "DirectX Jun 2010 Redist OK" || echo "DirectX Jun 2010 Redist KO - Please install it in Steam console : download_depot 228980 228990"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/DotNet/4.0/dotNetFx40_Full_x86_x64.exe" ]] && echo ".NET 4.0 Redist OK" || echo ".NET 4.0 Redist KO - Please install it in Steam console : download_depot 228980 229002"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/DotNet/4.8/ndp48-x86-x64-allos-enu.exe" ]] && echo ".NET 4.8 Redist OK" || echo ".NET 4.8 Redist KO - Please install it in Steam console : download_depot 228980 229007"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/XNA/4.0/xnafx40_redist.msi" ]] && echo "XNA 4.0 Redist OK" || echo "XNA 4.0 Redist KO - Please install it in Steam console : download_depot 228980 229012"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/OpenAL/2.0.7.0/oalinst.exe" ]] && echo "OpenAL 2.0.7.0 Redist OK" || echo "OpenAL 2.0.7.0 Redist KO - Please install it in Steam console : download_depot 228980 229020"
[[ -f "${X}/steamapps/common/Steamworks Shared/_CommonRedist/PhysX/9.14.0702/PhysX-9.14.0702-SystemSoftware.msi" ]] && echo "PhysX System Software 9.14.0702 OK" || echo "PhysX System Software 9.14.0702 KO - Please install it in Steam console : download_depot 228980 229033"

If you are missing one of them, open the Steam console with the following command (or with -dev -console launch parameters)
steam steam://nav/console

And type in the console the download_depot command reported by the above script, Steam will download the redistributable
  • download_depot 228980 228981 (VC 2005 Redist)
  • download_depot 228980 228982 (VC 2008 Redist)
  • download_depot 228980 228983 (VC 2010 Redist)
  • download_depot 228980 228984 (VC 2012 Redist)
  • download_depot 228980 228985 (VC 2013 Redist)
  • download_depot 228980 228988 (VC 2019 Redist)
  • download_depot 228980 228990 (DirectX Jun 2010 Redist)
  • download_depot 228980 229002 (.NET 4.0 Redist)
  • download_depot 228980 229007 (.NET 4.8 Redist)
  • download_depot 228980 229012 (XNA 4.0 Redist)
  • download_depot 228980 229020 (OpenAL 2.0.7.0 Redist)
  • download_depot 228980 229033 (PhysX System Software 9.14.0702)

Please note that Steam will download the redistributable in a temp folder, cut & paste manually the DotNet, DirectX or vcredist folder to the Steamworks folder "${X}/steamapps/common/Steamworks Shared/_CommonRedist/" to finalize the installation

The download directory is specified in the Steam console

Finally, validate your installation by rerunning the script until all the redistributables are marked OK
Script's environment variables


Update the variable PROTON set by default to "CHANGEME!!!". This must match the version you will select in Steam when you will add Vortex as a non-Steam later.

The format of the PROTON variable is the name of the Proton folder found in the directory ${X}/steamapps/common

Make sure the variable X is correct for your system, see section Determining Proton's root

#---------------------------------------------------------------------------------------- # *** SCRIPT ENVIRONMENT VARIABLES UNPACK #---------------------------------------------------------------------------------------- # Update the PROTON, example : "Proton-6.5-GE-1", "Proton 6.3", etc ... export PROTON="CHANGEME!!!" export X="/home/${USER}/.local/share/Steam" export PROTON_WINE="${X}/steamapps/common/${PROTON}/dist/bin/wine64" export PROTON_BIN="${X}/steamapps/common/${PROTON}/proton"
Download Vortex


The code below will download the latest Vortex release from github (Beta/Pre-release excluded)
#----------------------------------------------------------------------------------------
# *** VORTEX DOWNLOAD
#----------------------------------------------------------------------------------------
mkdir -p "${X}/steamapps/common/Vortex Mod Manager"
cd "${X}/steamapps/common/Vortex Mod Manager"
wget "$(curl -s 'https://api.github.com/repos/Nexus-Mods/Vortex/releases' | grep -P 'browser_download_url.*vortex-setup|prerelease' | grep -Pzo 'false,\s+"browser_download_url":\s"\K[^"]+"\n' | head -n 1 | sed 's/"//')"

If you prefer to download the latest Vortex, beta included (not recommended) you can use this
#----------------------------------------------------------------------------------------
# *** VORTEX DOWNLOAD
#----------------------------------------------------------------------------------------
mkdir -p "${X}/steamapps/common/Vortex Mod Manager"
cd "${X}/steamapps/common/Vortex Mod Manager"
wget "$(curl -s 'https://api.github.com/repos/Nexus-Mods/Vortex/releases' | grep 'browser_download_url.*vortex-setup' | head -n 1 | cut -d '"' -f 4)"
Add Vortex as non-Steam game


#----------------------------------------------------------------------------------------
# *** VORTEX ICON DOWNLOAD
#----------------------------------------------------------------------------------------
mkdir -p /home/${USER}/.local/share/pixmaps/
wget "https://raw.githubusercontent.com/Nexus-Mods/Vortex/master/assets/images/vortex.png" -O "/home/${USER}/.local/share/pixmaps/vortex.png"

  • Name : Vortex Mod Manager
  • Target : Paste inside double quotes the full path to the installer previously downloaded
  • Start in : Leave empty
  • Launch options : Leave empty
  • Proton : Select Proton version Must match the version you set in the variable PROTON
  • Icon : Select /usr/share/pixmaps/vortex.png


Run the app in Steam and when the installation Window is gone, immediately kill the Vortex.exe process
killall -r Vortex.exe

Finally, re-open the Vortex's Steam properties and set :
  • Target : "X:\steamapps\common\Vortex Mod Manager\Vortex.exe"
  • Start in : "X:\steamapps\common\Vortex Mod Manager"

Run the app a second time and immediately close it
killall -r Vortex.exe

The app won't start but that will ensure that Steam generates the new STEAMGAMEID in its file so that we can export it in the next step
Proton's environment variables


Find STEAMAPPID and STEAMGAMEID
Find and export the correct values of STEAMAPPID and STEAMGAMEID for your system.

STEAMAPPID : The simplest way to find this value is to navigate to the ${X}/steamapps/compatdata folder and find the last directory created, its name consisting of 10 digits is the STEAMAPPID variable.

STEAMGAMEID : Will be 11120082367065096192 if you have strictly followed the guide. For non-Steam games, STEAMGAMEID is a hash value based on the Name of the Shortcut, and the Target executable path.

Basically :

"Vortex Mod Manager" + "X:\steamapps\common\Vortex Mod Manager\Vortex.exe" = 11120082367065096192

To find this number there are several ways :
  • Open the file ${X}/userdata/<id>/760/screenshots.vdf and look at the bottom of the file
  • Running an app with PROTON_LOG=1 and STEAMGAMEID will be reported in the name of the log file ~/steam-STEAMGAMEID.log
#---------------------------------------------------------------------------------------- # *** PROTON'S ENVIRONMENT VARIABLES #---------------------------------------------------------------------------------------- export STEAMAPPID=CHANGEME!! # STEAMGAMEID=11120082367065096192 If in Steam Name="Vortex Mod Manager" and Target="X:\steamapps\common\Vortex Mod Manager\Vortex.exe" export STEAMGAMEID=11120082367065096192 export PFX="${X}/steamapps/compatdata/${STEAMAPPID}/pfx"

Report STEAMAPPID in the Proton's user settings
Replace the 2 entries noted "CHANGEME" in compatdata/proton_user_settings.py by the STEAMAPPID generated on your system.

This last change will activate the proper Proton's launch parameters upon launching Vortex (especially WINEDLLOVERRIDES)
X: as Steam's root


#---------------------------------------------------------------------------------------- # *** set x: as Steam root #---------------------------------------------------------------------------------------- ln -s "${X}" "${PFX}/dosdevices/x:"
Relocate Vortex


In order to maintain a similar behavior to Steam we'll move Vortex binaries where Steam stores all binaries in the common/ folder.
#---------------------------------------------------------------------------------------- # *** MOVE VORTEX OUTSIDE PREFIX #---------------------------------------------------------------------------------------- mkdir -p "${X}/steamapps/common/Vortex Mod Manager" rm -r "${X}/steamapps/common/Vortex Mod Manager/"* mv "${PFX}/drive_c/Program Files/Black Tree Gaming Ltd/Vortex/"* "${X}/steamapps/common/Vortex Mod Manager" rm -r "${PFX}/drive_c/Program Files/Black Tree Gaming Ltd" mkdir -p "${X}/steamapps/common/Vortex Mod Manager Downloads" mkdir -p "${X}/steamapps/common/Vortex Mod Manager Mods Staging (Skyrim)" mkdir -p "${PFX}/drive_c/users/steamuser/Application Data/Vortex/skyrimse" rm -r "${PFX}/drive_c/users/steamuser/Application Data/Vortex/downloads" rm -r "${PFX}/drive_c/users/steamuser/Application Data/Vortex/skyrimse/mods" ln -s "${X}/steamapps/common/Vortex Mod Manager Downloads" "${PFX}/drive_c/users/steamuser/Application Data/Vortex/downloads" ln -s "${X}/steamapps/common/Vortex Mod Manager Mods Staging (Skyrim)" "${PFX}/drive_c/users/steamuser/Application Data/Vortex/skyrimse/mods" # Update path to Vortex sed -i.bak 's/C:\\\\Program Files\\\\Black Tree Gaming Ltd\\\\Vortex/X:\\\\steamapps\\\\common\\\\Vortex Mod Manager/g' "${PFX}/system.reg"
Steam symbolic links


#---------------------------------------------------------------------------------------- # *** STEAM SYMLINKS #---------------------------------------------------------------------------------------- mkdir -p "${PFX}/drive_c/Program Files (x86)/Steam/steamapps" rm -r "${PFX}/drive_c/Program Files (x86)/Steam/config" ln -s "${X}/steamapps/common" "${PFX}/drive_c/Program Files (x86)/Steam/steamapps/common" ln -s "${X}/config" "${PFX}/drive_c/Program Files (x86)/Steam/config"
Mark chosen game installed


It is not necessary to execute all the commands here. Just execute the first line and the 3 lines under the game name of your choice.
#---------------------------------------------------------------------------------------- # *** GAMES SYMLINKS & REGISTRY #---------------------------------------------------------------------------------------- mkdir -p "${PFX}/drive_c/users/steamuser/My Documents/My Games" ### Skyrim Special Edition ln -s "${X}/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/My Documents/My Games/Skyrim Special Edition" "${PFX}/drive_c/users/steamuser/My Documents/My Games/Skyrim Special Edition" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\489830" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Skyrim Special Edition" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Skyrim Special Edition" /f ### Skyrim VR ln -s "${X}/steamapps/compatdata/611670/pfx/drive_c/users/steamuser/My Documents/My Games/Skyrim VR" "${PFX}/drive_c/users/steamuser/My Documents/My Games/Skyrim VR" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\611670" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Skyrim VR" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\SkyrimVR" /f ### Skyrim (Oldrim) ln -s "${X}/steamapps/compatdata/72850/pfx/drive_c/users/steamuser/My Documents/My Games/Skyrim" "${PFX}/drive_c/users/steamuser/My Documents/My Games/Skyrim" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\72850" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Skyrim" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Skyrim" /f ### Fallout 4 ln -s "${X}/steamapps/compatdata/377160/pfx/drive_c/users/steamuser/My Documents/My Games/Fallout4" "${PFX}/drive_c/users/steamuser/My Documents/My Games/Fallout4" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\377160" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Fallout4" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Fallout 4" /f ### Fallout New Vegas ln -s "${X}/steamapps/compatdata/22380/pfx/drive_c/users/steamuser/My Documents/My Games/FalloutNV" "${PFX}/drive_c/users/steamuser/My Documents/My Games/FalloutNV" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\22380" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\FalloutNV" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Fallout New Vegas" /f ### Oblivion ln -s "${X}/steamapps/compatdata/22330/pfx/drive_c/users/steamuser/My Documents/My Games/Oblivion" "${PFX}/drive_c/users/steamuser/My Documents/My Games/Oblivion" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\22330" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Oblivion" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Oblivion" /f ### Morrowind WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\22320" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Morrowind" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Morrowind" /f ### Fallout 3 ln -s "${X}/steamapps/compatdata/22370/pfx/drive_c/users/steamuser/My Documents/My Games/Fallout3" "${PFX}/drive_c/users/steamuser/My Documents/My Games/Fallout3" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\22370" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Bethesda Softworks\\Fallout3" /v "Installed Path" /t REG_SZ /d "X:\\steamapps\\common\\Fallout 3 goty" /f ### The Witcher 3 ln -s "${X}/steamapps/compatdata/292030/pfx/drive_c/users/steamuser/My Documents/The Witcher 3" "${PFX}/drive_c/users/steamuser/My Documents/The Witcher 3" WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\292030" /v "Installed" /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\CD Project Red\\The Witcher 3" /v "InstallFolder" /t REG_SZ /d "X:\\steamapps\\common\\The Witcher 3" /f
Verify : Vortex & Steam


Execute the following commands to verify that your Vortex and Steam installs are valid.
{ [[ ! -d "${PFX}/drive_c/Program Files/Black Tree Gaming Ltd" ]] && \
[[ -f "${PFX}/dosdevices/x:/steamapps/common/Vortex Mod Manager/Vortex.exe" ]] && \
[[ -L "${PFX}/drive_c/users/steamuser/Application Data/Vortex/downloads" ]] && \
[[ -L "${PFX}/drive_c/users/steamuser/Application Data/Vortex/skyrimse/mods" ]]; \
} && echo "Vortex installation OK" || echo "Vortex installation FAILURE !" ; \
{ [[ -f "${PFX}/drive_c/Program Files (x86)/Steam/Steam.dll" ]] && \
[[ -L "${PFX}/drive_c/Program Files (x86)/Steam/steamapps/common" ]] && \
[[ -L "${PFX}/drive_c/Program Files (x86)/Steam/config" ]]; \
} && echo "Steam installation OK" || echo "Steam installation FAILURE !"
Backup point


In case something goes wrong at the dependencies installation you will be able to restore to that point
#---------------------------------------------------------------------------------------- # *** BACKUP #---------------------------------------------------------------------------------------- # From here it is good practice to duplicate the ${X}/steamapps/compatdata/<STEAMAPPID> folder in case the next dependencies installation goes wrong. cp -r "${X}/steamapps/compatdata/${STEAMAPPID}" "${X}/steamapps/compatdata/${STEAMAPPID} (copy)"
Remove Mono


#----------------------------------------------------------------------------------------
# *** REMOVE PROTON MONO BUILTINS
#----------------------------------------------------------------------------------------
# Remove "Wine Mono Windows Support" entry
WINEPREFIX="${PFX}" "${PROTON_WINE}" uninstaller

In the uninstaller window, remove the entries beginning ""Wine Mono *"

#----------------------------------------------------------------------------------------
# *** REMOVE PROTON MONO BUILTINS
#----------------------------------------------------------------------------------------
# Remove mono files
rm -r "${PFX}/drive_c/windows/Microsoft.NET"
rm "${PFX}/drive_c/windows/system32/mscoree.dll"
rm "${PFX}/drive_c/windows/syswow64/mscoree.dll"

# Remove openal (to fix the installer, will be installed later)
rm "${PFX}/drive_c/windows/system32/openal32.dll"
rm "${PFX}/drive_c/windows/syswow64/openal32.dll"

# Proton fix: extract_cabinet FDICopy failed error (seen with dotnet40 since Proton 5.13-5 as winxp64)
rm "${PFX}/drive_c/windows/system32/dxva2.dll"
rm "${PFX}/drive_c/windows/syswow64/dxva2.dll"
rm "${PFX}/drive_c/windows/system32/evr.dll"
rm "${PFX}/drive_c/windows/syswow64/evr.dll"
rm "${PFX}/drive_c/windows/system32/uiautomationcore.dll"
rm "${PFX}/drive_c/windows/syswow64/uiautomationcore.dll"

# Proton fix: wine's builtin fusion.dll fails to create legacy assembly directory (https://bugs.winehq.org/show_bug.cgi?id=45930)
mkdir -p "${PFX}/drive_c/windows/assembly"

# Remove mono tracked_files from proton configuration
# Shouldn't be necessary since Proton does not touch files that are not symlinks and not builtin but left as-is
sed -i.bak '/openal32/d;/dxva2/d;/evr/d;/uiautomationcore/d;/mscoree/d;/Microsoft.NET/d' "${X}/steamapps/compatdata/${STEAMAPPID}/tracked_files"
Install .NET 4.0


The .NET Framework installers are incremental. To install a complete 4.8 suite, you have to install 4.0 as Windows XP and 4.8 as Windows 7.

Change to Windows XP
WINEPREFIX="${PFX}" "${PROTON_WINE}" winecfg -v winxp64

Install .NET Framework 4.0
WINEPREFIX="${PFX}" \ WINEDLLOVERRIDES="*fusion=b" \ WINEDEBUG=+tid,err+all,fixme-all,-loaddll \ "${PROTON_WINE}" "X:\\steamapps\\common\\Steamworks Shared\\_CommonRedist\\DotNet\\4.0\\dotNetFx40_Full_x86_x64.exe"

If the installer does not close properly you can open a second bash terminal and kill the mscorsvw processes and hit Ctrl+C on the first terminal to exit wine entirely.
killall -r mscorsvw.exe

Avoid a popup on WINEPREFIX updates, see [3]
WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Microsoft\\.NETFramework" /v OnlyUseLatestCLR /t REG_DWORD /d 1 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Microsoft\\.NETFramework" /v OnlyUseLatestCLR /t REG_DWORD /d 1 /f

Add mscoree.dll as a permanent native dll into the Wine prefix
WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKCU\\Software\\Wine\\DllOverrides" /v "*mscoree" /t REG_SZ /d "native" /f
Verify : .NET 4.0


Verify that the previous installation was successful
{ [[ -f "${PFX}/drive_c/windows/system32/UIAutomationCore.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/mscoree.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/dxva2.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/evr.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/ngen.exe" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/UIAutomationCore.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/mscoree.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/dxva2.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/evr.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/ngen.exe" ]]; \
} && echo ".NET Framework 4.0 installation OK" || echo ".NET Framework 4.0 installation FAILURE !"
Install .NET 4.8, DirectX & VC 2019


Change to Windows 7
WINEPREFIX="${PFX}" "${PROTON_WINE}" winecfg -v win7

Install .NET Framework 4.8, DirectX, XNA and VC 2015-2019
cd "${X}" || echo "Directory does not exists" PROTON_NO_USERSETTINGS=1 \ WINEDLLOVERRIDES="*mscoree=n;*fusion=n" \ PROTON_LOG=1 \ PROTON_DUMP_DEBUG_COMMANDS=1 \ WINEDEBUG=+tid,err+all,fixme-all,+loaddll \ SteamAppId=${STEAMAPPID} \ SteamGameId=${STEAMGAMEID} \ STEAM_COMPAT_DATA_PATH="${X}/steamapps/compatdata/${STEAMAPPID}" \ STEAM_COMPAT_CLIENT_INSTALL_PATH="${X}" \ "${PROTON_BIN}" run "${X}/legacycompat/iscriptevaluator.exe" "steamapps\\compatdata\\proton_evaluatorscript_latest.vdf"

If the command does nothing, verify that Steam is running and you executed the step Steam symbolic links properly

If the command does nothing, might be they are stored as "executed" in the registry, you can reset the registry with the following commands
# In case anything goes wrong and you need to run the command twice, reset the install state with this (no effect else) WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228981" /v "x86 SP1" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228981" /v "x64 SP1" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228982" /v "x86 SP1" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228982" /v "x64 SP1" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228983" /v "x86" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228983" /v "x64" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228984" /v "x86 Update 4" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228984" /v "x64 Update 4" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228985" /v "x86 12.0.30501" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228985" /v "x64 12.0.30501" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228988" /v "x86 14.24.28127.4" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228988" /v "x64 14.24.28127.4" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\228990" /v "dxsetup" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\229007" /v "4.8" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\229012" /v "4.0 Refresh" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\229020" /v "2.0.7.0" /t REG_DWORD /d 0 /f WINEPREFIX="${PFX}" "${PROTON_WINE}" reg add "HKLM\\Software\\Wow6432Node\\Valve\\Steam\\Apps\\229033" /v "2.0.7.0" /t REG_DWORD /d 0 /f

Very often the process does not closes properly here until you quit with Ctrl+C or until you kill the aspnet_regiis.exe or mscorsvw.exe responsible of Wine not properly closing.
killall -r "mscorsvw.exe|aspnet_regiis.exe"

Finish compiling the legacy GAC assembly
The goal of this task is to stop ngen and mscorsvw from compiling the GAC whenever you are running your App, this will empty the queue and these processes won't spawn anymore.

Execute ngen until it says "All compilation targets are up to date" and ignore errors about missing stdole, ADODB, etc... Most of the time you will have to run this 2 times, but sometimes it is even more, anyway no worries, if it is getting out of hand, just restore the prefix and restart from the backup point, it will most likely work without problems the second time.

Both compilation reports are available in
  • C:/windows/Microsoft.NET/Framework/v4.0.30319/ngen.log
  • C:/windows/Microsoft.NET/Framework64/v4.0.30319/ngen.log

Recommended steps to follow :
  1. Delete the directory C:\windows\assembly\NativeImages_v4.0.30319_32
  2. Delete the directory C:\windows\assembly\NativeImages_v4.0.30319_64
  3. Open the following file, delete everything inside and save it C:/windows/Microsoft.NET/Framework/v4.0.30319/ngen.log
  4. Open the following file, delete everything inside and save it C:/windows/Microsoft.NET/Framework64/v4.0.30319/ngen.log
  5. Run the 32-bit and 64-bit commands until you see in the log file "All compilation targets are up to date"

Known issues :
  • Process closure: Both commands are known to not close properly, type Ctrl+C to exit the prompt
  • Process closure: ngen.exe and mscorvw.exe are sometimes stuck and no more logs are printed in ngen.log files -> Ctrl+C then type killall -r "mscorsvw.exe|ngen.exe" and relaunch the command

32-bit
cd "${X}" || return
PROTON_NO_USERSETTINGS=1 \
WINEDLLOVERRIDES="*mscoree=n;*fusion=n" \
PROTON_LOG=1 \
PROTON_DUMP_DEBUG_COMMANDS=1 \
WINEDEBUG=err+all,fixme-all,+loaddll \
SteamAppId=${STEAMAPPID} \
SteamGameId=${STEAMGAMEID} \
STEAM_COMPAT_DATA_PATH="${X}/steamapps/compatdata/${STEAMAPPID}" \
STEAM_COMPAT_CLIENT_INSTALL_PATH="${X}" \
"${PROTON_BIN}" run "C:/windows/Microsoft.NET/Framework/v4.0.30319/ngen.exe" update

64-bit
cd "${X}" || return
PROTON_NO_USERSETTINGS=1 \
WINEDLLOVERRIDES="*mscoree=n;*fusion=n" \
PROTON_LOG=1 \
PROTON_DUMP_DEBUG_COMMANDS=1 \
WINEDEBUG=err+all,fixme-all,+loaddll \
SteamAppId=${STEAMAPPID} \
SteamGameId=${STEAMGAMEID} \
STEAM_COMPAT_DATA_PATH="${X}/steamapps/compatdata/${STEAMAPPID}" \
STEAM_COMPAT_CLIENT_INSTALL_PATH="${X}" \
"${PROTON_BIN}" run "C:/windows/Microsoft.NET/Framework64/v4.0.30319/ngen.exe" update
Verify : .NET 4.8, DirectX & VC 2019


Verify that the previous installation was successful
{ [[ -f "${PFX}/drive_c/windows/system32/mfc140.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/vcruntime140.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/vcamp140.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/mfc140.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/vcruntime140.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/vcamp140.dll" ]]; \
} && echo "vcrun2019 installation OK" || echo "vcrun2019 installation FAILURE !" ; \
{ [[ -f "${PFX}/drive_c/windows/system32/d3dx11_43.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/d3dx10_43.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/xactengine3_7.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/d3dcompiler_43.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/xaudio2_7.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/system32/XAPOFX1_0.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/d3dx11_43.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/d3dx10_43.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/xactengine3_7.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/d3dcompiler_43.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/xaudio2_7.dll" ]] && \
[[ ! -L "${PFX}/drive_c/windows/system32/XAPOFX1_0.dll" ]]; \
} && echo "DirectX_Jun2010 installation OK" || echo "DirectX_Jun2010 installation FAILURE !" ; \
{ [[ -f "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/Microsoft.Activities.Build.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/Microsoft.Win32.Primitives.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/System.Collections.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/System.Console.dll" ]] && \
[[ -f "${PFX}/drive_c/windows/Microsoft.NET/Framework64/v4.0.30319/System.IO.dll" ]]; \
} && echo ".NET Framework 4.8 installation OK" || echo ".NET Framework 4.8 installation FAILURE !"
Install desktop shortcut


{ echo '[Desktop Entry]'; echo 'Name=Vortex Mod Manager'; echo 'Comment=Nexus mod manager'; echo 'Exec=steam steam://rungameid/'"${STEAMGAMEID}"; echo 'Icon=vortex'; echo 'Terminal=false'; echo 'Type=Application'; echo 'Categories=Game;'; } > ~/.local/share/applications/vortex.desktop update-desktop-database ~/.local/share/applications/
Install nxm:// links handler


{ echo '[Desktop Entry]'; echo 'Name=Vortex_handler'; echo 'Comment=nxm link support for Vortex'; echo 'Path='"${X}"; echo 'Exec=env STEAM_COMPAT_DATA_PATH="'"${X}"'/steamapps/compatdata/'"${STEAMAPPID}"'" STEAM_COMPAT_CLIENT_INSTALL_PATH="'"${X}"'" "'"${PROTON_BIN}"'" run "X:\\steamapps\\common\\Vortex Mod Manager\\Vortex.exe" -d %u'; echo 'Terminal=false'; echo 'Type=Application'; echo 'Categories=Game;'; echo 'MimeType=x-scheme-handler/nxm;x-scheme-handler/nxm-protocol'; echo 'NoDisplay=true'; } > ~/.local/share/applications/vortex_handler.desktop update-desktop-database ~/.local/share/applications/
Known Issues


Vortex and Proton-6.1-GE

Vortex.exe will not startup with Proton-6.1-GE, this is a known issue in wine-staging >= 6.1 and < 6.4 I reported here [2] and is now fixed in wine-staging >= 6.4.

Fixed in wine-staging >= 6.4

To work around, downgrade to Proton-6.0-GE-1 or wait a futur release of Proton GE starting from version 6.4 or greater.

:err:winediag:gnutls_initialize failed to load libgnutls, no support for encryption

Install 32-bit package of gnutls, e.g. lib32-gnutls on Arch Linux
Changelog


10/17/22 - Steam Deck support and fixes some bbcode format
05/19/21 - [File: proton_user_settings.py ] Better user_settings.py file with globals and overrides
04/10/21 - [Remove Mono] added openal removal to fix the installer called later
04/09/21 - [Register redistributables as installed] added vcredist 2005-2013, openal, physx
04/09/21 - [File: proton_evaluatorscript_latest.vdf] added vcredist 2005-2013, openal, physx
04/09/21 - [Steamworks Redistributables Installation] added vcredist 2005-2013, openal, physx
04/09/21 - [Credits] added steamtinkerlaunch
04/08/21 - title update

32 commentaires
class101 [OLED deck]  [créateur] 10 oct. 2022 à 10h52 
Yes indeed, the intent in this guide is much to create a complete Proton prefix that you can reuse for much than a game or app, removing mono and installing all the everything like on a normal Windows OS to have the prefix compatible with a maximum number of application

I think for the release of Steam Deck, I will build a similar guide but with minimalist things to do to get Vortex working and link back here for the people interested to go more deeply

Thank you for your feedback :)
Aoi Blue 10 oct. 2022 à 8h01 
Oh, as a note, on my latest install I just used a link from my home directory to my steam directory. That works even better for quick access.
Aoi Blue 10 oct. 2022 à 8h00 
Make sure to keep trying with Wine-Mono and other vanilla wine dlls. They are improving it over time.

OpenAL is certainly not needed anymore for most systems. All recent versions of proton ship an OpenAL library optimized for Wine.

VC Runtime redistributables are not needed anymore. You may need to mark them as installed in the registry, though to fool the applications into not trying to install them.

With DXVK there is rarely a reason to install DirectX. However, on rare occasions you need the DirectX native Shader Pre-compiler libraries. You shouldn't need to install overrides to force this use, DXVK falls back nicely if they are installed (otherwise it falls back onto WineD3D's precompiler libraries, which due to swiss cheese principal may not have the exact same failure.)
class101 [OLED deck]  [créateur] 7 oct. 2022 à 9h47 
Whoa, and thank you all for the rewards, very appreciated all you gave me, the guide deserves a refresh for the awesome Steam Deck !!!! :ss2heart: :beatmeat:
class101 [OLED deck]  [créateur] 7 oct. 2022 à 9h38 
Hello Everyone,

I message you from the Steam Deck that I'm fixing formatting issues since the bbcode framework changed

Also fixing little things but from what I tested it is 99% of the commands are compatible and already working with the Steam Deck, that's cool !

@frostwork
Thank you for the advice, the script is now updated with the rename of foreign_install_path to linux_install_path

As far I have tested, linux_install_path can still contain a Windows path symlinking to the Linux OS, so this solves the variable to put in the global script :)
Aoi Blue 5 janv. 2022 à 8h51 
I like to install a custom Steam Library directory and put proton there. It drastically shortens the directory tree for the steam library, and makes it more accessible for browsing.

I also tend to create a "share", "local", "source" and "bin" link in my home directory for the appropriate subdirectories, even though these are all in the ".local" tree, and I could get away with just making a non-hidden "local" directory to link to the hidden ".local" directory.

I prefer having them all, but obviously you could just do "local"
frostwork 4 sept. 2021 à 6h15 
Good luck if you're still searching, @class101!

(lol @ "forstwork" - not the first time that I read that :lunar2019coolpig:)
class101 [OLED deck]  [créateur] 19 aout 2021 à 10h13 
@The_Riddick

Note sure what you wanted to paste with VK_ICD_FILENAMES, this is not something I use in the guide but it is something used by Steam.

Also keep in mind that @forstwork identified something that changed with the proton_evaluatorscript_latest.vdf file so it is very possible the guide is deprecated and requires an update.

I will fully verify and update it soon when I have time, wanted to do this sooner but in August I've been busy finding a new job.
Gerarderloper 18 aout 2021 à 20h44 
Having trouble getting this to work in one of my custom ID games. It seems other commands work.
"VK_ICD_FILENAMES": "/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd64.json",
frostwork 23 juil. 2021 à 9h59 
Would be really great if you would participate! :)
Not sure if rebuilding the guide around my tool is a good idea though, as it should be (imho) a guide for people helping to learn how to roll your own solution.
I doubt my tool will help people learning anything (the wiki might, but I'm afraid there aren't that many actually reading it :)).