diff -Naur a/shm/dconf-shm.c b/shm/dconf-shm.c --- a/shm/dconf-shm.c 2013-03-14 20:27:40.000000000 +0200 +++ b/shm/dconf-shm.c 2013-11-17 23:54:03.795688731 +0200 @@ -32,9 +32,18 @@ { static gchar *shmdir; - if (g_once_init_enter (&shmdir)) - g_once_init_leave (&shmdir, g_build_filename (g_get_user_runtime_dir (), "dconf", NULL)); + if (g_once_init_enter (&shmdir)){ + /* if user is root, he has the ability to overwrite the other users' + dconf runtime directory, hence hanging their sessions, despite + the 0700 permissions. Make root always use his home dir instead + of the common runtime one. + */ + if (getuid() != 0) + g_once_init_leave (&shmdir, g_build_filename (g_get_user_runtime_dir (), "dconf", NULL)); + else + g_once_init_leave (&shmdir, g_build_filename (g_get_home_dir (), ".cache", "dconf", NULL)); + } return shmdir; }