Due to the weird way that SteamOS is set up, there are some frustrating compatibility issues that I will explain.
In SteamOS, the system partition is locked to read only, rendering pacman, aur, and yay totally unusable. You can run a command to make it read-write, but you run into the following issues
- There is a very small amount of available space to install apps on the system partition
- The system partition is wiped every SteamOS update (and made read-only again)
So while you can potentially make the system partition read-write, install PICO-8 via yay, and then repeat that process every single time SteamOS updates, it essentially isn't practical.
So, the alternative option would be to just download the PICO-8 files, extract them to an arbitrary location (like ~/Games in my case), and set the "pico8" file to have execute permissions. This kinda works, with the notable exception being Splore. Splore relies on wget for its networking functionality. Unfortunately, wget is not pre-installed in SteamOS, and cannot be installed normally due to the above mentioned issues using pacman and such. I tried various methods of taking a local wget executable and trying to locally add it to PATH, though no method succeeded in it being recognized by PICO-8 Splore.
Ultimately, I have found only one method to get a fully functional PICO-8 experience on the Steam Deck: download the Windows version of PICO-8, add it as a non-steam game, and run it via Proton. This does work properly, though it adds significant extra time to start up and shutdown PICO-8 due to the setup and teardown of the Windows compatibility layer.
Below are a list of possible options for making the Linux version of PICO-8 compatible with SteamOS + Steam Deck:
- Offer a flatpak version of PICO-8, flatpaks can contain their dependencies in a special sandbox setup, allowing for wget to be packaged in
- Rework the network code to not require wget
- Add a configuration.txt entry for specifying a custom path for wget, requires the user to manually obtain wget, place it in arbitrary folder, and make it executable
As I am slowly configuring my Steam Deck as my new desktop machine I ran into the same issues. A flatpak version or a rework would be appreciated.
But I also know that it is quite a bit to ask compared to the minuscule install base right now.
You need to add it as a non-steam game, then in Properties>Compatibility enable "Force use of a specific Steam Play compatibility tool"
Unless you specifically MUST have Steam as your project site, @MehStrongBadMeh, you can always use ITCH.IO which has no such restrictions. I've uploaded there myself with no difficulties.
We are talking about running PICO-8 itself on the Steam Deck, not uploading a precompiled game to Steam.
@MehStrongBadMeh : Thank you, that solved my Problem.
Aside from that: Yep, PICO8 Windows-Version on Steam Deck isn't ideal, the Music cracks and stutters on my device every ~2-10 Seconds and slows down.
I got the Linux-Version run on the Steam Deck too. The Linux-Version runs perfect (including no Sound-Cracks while Playing), but because of missing "wget" I cannot download Carts, only play local Carts.
Thing is: I've installed wget on Steam Deck. If I run the Linux-Version while on "Desktop Mode", everything runs fine. If I run PICO-8-Linux inside the "Gaming Mode", I cannot download a single cart. I'm pretty sure it has something to do with Flatpak, denying "wget"-access while inside it's Sandbox... But that's where my Linux-Knowledge ends. Need to investigate further, I never worked on Flatpak and I have no idea how to run PICO-8 natively on the Steam Deck atm...
@Astorek86 How did you install wget? If you installed it by enabling r/w on the system then it will get wiped in the next system update. If you found a different way, let me know, so I can try it out.
Hi @MehStrongBadMeh, @Astorek86
Does SteamOS have libcurl.so pre-installed? ($ whereis libcurl.so) Or curl?
It looks like both, according to: https://repo.steampowered.com/steamos/pool/main/c/curl/
I've added dynamically loaded libcurl for 0.2.4d that drops down to wget on failure, which will hopefully help in this case!
Otherwise, there will likely be a Steam release at 1.0 (later this year, possibly?) that would be the most natural solution. I'll see about getting Steam keys for existing users.
Awesome to hear @zep!
I just checked, and can confirm that libcurl.so is pre-installed in /usr/lib and regular curl is also pre-installed. Thus, the changes in 0.2.4d will likely fix this compatibility issue entirely.
Also, it is cool to hear that you'll be releasing PICO-8 on Steam, I imagine that that will bring in a wave of interest from both Steam Deck and regular desktop users alike. When you do, I recommend adding a Steam Launch option for launching straight into splore. Makes things convenient for non-keyboard setups like the Steam Deck.
I got pico 8 linux version 100% working even in game mode without having to use pacman or messing about with the readonly system.
You see there is the homebrew package manager ( https://brew.sh/ ), it's normally used a lot on mac os but it also works on linux and thus steamdeck. It installs itself in the home directory and completely works from there, including everything it installs and won't get wiped on a new steamdeck upgrade / update. Homebrew got a wget package that also that works with pico 8 and steamdeck
So here are the steps you need to do:
1) Setup a password for the deck user (so you can use sudo) after typing in passwd you will be asked to enter a password twice, you won't see the password typed in the console so be sure to remember it type it correctly twice
2) install HomeBrew package manager (do these commandos in a terminal / console) (it will ask for the sudo password at certain moment, enter the password you setted up in step 1. It needs this to run the chown command i guess
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
3) make homebrew's brew command available in the environment
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/deck/.bash_profile eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
4) install wget using homebrew
brew install wget
5) download pico 8 and extract it somewhere accessible
6) create a pico8.sh script in the folder of pico8 where you extracted it in a text editor or nano or vim or so to make sure wget is available (from homebrew) and run pico8 in splore mode. It should contain these contents
#!/bin/bash eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" ./pico8 -splore
7) make pico8.sh executalbe (you can right click the file in dolphin and goto the permission tab to enable execute flag or use the following command in console if you are in the folder where pico8.sh is
chmod +x ./pico8.sh
8) add pico8.sh as non steam game shortcut in steam.
try it out and it should work in both game mode as in desktop mode and you do not need to mess with pacman and such as homebrew completely works standaonle, you only may require to add / execute the following sometimes to make wget and brew command available (or other things you install using homebrew) but since i added the needed command also to the pico8.sh script you won't need this
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
9) have fun :)
I actually did exactly this about a month ago. I just didn't want to write the tutorial because
A. It was more complex than I wanted it to be
B. I was worried this incredibly complex solution would discourage zep from updating PICO-8 to not require wget
Thankfully, they are already going to be updating PICO-8 to use libcurl, so we won't need to go through this process soon.
It's not soo complex if you use some remote control tool to control your desk or attach a keyboard & mouse and copy / paste the commands.
But indeed libcurl support will be nice, given the build in lib is compatible (i guess it will be).
Homebrew is still nice on the deck though to get some other commandline tools as it won't get wiped on deck updates. I also installed ncdu for example to easily find and (potentially) erase directories that have a big size.
it's only a one time setup once homebrew is installed you basically only need to use the brew command to install new packages or remove some but it does have some overhead related to size compared to just a normal compiled wget or so
I've been working on a flatpak wrapper for PICO-8.
I don't quite understand what's going on with the wget trouble since it seems to be installed on my steamdeck, but flatpak also provides its own copy so I think this should avoid all of that.
Some benefits of the flatpak method:
- config files, carts, screenshots are in the usual places (
- PICO-8 shows up in desktop menus with icons
- wget is provided with the base flatpak "platforms"
- required tools are all available if flatpak is installed
- works on all platforms that support flatpak
- if you have another Linux computer, you can build a single
.flatpakfile to install on the steamdeck
- you have to build it yourself to include the pico8 executable
pico8command is not available in a terminal by default, you have to alias it to
flatpak run com.lexaloffle.pico8if you want that
Instructions for installing on Steamdeck
Switch to Desktop Mode (hold power button and select it in the popup).
To install the flatpak builder software, open Konsole and type (followed by pressing enter):
flatpak install flathub org.flatpak.Builder -y
Download a copy of the repository to your steam deck (click the green "< > Code" button, then click "Download ZIP", then unzip the downloaded file somewhere like Downloads or Desktop). This should make a folder named "pico8-flatpak".
Download a copy of the Linux 64-bit version of PICO-8 and extract it into a folder named
pico-8inside of the folder you created in step 3. The folder layout should now look like:
pico8-flatpak/ ├── README.md ├── com.lexaloffle.pico8.yml ├── Makefile ├── pico-8/ │ ├── license.txt │ ├── pico8 │ ├── pico8.dat │ └── ... └── ...
Build and install the flatpak by opening a terminal in the folder from step 3 (go to the folder in the file manager, then right-click and select "Open terminal"), and typing (again followed by pressing enter):
This should spit out some text and take a little while. When finished, it should end with something like this:
- Add it to Steam and set Splore to launch automatically.
a. Start Steam while in Desktop Mode (there's a shortcut on the desktop).
b. Go to the LIBRARY tab and click "ADD A GAME" in the lower left, then "Add a Non-Steam Game...".
c. Scroll down in the popup, you should find PICO-8 listed there. Select it with the checkbox, and click "ADD SELECTED PROGRAMS".
d. Find wherever Steam added PICO-8 in the list of games on the left, right-click it and select "Properties...".
e. Find the section labeled "LAUNCH OPTIONS" with the following contents:
run --branch=master --arch=x86_64 --command=pico8 com.lexaloffle.pico8
add a space and
-sploreto the end of that to boot to splore automatically. It should now look like:
run --branch=master --arch=x86_64 --command=pico8 com.lexaloffle.pico8 -splore
To verify that it works you can click the green "PLAY" button. PICO-8 should start in Splore and recognize the steamdeck controller.
Exit by holding the Steam button and pressing Left on the dpad (shortcut for escape), and select "Shutdown Console" in the popup.
- Double-click "Return to Gaming Mode" on the desktop to return to the normal steamdeck interface, you should be able to find PICO-8 in your library.
It appears they have updated SteamOS have wget pre-installed. Thus, this problem has effectively solved itself. PICO-8 v0.2.4c now works out of the box on Steam Deck.
@MehStrongBadMeh to clarify, is that download pico-8 windows version in desktop mode, add to steam and run with Proton?
No, you should download the Linux version, it is fully compatible now.
Nothing I can do about that
EDIT: Oh, I can
[Please log in to post a comment]