protonscr

Starting Steam from desktop launcher clobbers ~/.steam directory

steamclosed reviewed
ValveSoftware/steam-for-linux#118 · opened 2012-12-20 by elFarto · updated 2013-01-09 · 7 comments · github
EelFarto 2012-12-20 github

Running on Fedora 17 (64-bit) with XFCE as desktop environment.

When starting Steam from the desktop launcher my ~/.steam directory goes from looking like this:

[stephen@Thor .steam]$ ls -l
total 8
lrwxrwxrwx 1 stephen stephen   26 Dec 20 13:37 bin -> /home/stephen/.steam/bin32
lrwxrwxrwx 1 stephen stephen   31 Dec 20 13:37 bin32 -> /home/stephen/Steam/ubuntu12_32
lrwxrwxrwx 1 stephen stephen   31 Dec 20 13:37 bin64 -> /home/stephen/Steam/ubuntu12_64
-rw-rw-r-- 1 stephen stephen 1096 Dec 20 13:37 registry.vdf
lrwxrwxrwx 1 stephen stephen   19 Dec 20 13:37 root -> /home/stephen/Steam
lrwxrwxrwx 1 stephen stephen   19 Dec 20 13:37 steam -> /home/stephen/Steam
-rw-rw-r-- 1 stephen stephen    5 Dec 20 13:37 steam.pid

to looking like this:

[stephen@Thor .steam]$ ls -l
total 8
lrwxrwxrwx 1 stephen stephen   26 Dec 20 13:37 bin -> /home/stephen/.steam/bin32
lrwxrwxrwx 1 stephen stephen   37 Dec 20 13:37 bin32 -> /home/stephen/.steam/root/ubuntu12_32
lrwxrwxrwx 1 stephen stephen   37 Dec 20 13:37 bin64 -> /home/stephen/.steam/root/ubuntu12_64
-rw-rw-r-- 1 stephen stephen 1096 Dec 20 13:37 registry.vdf
lrwxrwxrwx 1 stephen stephen   25 Dec 20 13:37 root -> /home/stephen/.steam/root
-rw-r--r-- 1 stephen stephen    0 Dec 20 13:37 starting
lrwxrwxrwx 1 stephen stephen   25 Dec 20 13:37 steam -> /home/stephen/.steam/root
-rw-rw-r-- 1 stephen stephen    5 Dec 20 13:37 steam.pid

Steam somehow thinks it's installed to /home/stephen/.steam/root, and updates its link to point there causing a recursive loop.

Once this happens, Steam will not start.

Deleting the root link and replacing it with the original fixes the problem.

Regards
Stephen

Sslouken 2012-12-24 github

Do you have readlink installed?
Can you get this to happen consistently? If so, can you outline the steps to make this happen?

Thanks!

EelFarto 2012-12-26 github

Yes, I have readlink installed. Here's what it spits out for the broken link:

[stephen@Thor .steam]$ readlink root
/home/stephen/.steam/root
[stephen@Thor .steam]$ readlink -e root
[stephen@Thor .steam]$

I can get this to happen every time, just by starting Steam from the desktop launcher (the steam.desktop file). If I start it from a terminal (using the 'steam' command) it doesn't change the link.

I modified the desktop launcher to start Steam under strace to have a look at what was going on, here's some of the entries that mention the root symlink:

2584  readlink("/home/stephen/.steam/root", "/home/stephen/Steam/", 21) = 20
...
2619  execve("/usr/bin/rm", ["rm", "-f", "/home/stephen/.steam/root"], [/* 28 vars */]) = 0
...
2619  newfstatat(AT_FDCWD, "/home/stephen/.steam/root", {st_mode=S_IFLNK|0777, st_size=20, ...}, AT_SYMLINK_NOFOLLOW) = 0
2619  unlinkat(AT_FDCWD, "/home/stephen/.steam/root", 0) = 0
...
2620  execve("/usr/bin/ln", ["ln", "-s", "/home/stephen/Steam", "/home/stephen/.steam/root"], [/* 28 vars */]) = 0
...
2749  execve("/usr/bin/rm", ["rm", "-f", "/home/stephen/.steam/root"], [/* 34 vars */]) = 0
...
2750  execve("/usr/bin/ln", ["ln", "-s", "/home/stephen/.steam/root", "/home/stephen/.steam/root"], [/* 34 vars */]) = 0

Another odd thing I get when launching Steam from the desktop link as opposed from the command line. When I exit Steam I get a "Updating Steam" window, which seems to do something, and then the main Steam window will reappear. I need to exit a second time for it to actually close.

Regards
Stephen

Sslouken 2012-12-26 github

That's really strange. It seems like the /usr/bin/steam script is repairing the symlink, but then the steam.sh script seems like it thinks it's being called as ~/.steam/root/steam.sh instead of ~/Steam/steam.sh

Can you add this line to the top of both scripts and post the output?
set -x; echo "argv0 = $0"

Thanks!

EelFarto 2012-12-26 github

I had to slightly modify your modifications as I couldn't get the output when launching from the Desktop. I added this instead:

set -x
exec > /home/stephen/steamsh.log 2>&1
echo "argv0 = $0"

The output from /usr/bin/steam is:

+ echo 'argv0 = /usr/bin/steam'
argv0 = /usr/bin/steam
+ LAUNCHSTEAMDIR=/home/stephen/Steam
+ LAUNCHSTEAMPLATFORM=ubuntu12_32
+ LAUNCHSTEAMBIN=/home/stephen/Steam/ubuntu12_32
+ LAUNCHSTEAMBOOTSTRAP=/home/stephen/Steam/steam.sh
+ LAUNCHSTEAMBOOTSTRAPFILE=/usr/lib/steam/bootstraplinux_ubuntu12_32.tar.xz
+ EXELINK=/home/stephen/.steampath
+ STEAMROOTLINK=/home/stephen/.steam/root
+ '[' -x /home/stephen/Steam/steam.sh ']'
++ readlink -e /home/stephen/.steam/root
+ LAUNCHSTEAMDIR=/home/stephen/Steam
+ cd /home/stephen/Steam
+ exec /home/stephen/Steam/steam.sh
+ exec

And the output from Steam/steam.sh is:

+ echo 'argv0 = /home/stephen/Steam/steam.sh'
argv0 = /home/stephen/Steam/steam.sh
++ cd /home/stephen/Steam
++ echo /home/stephen/Steam
+ STEAMROOT=/home/stephen/Steam
+ '[' -z ']'
+ STEAMEXE=steam
++ uname
+ UNAME=Linux
+ '[' Linux == Linux ']'
++ uname -si
+ PLATFORMDIST='Linux x86_64'
++ uname -sr
+ PLATFORMRELEASE='Linux 3.6.10-2.fc17.x86_64'
+ '[' steam == steamcmd ']'
+ '[' 'Linux x86_64' == Ubuntu ']'
+ PLATFORM=ubuntu12_32
+ EXELINK=/home/stephen/.steampath
+ PIDFILE=/home/stephen/.steampid
+ STEAMRUNCMD=/home/stephen/.steam/runcmd
+ STEAMBINLINK=/home/stephen/.steam/bin
+ STEAMROOTLINK=/home/stephen/.steam/root
++ pidof /home/stephen/Steam/ubuntu12_32/steam
/home/stephen/Steam/steam.sh: line 50: pidof: command not found
+ ALREADYRUNNINGPID=
+ '[' ']'
+ '[' '!' -e /home/stephen/.steam ']'
+ rm -f /home/stephen/.steam/runcmd
+ rm -f /home/stephen/.steampath
+ ln -s /home/stephen/Steam/ubuntu12_32/steam /home/stephen/.steampath
+ rm -f /home/stephen/.steam/root
+ ln -s /home/stephen/Steam /home/stephen/.steam/root
+ rm -f /home/stephen/.steam/bin
+ ln -s /home/stephen/Steam/ubuntu12_32 /home/stephen/.steam/bin
+ echo 3356
+ export LD_LIBRARY_PATH=/home/stephen/Steam/ubuntu12_32:
+ LD_LIBRARY_PATH=/home/stephen/Steam/ubuntu12_32:
+ export SDL_VIDEO_X11_DGAMOUSE=0
+ SDL_VIDEO_X11_DGAMOUSE=0
+ ulimit -n 2048
+ cd /home/stephen/Steam
+ STATUS=42
+ '[' 42 -eq 42 ']'
+ /home/stephen/Steam/ubuntu12_32/steam
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Looks like steam didn't shutdown cleanly, scheduling immediate update check
+ STATUS=42
+ '[' 42 -eq 42 -a ubuntu12_32 == osx32 -a -f Info.plist ']'
+ '[' 42 -eq 42 ']'
+ /home/stephen/Steam/ubuntu12_32/steam
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
unlinked 0 orphaned pipes
removing stale semaphore last operated on by process 3260 with name 0eBlobRegistryMutex_DB39A5C99C2947D5B41306F3B2DFCE5A
removing stale semaphore last operated on by process 3260 with name 0eBlobRegistrySignal_DB39A5C99C2947D5B41306F3B2DFCE5A
removing stale semaphore last operated on by process 3260 with name 0emSteamEngineInstance
removing stale semaphore last operated on by process 3260 with name 0eSteamEngineLock
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
[1226/175737:WARNING:proxy_service.cc(646)] PAC support disabled because there is no system implementation
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Generating new string page texture 2: 48x256, total string texture memory is 49.15 KB
Generating new string page texture 3: 384x256, total string texture memory is 442.37 KB
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Adding license for package 2832
Adding license for package 6896
Adding license for package 7353
Adding license for package 8183
Adding license for package 1
Adding license for package 11
Adding license for package 79
Adding license for package 469
Adding license for package 7540
Adding license for package 8535
Adding license for package 8468
Adding license for package 11274
Adding license for package 7875
Adding license for package 11039
Adding license for package 13503
Adding license for package 13054
Adding license for package 16831
Adding license for package 16589
Adding license for package 0
Adding license for package 18029
Adding license for package 18639
roaming config store loaded successfully - 3053 bytes.
migrating temporary roaming config store
ExecCommandLine: "/home/stephen/Steam/ubuntu12_32/steam"
Generating new string page texture 71: 128x256, total string texture memory is 573.44 KB
Generating new string page texture 72: 128x256, total string texture memory is 131.07 KB
Generating new string page texture 73: 256x256, total string texture memory is 835.58 KB
Generating new string page texture 74: 64x256, total string texture memory is 901.12 KB
Generating new string page texture 75: 32x256, total string texture memory is 933.89 KB
System startup time: 7.91 seconds
/home/stephen/.steam/root/steam.sh: line 200: pidof: command not found
/home/stephen/.steam/root/steam.sh: line 286: /home/stephen/.steam/root/ubuntu12_32/steam: Too many levels of symbolic links
/home/stephen/.steam/root/steam.sh: line 307: /home/stephen/.steam/root/steam.sh: Too many levels of symbolic links
/home/stephen/.steam/root/steam.sh: line 307: exec: /home/stephen/.steam/root/steam.sh: cannot execute: Too many levels of symbolic links
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
Installing breakpad exception handler for appid(steam)/version(1355957371_client)
EelFarto 2012-12-26 github

I've done some more digging with strace and it seems the culprit has something to do with driverhelper.py calling steam.sh (attempting to open a link). When driverhelper.py calls steam.sh, it uses the /home/stephen/.steam/root/steam.sh form.

The reason my above logging wasn't picking that up was that the steam.sh file is getting replaced on startup with a smaller (4039 bytes) version, and is reverted to an original copy of the larger (9130 bytes) version.

Sslouken 2012-12-26 github

Good catch! Thanks for the info. :)

Sslouken 2012-12-27 github

This is fixed for the next Steam update, thanks!

Launch options