The Steam Deck is a gaming handheld first and foremost, but it's a surprisingly versatile device. SteamOS is based on Arch Linux, and behind the shiny Steam-based UI is the option to enter "Desktop mode". This transforms the Steam Deck from just a regular old gaming handheld to a full-fledged computer, and you can modify the system to your heart's content. There are plenty of users out there who have switched to using their Steam Deck as their main work station when docked, and there's really no limit on what you can do with it. That's why I decided to turn mine into a home server.
There are many ways to turn the Steam Deck into a home server, but the route I opted for was a combination of Podman and Cockpit. Docker can work on the Steam Deck, but you run the risk of your hard work to get it installed being undone with a SteamOS update. Plenty of people use Distrobot to create a virtual machine on the Steam Deck and run Docker inside of that (as it won't be overwritten by a system update), but you might need to update the preinstalled Distrobot in order to do that. I figured if I'm messing around with the terminal anyway, I might as well go all-out and configure it the way I would actually use it.
As a result, even though SteamOS now pre-packages Podman as well, I opted to install it with Homebrew. It's a package manager with plenty of applications already in it, and I knew that I'd be getting the latest version; plus, Homebrew can survive SteamOS updates, as it installs to your Home folder and not a system folder. I then installed Cockpit and Cockpit-Podman to manage my containers from a web UI, and all of a sudden, my Steam Deck became a home server that I could manage from anywhere. If you have a Steam Deck and want to do the same thing, you absolutely can!
How to turn your own Steam Deck into a home server
There are a lot of commands, beware!
I'll be walking you through the exact steps that I undertook to set this up and get Nextcloud running, but that doesn't mean it's the best way. Probably unsurprisingly, there aren't a lot of guides when it comes to turning your Steam Deck into a home server. This method worked for me, and I recommend only doing this if you're comfortable resetting your Steam Deck back to factory settings if anything goes wrong.
First and foremost, you'll want to switch over to desktop mode. Pretty much everything will be using desktop mode, so at the very least, I recommend connecting a keyboard to your Steam Deck if you can. Otherwise, you'll be typing on the on-screen keyboard, which can be finicky at best and could lead to some pretty damaging typos at worst. You'll want to disable the Steam Deck's system write protection in the terminal, so open Konsole and type the following command:
sudo steamos-readonly disable
If it asks you for a password and you don't know it, chances are you never actually set a sudo password on your Steam Deck. Type "passwd" in the terminal and set a password, then run the above command again.
Next up, you'll want to install Homebrew. I recommend using this guide. It'll get you set up with Homebrew in a way that won't break the regular functionality of your Steam Deck. A mistake here can prevent Steam from working, so be very careful when configuring Homebrew. Also, this took some time on my device, so don't worry if it takes a long time on yours, too. So long as there are no errors, it's still installing. Once you've fully followed that guide, run the following command:
brew install podman
This will install Podman using Homebrew, and it'll take a few minutes. Once it's finished, you'll then need to use Pacman, the Arch Linux package manager, to install Cockpit and Cockpit-Podman. These might be replaced with a SteamOS update, so you'll need to go back to desktop mode and reinstall them if that happens. However, I didn't need to configure anything in Cockpit to get it to work, so it should only be a five-minute process to set it back up if it is overwritten with an update.
To install Cockpit, run the following command in your terminal:
pacman -S cockpit cockpit-podman
If it doesn't work, you'll need to run the following commands to configure the GPG keyring used by Pacman. Do them line by line:
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman-key --populate holo
Once Cockpit is installed, finally, run the last command to get it all up and running:
sudo systemctl start cockpit.service sudo systemctl enable cockpit.service
Now, you should be able to access the Cockpit dashboard from your Steam Deck or another computer on the same network. To access it from your Steam Deck, go to "localhost:9090" in your browser. To access it from another computer, identify the local IP address of your Steam Deck and navigate to "
You can now put your Steam Deck aside, and if it's plugged in, it won't go to sleep by default. Everything from here on out can be managed by another browser.
Running our first containers on the Steam Deck
Setting up Nextcloud and Minecraft
Once you've gone to the Cockpit control panel on another computer, it will first ask you for a username and password. The username is "deck" and the password is whatever you used as your sudo password. You'll then see the main dashboard, which shows you monitoring statistics from the Steam Deck. In our case, we want to navigate to the Podman containers option in the left sidebar. We'll install our first container, Nextcloud.
- Click the three dot icon in the top right of images
- Click Download new image
- Search for "Nextcloud"
- Download the docker.io/library/nextcloud:latest image
Once that finishes downloading, we'll create our container for Nextcloud.
- Click Create container from beside the Nextcloud image
- Click the Integration tab
- Click Add port mapping
- Set Host port to any value you would like to access the container on in your web browser. I used "34293", but you can use anything so long as it doesn't overlap with another port.
- Set Container port to 80
- Click Create and run
It might take a minute or two to start up, but your container will then be configured and deployed using Podman. If you navigate to the IP address of your Steam Deck in another browser, using the port for Nextcloud (so, in my case, 192.168.1.34:34293), it will give you an error that says your IP address is untrusted. We'll fix that next!
In Cockpit's Podman containers section, click Nextcloud and click Console. Type "ls" to list the files in the folder, and use "cd config" to enter the config folder. Next, type "nano config.php" and scroll down to trusted domains. Add another line, following the format of the existing line, that looks like the following:
1 => '192.168.*.*',
This may need to be changed based on your network configuration, but this should allow access on most local networks from your other devices.
Once you've done that and saved the file (press Ctrl+X, then press Y to save it), there's no need to restart your container, as the changes will take effect immediately. Just refresh the Nextcloud page in your browser, and you'll be able to continue!
With your Nextcloud instance configured, we're next going to configure a Minecraft server. This will use a different method to install the image so that you can become familiar with both methods.
In Cockpit, click Terminal in the sidebar on the left, under Tools. This will put you in a terminal running on your Steam Deck.
Type the following command:
nano /etc/containers/registries.conf
Then, add the following line (just make sure that there is no hashtag in front of it in the file)
unqualified-search-registries = ["docker.io"]
Again, press Ctrl+X, then press Y to save. This adds the official Docker Hub registry to Podman for when we download images through the terminal. Finally, run the following commands:
podman pull itzg/minecraft-server
podman run -d -p 25565 -e EULA=TRUE --name mc -v mc-data:/data itzg/minecraft-server
This will create a Java Minecraft server running on your Steam Deck in Podman. It runs the container in detached mode on port 25565, accepts the EULA, creates the name "mc" for the container, and creates a volume called mc-data, mounted to /data. You can connect to the server from another computer by navigating to your Steam Deck's local IP address. You can then manage this container from Cockpit.
I love how much power Valve gave to end users
Even if it means you can break it yourself
The Steam Deck was never meant to be used as a home server, and this is very much an exercise in doing something because you can, not because you should. There are downsides to keeping the Steam Deck running at all times in this state, but it's undoubtedly a cool use that demonstrates what a handheld console can be used for when the makers of it give so much power to end users to do what they want with their own technology. While there are basic software tweaks like Decky Loader or installing Spotify in desktop mode, there really are very few limits to what you can actually do with the Steam Deck if you put your mind to it.
As I already mentioned, this is probably not the most ideal solution, and I'm sure there are better ways out there. I got curious and set it up this way as I knew how to use Podman and knew how to use Cockpit, all while having a decent understanding of working with Arch. It's possible that you'll lose your Cockpit install after a SteamOS update, so you can re-run the commands to install it and re-enable it, but your Podman containers will still be there.
With a Steam Deck set up in this way, you can run basically anything that you would run on a conventional home server. Pretty cool!
