Up-Front Problem Solution Summary:
I was thinking to myself: “People probably don’t want to read all that to find out that you simply have to download the SteamSetup.exe file from http://store.steampowered.com/about/ and install it as an unlisted program in PlayOnLinux.”
So there you go. If you don’t know how to do that, or you want to learn from my trials and tribulations, read the whole thing!
The Whole Thing:
So, after being all proud of my Linux build, running Steam natively very well on my Richland APU (TF2 plays with maxed out settings at 1920×1080 with no Anti-Aliasing (that’s the one concilation, but hey, amazing for an on-die GPU; I just can’t get over this technology), dipping below 30fps with some frequency during large firefights, but it’s completely playable and visually attractive. L4D2 runs in a similar fashion; playable during huge events, but probably a bit frustrating for a hardcore gamer used to perfect response from the system.
Anyway, this pride was challenged when a friend gifted me a copy of Sniper Elite: Nazi Zombie Army. It’s a Windows-only game.
Thus began my adventure with PlayOnLinux. My frist stop which led me to this software was the aged: https://developer.valvesoftware.com/wiki/Steam_under_Linux
The site is deceptively old (the relevant PlayOnLinux section features directions indicating that they were last tested in 2009, despite the last update time for the site in general being January 2014), but the simplicity of simply adding the PlayOnLinux repository, installing it, and using it to install Steam was too enticing.
I added the repository and installed the beast:
$ sudo vim /etc/yum.repos.d/playonlinux.repo [playonlinux] name=PlayOnLinux Official repository baseurl=http://rpm.playonlinux.com/fedora/yum/base enable=1 gpgcheck=0 gpgkey=http://rpm.playonlinux.com/public.gpg :wq $ sudo yum install playonlinux
I then notice that, to my dismay, PlayOnLinux installs itself into your home directory where it intends to store game data. This seems something of a trend in Linux software which I’ve encountered, and it’s pretty sloppy if you ask me. The opt directory is the proper location for optional software, not home.
I do some research to try to configure PlayOnLinux itself to move this data, but I don’t have much luck. I notice, however, that PlayOnLinux installs a symbolic link in one’s home directory called “PlayOnLinux’s virtual drives” and points it to the .PlayOnLinux folder in the home directory. Some people online seem to suggest that simply redirecting this link performs the task, and it seems reasonable to suspect that this is an intentional design choice, so I redirect that link to opt.
$ unlink ~/PlayOnLinux\'s\ virtual\ drives $ ln -s -T /opt/PlayOnLinux/ PlayOnLinux\'s\ virtual\ drives
I then launch PlayOnLinux and navigate the GUI to Install –> Games –> Steam. Wine installs mono for .NET compatibility, and the process is automated entirely. I choose 4096 from a selection of “graphics board memory” options (kinda not-applicable to an APU, but one can extrapolate and 4096 is the highest value available).
Unfortunately, a small snag is hit with SELinux when the wine preloader attempts to use mmap_zero system calls. Perhaps later I can fix up the contexts to allow this activity more securely, but in the meanwhile I remedy the issue by setting the SE Boolean value mmap_low_allowed to 1:
$ sudo setsebool -P mmap_low_allowed 1
I will check later on the safety concerns there, but know that I haven’t done the research yet myself, so you’re wading into semi-unknown territory with me here.
So now, everything seems to be working properly. Joy! I launch Steam and to my dismay, I receive the error “Steam is temporarily unavailable” and the initial update never progresses past 0%. After repeated retrials and network connection fiddling (all my other software worked without issue over the network through the entire issue), I began to receive the error “No SteamConfigServers available” rather than the initial error. Otherwise, the symptoms remained constant.
Early in my research of this issue, I saw that a release of the Steam executable broke wine support for versions of wine prior to 1.7.8. It seems that PlayOnLinux installs wine 1.5.25 for Steam by default. If one navigates in the PlayOnLinux GUI to Configure –> Steam –> General Tab –> Plus Button (Next to Wine Version), one can install additional wine versions for the application. I install 1.7.13 and execute again.
While this did not resolve my issue, I suspect it would have been necessary later on, and it seems a good maintenance step to undertake anyway.
Nonetheless, my issue remained. After much research and many attempts at solution with which I will not bore you, I uninstalled Steam from PlayOnLinux and simply acquired the Windows executable from the Steam website (http://store.steampowered.com/about/). It’s called SteamSetup.exe (and is not the SteamInstall.msi file also used in some recommended Steam installation routines with wine). I then entered PlayOnLinux’s GUI and chose “Install a Program” on the left and then “Install a non-listed program” in the bottom right.
This brings up a wizard which is fairly easy to complete. I chose to Install a program in a new virtual drive, named the drive “Steam”, chose to “Use another version of Wine” and selected the latest version (1.17.13), chose “32 bits windows installation” (though I believe I installed the x86_64 version of wine, and have been informed by the system that I was operating within a 64 bit Wine context previously, PlayOnLinux seems to install 32 bit versions of Wine), and then after the virtual drive was created, I simply pointed it to the SteamSetup.exe executable.
One additional housekeeping task to accomplish is to either use winetricks to install the Tahoma font which is missing from wine by default, and causes Steam’s menu text not to render at all (can’t read anything!), or to take the lazy man’s way (as did I) and simply add in PlayOnLinux a command line argument to the Steam executable to prevent it from rendering fancy fonts. To do this, within the PlayOnLinux GUI, highlight Steam and select “Configure” on the right. In the “General” tab is an “Arguments” field; input “-no-dwrite” (minus the quotes, of course) in the field and you’re good to go. The text ain’t pretty, but who the hell cares? They’re menus.
To my great joy, this allows Steam to install and fully update itself. I’m really pleased to report this fix, because I’m starting to see more and more reports of this issue in the PlayOnLinux forums as of late.
Hopefully it will help other people; perhaps the built-in PlayOnLinux installation routine is using some out-of-date content?
Moving forward, I logged in and was able to view my Windows games. I attempted to install Sniper Elite: Nazi Zombie Army (a fine purpose, is it not?) but I was informed that I did not have sufficient disk space!
As it turns out, that “PlayOnLinux’s virtual drives” link doesn’t appear to function as expected. PlayOnLinux seemed to install the virtual drives in ~/.PlayOnLinux/wineprefix regardless. I stopped Steam, exited PlayOnLinux, and moved the entire .PlayOnLinux folder to opt and replaced it with a symbolic link (ln -s /opt/PlayOnLinux/PlayOnLinuxHome .PlayOnLinux). When I restarted Steam, it properly recognized the massive increase in space.
As an aside, I’d just like to point out that in researching these issues, people constantly recommended simply setting one’s home directory to be huge so as to simply accommodate this default software behavior. I would put my word in against this practice; one of the beautiful things about the UNIX standard is its elegance, and keeping the filesystem directories in proper use is good practice and yields healthier systems.
So this brings us to the glorious end of my work. I install Sniper Elite: Nazi Zombie Army. I notice something which may be peculiar to me, by the way, but I’ll say it anyway: Attempts to browse webpages result in my 3 MB/s wireless download to abruptly falter and my wireless connectivity to fade completely. Though my adapter reports remaining connected to my network, it simply stops receiving or transmitting packets and my machine loses the capability to so much as ping the router. If I simply allow the download to proceed without any other action on my behalf, it completes successfully.
Weird. No other network turbulence seemed to be going on, and other devices were successfully transmitting and receiving over the network. Again, it could’ve been a basement noise/latency issue, but I thought I’d throw it out there if anyone else is having the same issue.
Sadly, when the download completed, I launched Sniper Elite: Nazi Zombie Army and was presented with the following gross-looking error:
Failed to initialize D3D11.dll
A quick Google shows that this is a problem even for native Windows users, and I see that it may relate to DirectX 11. If I recall correctly, wine only supports DirectX 9 at the moment, but I’ll do some more research and figure this one out in an upcoming article. I gotta hit the sack.