How To Share Steam Game Files Between Linux And Windows

How to share steam games between Linux and Windows

Brief: This detailed guide shows you how to share Steam game files between Linux and Windows to save download time and data. We will also show you how it saved over 83% of download data for us.

If you are or want to be a committed Linux gamer and have games on Steam that are supported both on Linux and Windows, or have dual booting OSs for the same reason, you might want to consider reading this.

There are many of us gamers who dual boot Linux with Windows.  Some of us would have had only Linux had it not been for those games which have not yet arrived on Steam for Linux. Hence we keep both of the OSs so that we can play all of our favourite games regardless of the platforms they arrive on.

Thankfully, the Linux gaming community is emerging gracefully and we are having more and more popular Steam for Windows games being launched on Steam for Linux.

Many of us like to backup our Steam games so we won’t have to wait for downloads to complete. These collections are a majority of Steam for Windows games.

Now there are so many of these games that have arrived on Steam for Linux as well, such as Life is Strange, Tomb Raider 2013, Shadow of Mordor, XCOM: Enemy Unknown, XCOM 2, Race The Sun, Road Redemption, SUPERHOT,…and the list grows on! We also have the upcoming Deus Ex: Mankind Divided and Mad Max!!! Instead of years, nowadays we only have to wait for months for such titles after Windows releases and this is big news!

This experimental method shows you how to use your existing game files on either platform to restore the majority of the game data files on Steam. This results in having much lesser waiting times for you to enjoy the game as the files are pretty much common between the two OSs as we are going to see in the following example.

In the following method, we show you step by step procedures to attempt both Steam’s own backup and restore feature and the manual way. While we’re at it, we will also show you the similarities and differences in the game file structures between both platforms so that you too can explore and come up with your own tweaks.

In this method, we’ve used Ubuntu 14.04 LTS and Windows 10 to perform the backup and restore Steam tests.

#1 : Steam’s own backup and restore

When we tried to use a Windows Steam Backup of SUPERHOT on Linux(encrypted files in .csd format), Steam for Linux failed to recognise any of the files and started downloading the entire game from 0 MB!  Even on doing a validation check, a vast majority of the files could not be identified by Steam. We also did a similar test on  Windows, but the result was the same!

steam-restore-failure-from-windows-backup

steam-validation-failure

Time for some manual tweaks to share Steam games between Windows and Linux!

#2 : Manual Method

First, we took a look at the locations(user directory in home) where the game’s files were present on Linux:

This is the default installation location for Steam for Linux. “.local” and “.steam” directories are hidden by default and you would have to unhide them. We would recommend having a custom Steam installation location for easier handling of files. Here “SUPERHOT.x86_64” is the native Linux “executable” unlike a “.exe” file in Windows:

superhot_data1

This is the location which contains the majority of the files that we need(common between Windows and Linux):

superhot_data2

Here below we see .acf files. “appmanifest_322500.acf” is the one we need. Editing and tweaking this file helps a lot to make Steam recognise existing unencrypted raw file backups present in the “common” directory:

steam_linux_manifests

To confirm the same, just open the file with an editor and check. The more we understand this file, the better. Here is a post on the Steam forums that shows its major significance. It looks something like this:

It looks something like this:

“AppState”
{
“appid”        “322500”
“Universe”        “1”
“name”        “SUPERHOT”
“StateFlags”        “4”
“installdir”        “SUPERHOT”
“LastUpdated”        “1474466631”
“UpdateResult”        “0”
“SizeOnDisk”        “4156100762”
“buildid”        “1234395”
“LastOwner”       “<SteamID>”
“BytesToDownload”        “909578688”
“BytesDownloaded”        “909578688”
“AutoUpdateBehavior”        “0”
“UserConfig”
{
“Language”        “english”
}
“MountedDepots”
{
“322503”        “1943012315434556837”
}
}

After uninstalling the game on Linux to try the test, we now have a look at the contents of the same game on Windows 10:

superhot-windows-steam superhot-windows-steam2

We copied the “SUPERHOT” folder and also the manifest(.acf) file(it is created in the same format in Steam for Windows). While copying the .acf file and the directory to their respective locations on Steam for Linux, we made sure Steam wasn’t running in the background.

After the transfer was complete, we ran Steam and saw this:

most-files-recognised-on-steam

So instead of the entire 867.4 MB, it now shows 235.5 MB of files to download and that means more than 70% of the files have been identified by Steam :) ! So this is a massive time gain, relatively speaking. While this might vary for different games, of course, this is definitely worth a try for gamers who have below-average/average internet connections especially when the “heavy duty” games are considered that are mostly sized at around 40-50 GB these days.

Other tweaks that we tried:

  • We tried using a backup version of the original manifest file for Linux along with the Windows manual backup. But that resulted in Steam downloading the game for the beginning.
  • We can see that the data files are in a folder named “SH_Data” on Windows instead of  the directory, “SUPERHOT_Data” as on Linux. Changing it did not make any difference in the above result.

An Attempt to Understand The Manifest File

The manifest file can certainly be edited and tweaked for improving these results to make Steam detect as many files as it can.

There is a project on Github which is a python script to generate these manifest files. AppIDs for any Steam game can be obtained from SteamDB. By knowing the App ID, you can create your own manifest file with your favourite editor by using the following format: “appmanifest_<AppID>.acf” . In the above manual method, we can see that the AppID for SUPERHOT is 322500. Hence the filename would be appmanifest_322500.acf .

Let’s try to document it within the file according to our best interpretations:

“AppState”                                                              // The State of the Application(Game)
{
“appid”        “322500”                                          // The Steam Application ID of the Game
“Universe”        “1”
“name”        “SUPERHOT”                                 // Game Name
“StateFlags”        “4”
“installdir”        “SUPERHOT”                         // Installation Directory Name
“LastUpdated”        “1474466631”
“UpdateResult”        “0”
“SizeOnDisk”        “4156100762”
“buildid”        “1234395”
“LastOwner”        “<SteamID>”                      // Unique <SteamID> for account owner in numerical format
“BytesToDownload”        “909578688”        // Divide this number by 1073741824(1024 x 1024 x 1024) to calculate data remaining to download in GB.
“BytesDownloaded”        “909578688”        // Bytes downloaded
“AutoUpdateBehavior”        “0”                    // The game will update automatically when this is set to 0.

“UserConfig”                                                    // User Configuration
{
“Language”        “english”
}
“MountedDepots”                                           //  This section is mostly related to Game DLCs
{
“322503”        “1943012315434556837”
}
}

By calculating the data download size in GB/MB, you can compare it with what Steam shows and try more tweaks.

It saved over 83% of download data

So, I used the method I mentioned here and guess what, it saved me 19.8 GB of data.

XCOM 2 download data

I tried it on XCOM 2 game which is of 23.6 GB in size but using this method, I had to download only 3.8 GB.

XCOM download data

That’s a little over 83%. Amazing isn’t it?

Please share with us in the comments if you know about more such tips and tricks/suggestions about the manifest file or other improvements/ways for manual workarounds. We are yet to discover a complete documentation for these file formats as it not yet available officially in the Valve Developer Community or in the forums.

But for now, these are the best ways to share Steam games between Linux and Windows.

About the author
Avimanyu Bandyopadhyay

Avimanyu Bandyopadhyay

Tech Nerd at It's FOSS | Doctoral Researcher on GPU-based Bioinformatics and author of <a href="https://www.packtpub.com/product/hands-on-gpu-computing-with-python/9781789341072">'Hands-On GPU Comput

Become a Better Linux User

With the FOSS Weekly Newsletter, you learn useful Linux tips, discover applications, explore new distros and stay updated with the latest from Linux world

It's FOSS

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to It's FOSS.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.