Michael DeGuzis edited this page Jun 15, 2017 · 2 revisions

Table of Contents generated with DocToc

Example of Ice


ice-steamos is a fork of the original upstream "Ice" program by Scott Rice.

Use Steam to play all your old games! Just because old consoles aren't sold anymore doesn't mean you can't enjoy their games. Ice leverages Steam's Big Picture mode to turn it into an emulator frontend (similar to Hyperspin). It accomplishes this by creating folders in specified locations on the user's hard drive, then adding any ROMs that are placed in these folders to Steam as non-Steam games.

The goal of this fork is to fix up Ice and tailor it for use on SteamOS. Debian packaging is in use to automate installation over using pip/python commands. pysteam, psutil, pysteam, and pastebin python packages were converted into Debian packages, which requires adding the SteamOS-Tools repository, noted below. ice-steamos follows the latest "stable" release (either upstream or deemed stable by us), and ice-steamos-unstable, which follows the latest upstream commits.


The original upstream code, and by extension, ours, is licensed under MIT.

Getting Started

Ice's upstream official documentation is available at Getting Started..


This fork makes use of as many libretro cores as we can, so that gamepad input (by way of retroarch-joypad-autoconfig) is handled automatically, taking out the need for manual configurations on our part, and the user. However, emulators, such as Dolphin, will need setup as the steam user (or migrated after setup with the desktop user) in Desktop Mode. Making non-libretro cores easier to configure is something that will be looked into. See "depends" lines of debian/control for a list of emulators in use, as well as the configuration files under the SteamOS-Tools build repository.


This repository requires that you have either


Please see the releases page for the latest information.

Stable build:

sudo apt-get install ice-steamos

Unstable build:

sudo apt-get install ice-unstable

There is also a pacakage called ice-steamos-unstable. This package follows upstream closely, with slight modification to logs and data paths locations. This is available via the libregeek repository. The package will break / replace your ice-steamos installation.

Running Ice

Once Ice is installed, simply run ice-steamos as the "steam" user. Because Steam cannot be running at the time you run Ice, you must do the following over SSH (openssh-server can be installed via apt-get). Below is how you need to do this. For instructions on settings the desktop and steam user passwords, please see this wiki page. Substitute "steamos" below for the ip address of your SteamOS machine / computer if you do not have DNS resolution setup on your router or locally.

Please note:
If you only have one computer, switch to a new terminal server with "CTRL+ALT+F#" (e.g. F2). The SteamOS compositor runs under TTY7 (CTRL+ALT+F7). With this method, you may have to kill "steamwebhelper" with pkill steamwebhelper. Once this is done, you can follow the directions below.

ssh desktop@steamos
sudo systemctl stop lightdm
sudo -u steam '/usr/games/ice-steamos'
sudo systemctl start lightdm

When you stop lightdm, you will see your SteamOS machine / computer go black. When you start it, Steam BPM will restart once again and automatically switch to the proper TTY screen running it. Alternatives are being sought, but no other easy way has yet been determined to launch ice, as Steam cannot be running (which is almost always on a SteamOS installation).

So, why do I have to stop Steam?

Steam must be closed before running ice-steamos. The reason this check exists is because Steam writes its shortcuts.vdf file on close, so if Ice is run while Steam is open when Steam closes (which will need to happen to view shortcuts) it will overwrite anything you did. This can be skipped by passing the --skip-steam-check argument to the command ice-steamos. This is a bad idea, and should not be used. A list of arguments (beyond the man page for ice-steamos), can be found in cli.py

Adding ROMs

When running Ice for the first time the directory /home/steam/ROMs will be created containing directories for all supported emulators.

The easiest way to add ROMs to this directory is with winscp or rsync, depending on your current platform. These pieces of software allow you to transfer files over ssh. To be able to use ssh as the steam user, you will need to set a password this can be done from the commandline as the desktop user with:

sudo passwd steam

Once you've done that you can connect to it with winscp with steam as username and with your new password.

If you're on Mac or Linux you can transfer and the content of your local roms directory like this:

rsync -ave ssh romsdir/NES/ steam@steamos:ROMs/NES/

Or you could use scp for single files:

scp rom.z64 steam@steamos:ROMs/N64/

In both cases replace steamos with your Steam Machine's IP address and the rom/romdir with what you want to transfer. scp can also handle folders with it's "-r" option in the same way the "cp" command does.

Once you've done this you can run Ice again to add the ROMs to Steam.

Removing ROMs / Categories added to to SteamOS

Simply remove / relocate the ROM/folder and run Ice again. If there are no games in a given folder, the category will be removed.

Demo videos


ice-steamos and ice-unstable can be uninstalled via apt-get:

sudo apt-get remove ice-steamos

If you wish to purge the configuration files:

sudo apt-get purge ice-steamos


Input is not working for some external emulators

This may be an issue for you for emulators not sharing the common input system for RetroArch / Libretro. One example reported was PCSX2. If this becomes an issue for you, try the following:

sudo gpasswd -a steam input

This adds the steam user (which the main Steam client runs as) to the input group.

Write access errors

If you receive this message:

=========== Starting Ice ===========
Ice cannot run because of issues with your system.

* Ice requires write access too `/home/steam/.local/share/Steam/userdata/21885827/config/grid` to run.

Please resolve these issues and try running Ice again

Close the window, or hit enter to exit...


Re-run ice-steamos once more. For some reason, the first time you run ice, this may show up as a false positive. This is being looked into.

steamwebhelper issues running on a seperate TTY

Error: another process, such as 'steamwebhelper' is still open, preventing Ice from running"

`steamwebhelper` cannot be running while Ice is being run. Please resolve these issues and try running Ice again.
Close the window, or hit enter to exit..


Switch back to the desktop user by typing "exit," and run 'sudo pkill steamwebhelper'". 'Try running ice-steamos' as the steam user again. This is the only current reported issue of a process still running after closing lightdm. The bug seems to present itself only when running ice-steamos on another TTY line, not over SSH.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.