Steam for Linux setup guide on 64-bit Fedora / ArchLinux

A step-by-step guide on how to install Steam for Linux, setup the bootstraping process, include all required 32-bit library dependencies, and fix an (Ubuntu-related) incompatibility preventing it to run correctly on systemd-based distributions.

Valve does not provide official support for running Steam for Linux on non-Ubuntu distributions. So it shouldn’t come as a surprise that a number of manual actions are required to make it work with 64-bit machines on other distributions.

First and foremost, its important to figure out which 32-bit only libraries the steam runtime relies on and install those. Secondly, I encountered an issue with the Steam’s way of determining the machine-id uuid. YMMV, but after fixing these two things, outlined in this post, Steam for Linux works perfectly for me.

Choose an installer

There a number of options to choose from when installing the Steam installer. All of them more or less convert the Debian source package.

Steam-repository for Fedora Linux

Tom Callaway provides a custom Steam repository for Fedora. The package has some trouble with Steam’s implicit library dependencies which we will address later in this guide. To use, type this:

UPDATE: Steam is available in RPMFusion, so this one-liner will do the trick:

# yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm && yum install steam

Install on Arch Linux

Steam is available in the Community repository for Arch Linux, so it couldn’t get any easier than to simply type pacman -S steam.

Using openSUSE build service

Another alternative is to use the openSUSE build service which is also offering packages for Fedora, CentOS and RHEL.

Custom package from source

Alternatively, if you are using another distro or like doing stuff manually, you could use alien as a tool to convert the original installer either into a native packaging format, or extract its contents for building a custom package later on.

$ curl -L http://media.steampowered.com/client/installer/steam.deb -o /tmp/steam_latest.deb && alien --to-rpm --scripts /tmp/steam_latest.deb

Running above command in a console will write a file called steam-launcher-1.0.0.43-2.noarch.rpm which could be used for installation on an rpm-based system.

Whatever option you prefer most, you should now have these files (among others) on your filesystem:

|-- usr
    |-- bin
    |   |-- steam
    |-- lib
    |   `-- steam
    |       `-- bootstraplinux_ubuntu12_32.tar.xz

Start the bootstrap process

After having successfully installed the launcher on the system, you have to run the /usr/bin/steam script. I would highly recommend to do this with a regular user account and NOT with your root account. While at it: Why not create a new user account for the sole purpose of running Steam?

It does not matter whether you launch Steam in your favorite GUI environment (as you should have a .desktop file entry already) or run it from the command line. Steam will not work anyways right away, and it may even be neccesary to kill it forcefully later on. The difference is that we are expecting it to fail, but rather let it create the ~/.steam folder including its contents in the respective user’s home directory.

Steam basically extracts the contents of /usr/lib/steam/bootstraplinux_ubuntu12_32.tar.xz to your user’s home directory and creates a folder structure that will be referred to as STEAM_RUNTIME later.

The upside of this approach is, multiple users on the machine can run Steam without having to have root privileges, nor interfering with each other. Lets call it a security feature. This also means, we can easily get hold of Steam in case something goes wrong.

Add 32-bit library dependencies

Take a look at the /usr/bin/steam shell script at line 45 and you will know the list of all supported Linux platforms.

function detect_platform()
{
        # Maybe be smarter someday
        # Right now this is the only platform we have a bootstrap for, so hard-code it.
        echo ubuntu12_32
}

So here comes the tricky part: Because we do not want, nor really can, use the files contained in the “bootstrap” package, we have to make sure all libraries are installed and corrently linked.

To figure out whats missing, we’ll first have to determine what Steams’ bootstrap package depend on. Secondly, we’ll want to install all those libraries and dependencies.

A shorthand command (using Fedora package manager specific commands) for determining what we need (ignoring kernel packages) may look likes this:

$ ldd $(file ~/.steam/steam/ubuntu12_32/*\.so* | sed '/ELF/!d; s/:.*//g')|cut -d " " -f1 |sort|uniq|xargs repoquery -q --whatprovides --exactdeps --archlist=i386,i686 --qf=%{name}.%{arch}|sort|uniq|xargs rpm -q --state | egrep '.+not\sinstalled$' | grep -v 'kernel'

Running this command will yield a list of packages you probably want to install, e.g.:

package dbus-glib.i686 is not installed
package freetype-freeworld.i686 is not installed
package libusbx.i686 is not installed
package NetworkManager-glib.i686 is not installed

Always make sure to explicitly install the 32-bit libraries, because they are the ones Steam needs - also skip any kernel packages.

Hopefully these dependencies do not change, or are still available in the future (e.g. abi/api incompatible soname version bumbs) by your distribution. It seems safe to assume Valve Software will not change anything up until around April 2014 for when the next Ubuntu LTS release is announced.

Nonetheless, as the Steam runtime will automatically update itself, it may be necessary to do dependency checks periodically.

One day the Steam client may also support 64-bit systems natively. But this would not neccesarily translate to all games on the platform having 64-bit support.

Fix usage of machine ID

We’re almost set. Only one small, but very important, item remains on our checklist. Especially, if you incrementally upgraded your machine (from a state before systemd became default):

Steam for Linux looks at the wrong place for the machine-id file. On distributions that use systemd, the file is located at /etc/machine-id. On other systems it is located at e.g. /var/lib/dbus/machine-id.

Consulting the documentation reveals why this could be a problem:

The machine ID does not change based on user configuration, or when hardware is replaced. This machine ID adheres to the same format and logic as the D-Bus machine ID. Programs may use this ID to identify the host with a globally unique ID in the network, which does not change even if the local network configuration changes.

You’re good if both files are present and contain the same uuid. If the latter file does not exist and Steam runs, good, no need to sweat. But you are in trouble if the uuids differ. Worst case, Steam will presume a different machine ID, and may do crazy stuff to your dbus-daemon, which in turn will lead to all kinds of random weirdness, and the inability to run Steam properly altogether.

Solution: Delete the unowned and potentially wrong file if it exists. Instead, create a symbolic link to be on the safe side. Below code assumes you are using a privileged user account.

wronguuid="/var/lib/dbus/machine-id"
# [ -f "$wronguuid" ] && [ ! -L "$wronguuid" ] && rm $wronguuid
# ln -s /etc/machine-id $wronguuid

All set: Lets play!

In contrast to the first time we started Steam - for triggering its bootstrap process only - you should now be able to log in/register an account without any issues or “warning” popups.

Among the things to verify is if Steam detects your system properties correctly. Go to Help > System Information and look through the output.

Steam system properties window

Steam detects system properties correctly

If there is no suspicious output, you’re good to go. Some games may still have issues, but then again, its good to know you can finally rule out issue with the Steam client itself.

Use proper video card drivers

In order to avoid messages like ‘X context is not using direct rendering’ the matching 32-bit Xorg drivers have to be installed. If you followed the steps outlined, and have had working drivers before, this should be taken care of.

On Arch Linux the multilib-steam package already has optional dependencies on the needed 32-bit Xorg drivers. Just install the appropiate one.

Audio problems

Audio should work out of the box, if all 32-bit library dependencies have been installed. If in doubt, make sure that all OpenAL Soft and PulseAudio packages are installed correctly.

Flash plugin

Since Steam uses Flash™ videos in the storefront, you obviously will have to install the a flash-plugin to watch those. As Adobe has discontinued any further development of the official Linux-plugin, you may want to install the GNU flash movie player instead.

Font files

Steam seems to be content with any sans-serif ttf-font available on your system. Nonetheless, to be on the safe side, you could install the dejavu, liberation, libertine, and/or ubuntu font families.

General recommendation:

Do not run Steam as root, ever! Steam works flawlessly, when run by an unprivileged user. The self-update succeeds without a problem, as well, because it copies anything it needs to into your local ~/.steam folder. Also, you will eliminate the chance of borking your machine.