Foreword:
Okay so I know there's already a guide posted for this by Randomguylol, but I noticed several things missing, and there was confusion on the part of the people attempting to do this. Since I had already done this myself, and had experience with the confusion moving from mainly using Windows to using an aarch64/arm64 build of Linux, I though I may be able to create a more noob-friendly guide based on what I already had done with my Switch. Mind you, by noob-friendly I mean I get as specific as I can so there's no confusion as to what needs to be done, so this is going to be really long. That being said, this will be an easy-as-possible-to-follow guide on how to install and play Steam games on Switch. Credit to Randomguylol for the upgrade fix found in their version of the guide, and Geekerwan for some extra stuff I didn't know about upgrading on Switch.
If you want to look at Randomguy's version (it's a lot shorter), here's the link:
https://gbatemp.net/threads/how-to-run-steam-on-the-nintendo-switch.638062/
Other sources of help were:
- Nvidia for keeping pretty good records of different issues and tickets that were sent concerning problems with L4T, and how to upgrade/fix it.
- GBATemp for some other pieces of info that helped move this along; thanks everyone!
There are a few prerequisites that you'll need, and a few things to go over:
Warning: This is going to be a looong one.
This guide was created by me messing with my 2017 launch version of the Nintendo Switch, and may not work for the OLED model.
Common terms to know:
1. Terminal: a command line for Linux, somewhat like Powershell is for Windows
2. nano: a text editor
3. sudo: the administrator privileges command, allows running commands as "admin" (or rather, the Linux equivalent)
4. apt, apt-get: allows using commands related to sources (where you get drivers/software from), with varying degrees of utility (we'll be using apt for the most part here)
5. swapfile: a file used to supplement ram/memory, albeit much slower than ram. Similar in function to (if not outright the same as) the pagefile in Windows
Early Note: You will be using Steam Proton which to my understanding, already has DXVK, so you may not need to install it (I didn't, at least)
Final thoughts before moving on: If anyone has fixes, or anything to add that will help in making Steam games work on Switch, feel free to mention them! Every bit helps. Although a long-shot, if enough work is put in, I can see the switch becoming a budget alternative to the other more capable (and expensive) steam deck competitors. Again, it would take a lot of work, and it would be a longshot, but it would be nice.
What you'll need:
Hekate bootloader for switch (latest version preferred)
Git Page:
https://github.com/CTCaer/hekate
Switchroot Linux 18.04 Bionic
Install directions:
https://wiki.switchroot.org/Linux/Ubuntu-Install-Guide
Linux Distros:
https://wiki.switchroot.org/en/Linux/Distributions
Note: The reason I'm not suggesting Jammy is due to it being in beta. Focal is also unsupported/discontinued. You can try Focal, but Bionic is the most stable supported distro.
An SD card to run all of this stuff (16GB is said to be the minimum for Linux; I'd recommend 128GB if you're going to experiment with games)
Patience; sometimes Linux on aarch64/arm64 can be frustrating; especially for those new to Linux.
Directions (Initial Setup):
1. Set up Hekate as per the guide on the git page
2. Set up Switchroot Linux as per the Switchroot Wiki's install directions
Optional, Recommended: Dock your switch once Hekate and Switchroot initial setup is done, and once you attempt to boot into Linux (Select the "more configs" option in Hekate).
Plug in a usb hub with mouse and keyboard connected; it makes it easier to work with.
3. Once set up, boot into Linux and set up your user account
4. Once finished, go through the "Welcome" popup (I recommend not sending anything to Canonical).
5. Look on the left side. There should be an icon called "Terminal" (hover over for names, for non-linux users, it's sort of like powershell). Click it.
6. Type in the following "sudo apt update && sudo apt upgrade"; this will update and upgrade the system to the latest it can be at present. Just type y and press enter for any choices. Go to the top right and restart the system (power icon).
7. On the top left, there is an icon that allows for searching apps. Search for L4T. The L4T Megascript should be present. Click it. This will have a lot of what we will need.
8. Allow it to go through it's usual stuff, answer prompts when asked. Go to the selection, and choose Pi-Apps and the auto-updater if they aren't already selected. Install them. You will also get 2 prompts when attempting this; remove unused apps and remove canonical's proprietary store. These are up to you, but I usually say yes to both.
9. Look for Pi-Apps (either on the desktop or the top left search icon) and open it. It will likely ask for your password for security reasons. There should be a search icon on the interface. Use it, and search for wine. Install wine64 when you get the chance. This will install a version of Wine64 for tegraX1, along with box64.
Note: From my understanding, you can also just install steam from the L4T Megascript first, but I've had compatibility issues when doing that.
10. Once finished, go back to the L4T Megascript. Deselect Pi-Apps, and search and select Steam. Install it as you did the other L4T Apps. DO NOT RUN STEAM WHEN IT IS DONE! RESTART YOUR SYSTEM FIRST!
Directions (Steam)
Technically at this point you can run Steam and have it play some games, but you will be doing so with an old Nvidia driver and version of Vulkan. There is a way to update these, but there are some stability issues that may pop up. For those who want to try, and this is their first attempt, please use version 32.4 when going through the guide (you'll see what I mean). Every time I tried 32.7 (including Randomguylol's directions), it caused my screen to freeze on reboot, so keep that in mind if you attempt to use 32.7.
Initial Steam Setup: Upgrade Drivers and Vulkan (optional, highly recommended):
1. Go to terminal again. Type in the following: sudo apt install nano (if your updates and previous installs didn't add it, this will)
Q: What is nano?
A: Nano is a text editor that is a bit easier to use than others on Linux. You'll need it to alter specific files for the upgrade.
2. When finished, type in the following: "sudo nano /etc/apt/preferences.d/00-switch-bsp-restrictions". Entering this will allow you to edit the "00-switch-bsp-restrictions" file placed by the Switchroot group. This file disallows upgrading since it has a negative effect on stability, depending on which one you do. Erase the lines pertaining to 32.4 (Note: starting at 32.5, there is a file that may be needed, but not present on the system. You will need to add this file if you are upgrading past 32.4, or your system will break). Hold control and s. Then control and x. This will save the file, and then exit.
3. Next, type in "sudo nano /etc/apt/sources.list.d/nvidia-l4t-apt-source.list". This details the version that's used for the upgrade. Add ".4" to the end of 32 in both lines. ex: 32--->32.4, easy enough. Save and exit.
4. This next part is owed in thanks to "Randomguylol" on these boards; not sure, but I think they found a fix to a persistent problem I had that I was only partially able to fix at the time:
5. Update using sudo apt update. There shouldn't be any prompts, but say no to any that may show up.
WARNING: The following is one of the missing pieces I mentioned earlier, and is essential to the upgrade:
6. In order for the upgrade to properly take place, you need to use this command: "sudo apt dist-upgrade". I believe this step was accidentally skipped over in the other guide by Randomguylol. Answer "n" to all prompts (I say this in case the system tries to replace something, and that causes an issue. I didn't notice anything when i answered y, but it's best to be safe. )
7. IMPORTANT: If afterward, even after you apply Randomguylol's fix you get many errors, apply the following commands:
1. sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/backup/
2. sudo mkdir /var/lib/dpkg/info/
3. sudo apt-get update
4. sudo apt-get -f install
5. sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/backup/
6. sudo rm -rf /var/lib/dpkg/info
7. sudo mv /var/lib/dpkg/backup/ /var/lib/dpkg/info/
Restart the system; it should be mostly fixed now, with at least far fewer error messages.
Next, we need to add tegra stats. This will allow you to check the version of Vulkan, as well as see some other statistics (this can be installed at any time, really):
1. sudo apt install python3-pip (note: if you've followed the guide until now, python3-pip may already be installed)
2. sudo pip3 install jetson-stats
To check if it's installed properly, enter the following command: sudo jtop. A gui should appear. To check the Vulkan version, go to the Info tab (number 7). The initial version is 1.1.7x, so you should now have a later version (1.2.7x, or something similar).
When you want to max out the fans and cpu cores, and you have not upgraded, use this command: sudo jetson_clocks
Otherwise, use the same command for cpu cores, and this command to max out the fans: sudo jetson_clocks --fan
jetson-stats (jtop) will keep track if it has been activated or not.
Finally, so that Steam and the games do not eat into the Switch's resources too much, you need to create a swapfile. Enter the following commands:
(note, the letter is a lowercase -L, not uppercase -i, and the letter x is the size you want the swapfile to add to the default. I recommend a value of 7)
1. sudo fallocate -l xG /swapfile
2. sudo chmod 600 /swapfile
3. sudo mkswap /swapfile
4. sudop swapon /swapfile
This will make and activate the swapfile, but it will not be permanent/retained after restart. To make it permanent, type this command:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Restart one last time to ensure it changed. Go to system monitor (search in upper left), and go to resources. The swapfile should be marked by a green square on the left. Now, you can get to setting up Steam.
Setting Up Steam (Proper):
Wine will have already installed box64, and the L4T installer for Steam will have already installed box86 at this point, so no need to worry about those. On first startup, it will likely try and install some stuff that is only available to x86 systems. If it does, let it attempt to and fail (this may happen on more than one startup, if not, lucky you!). Then, using the top left icon, look for system monitor and open it and go to resources. If the memory in use starts climbing, that means steam is starting up in the background; just wait for it.
On the first startup, Steam will attempt to open in the store, and with all of its notifications and stuff. This is pretty bad, since the switch has only 4GB of memory and Steam is a ram hog when it's run through an emulation/compatability layer like box86/64/wine64. Close out the notifications. Steam is going to be a bit laggy, so you're going to need some patience for the next part.
1. Go to view, and click small mode. Wait for small mode to pop up; it may take a while.
2. Go to steam, and then settings.
3. On the interface tab, change startup location to library (this will help keep Steam in small mode). Deselect/disable the following, but do not restart yet if it asks:
- Enable smooth scrolling in web views
- Enable gpu accelerated rendering in web views
- Enable hardware video encoding, if supported
- Notify me about additions or changes to my games, new releases, and upcoming releases
- Ready to play should include streamable games (only de-activate if you want to test local-only gameplay so that your pc won't interfere if you have one)
4. In the library tab, select small as the library size, and enable low performance mode
5. In the compatibility tab, activate "enable steam play for supported titles" if it is present, as well as "enable steam play for all other titles". Steam will ask to restart. You can allow it to now.
6. Unfortunately, it will actually shut down completely. Open steam up, ignore warnings, etc.
7. At this point, you should be able to play pc games on Switch. Steam Play uses Steam Proton, so you shouldn't need to install DXVK for games to work. Unfortunately, it has been brought to my attention that x86 (32 bit) games don't work for the most part, but might be coaxed to by using Steam launch commands. I'll leave a site with the commands here:
https://simpler-website.pages.dev/html/2020/12/proton-troubleshooting/
(search for launch options on the page)
Another good tool would be ProtonGE, but your mileage may vary:
https://github.com/GloriousEggroll/proton-ge-custom
There are also some compatibility issues with other x64 games that I couldn't resolve. I'll attach a list of games I've had the time to test, along with launch options and other fixes that may make them work. Many have issues, but the games that work best so far are (in no particular order):
1. Hollow Knight (works off bat althogh controller support is iffy)
2. Cuphead (works with WINED3D launch option)
3. The Talos Principle (Works pretty damn good with keyboard and mouse, and okay with joycons. You need to modify mouse speed and graphics options though, or else the visuals might make you sick)
I'm going to attach the early version of this guide that I made a while back, along with the compatibility list.
ETA: If you're looking for your games in the file explorer, they're in a hidden file. Pressing control-h is the simplest way to view hidden files. The full directory for your games will be (from your home folder) "/.steam/steam/steamapps/common". Also, "flags" can just be added to the launch options section by right-clicking the game you want to add a flag to, and selecting properties. Launch options will be at the bottom of the "general" tab.
Anyway, that's it! For the time being, this seems more a hobbyist sort of thing, but it's still pretty cool to me. Too bad Valve never made a version of Steam/Proton aimed at aarch64/arm64 systems. If they did, we could just use our phones instead.