Accueil > Linux - Divers > linux - erreurs - dconf-CRITICAL ** unable to create file ’/run/user/ (...)
linux - erreurs - dconf-CRITICAL ** unable to create file ’/run/user/ /dconf/user’ : Permission non accordée. dconf will not work properly.
jeudi 16 mai 2019, par
Problème
Quand on tente de lancer un programme du type Firefox, Thunderbird, Pluma, Gedit, bref graphique d’un autre utilisateur et en ligne de commande après avoir fait un xhost, on a toujours des erreurs en rafale du type (i.e. depuis un terminal d’un utilisateur user1 on a fait un su -i user2) :
$ firefox
(firefox:11101): dconf-CRITICAL **: 10:44:50.600: unable to create file '/run/user/1002/dconf/user': Permission non accordée. dconf will not work properly.
(firefox:11101): dconf-CRITICAL **: 10:44:50.601: unable to create file '/run/user/1002/dconf/user': Permission non accordée. dconf will not work properly.
** (firefox:11101): WARNING **: 10:44:50.601: Unable to connect to dbus: La connexion est fermée
XDG_RUNTIME_DIR (/run/user/1002) ne nous appartient pas (uid 1003), mais appartient à uid 1002! (Ceci peut se produire si par exemple vous tentez de vous connecter à un PulseAudio non root en tant qu'utilisateur root sur le protocole natif. Veuillez ne pas faire cela.)
C’est parce que cet andouille de système veut écrire dans les fichiers temporaires de l’utilisateur du bash appelant !
Solution
Ajouter en fin du fichier .bashrc de chaque utilisateur ...
Créer un fichier /opt/outils/run_user.sh qui sera lancé dans le .bashrc de chaque utilisateur.
#!/bin/bash
if [ $# -ne 1 ]; then
# pas de userid passe en parametre
userid=`id -u`
else
# userid passe en parametre
userid=$1
fi
if [ ! -d "/run/user/$userid" ]; then
sudo mkdir /run/user/$userid
sudo chown -R $userid:$userid /run/user/$userid
sudo chmod 777 /run/user/$userid
fi
if [ ! -d "/run/user/$userid/dconf" ]; then mkdir /run/user/$userid/dconf; fi
#if [ ! -d "/run/user/$userid/dconf/user" ]; then mkdir /run/user/$userid/dconf/user; fi
if [ ! -d "/run/user/$userid/dbus-1" ]; then mkdir /run/user/$userid/dbus-1; fi
if [ ! -d "/run/user/$userid/dbus-1/services" ]; then mkdir /run/user/$userid/dbus-1/services; fi
if [ ! -d "/run/user/$userid/gvfs" ]; then mkdir /run/user/$userid/gvfs; else true; fi
if [ ! -d "/run/user/$userid/pulse" ]; then mkdir /run/user/$userid/pulse; else true; fi
if [ ! -d "/run/user/$userid/pulse/pid" ]; then mkdir /run/user/$userid/pulse/pid; else true; fi
if [ ! -d "/run/user/$userid/pulse/native" ]; then mkdir /run/user/$userid/pulse/native; else true; fi
if [ ! -d "/run/user/$userid/systemd" ]; then mkdir /run/user/$userid/systemd; else true; fi
if [ ! -d "/run/user/$userid/systemd/private" ]; then mkdir /run/user/$userid/systemd/private; else true; fi
if [ ! -d "/run/user/$userid/systemd/notify" ]; then mkdir /run/user/$userid/systemd/notify; else true; fi
if [ ! -d "/run/user/$userid/gnupg" ]; then mkdir /run/user/$userid/gnupg; else true; fi
if [ ! -d "/run/user/$userid/gnupg/S.gpg-agent.ssh" ]; then mkdir /run/user/$userid/gnupg/S.gpg-agent.ssh; else true; fi
if [ ! -d "/run/user/$userid/gnupg/S.gpg-agent.extra" ]; then mkdir /run/user/$userid/gnupg/S.gpg-agent.extra; else true; fi
if [ ! -d "/run/user/$userid/gnupg/S.dirmngr" ]; then mkdir /run/user/$userid/gnupg/S.dirmngr; else true; fi
if [ ! -d "/run/user/$userid/gnupg/S.gpg-agent.browser" ]; then mkdir /run/user/$userid/gnupg/S.gpg-agent.browser; else true; fi
if [ ! -d "/run/user/$userid/gnupg/S.gpg-agent" ]; then mkdir /run/user/$userid/gnupg/S.gpg-agent; else true; fi
# Fin creation arborescence dans /run/user
if [ $userid -ne `id -u` ]; then
# on redirige 2>/dev/null car le changement de gvfs existant risque de donner une erreur inutile
sudo chmod -R 777 /run/user/$userid 2>/dev/null
sudo chown -R $userid:$userid /run/user/$userid 2>/dev/null
else
# on redirige 2>/dev/null car le changement de gvfs existant risque de donner une erreur inutile
chmod -R 777 /run/user/$userid 2>/dev/null
chown -R $userid:$userid /run/user/$userid 2>/dev/null
fi
exit 0
Il faut remarquer qu’on se fera prodigieusement engueler à la création de mkdir /run/user/$userid
Il va falloir le créer initialement sous root.
Inutile de penser à un service qui se lance une fois ... car le répertoire /run/user/$userid est supprimé à chaque déconnexion lightdm de l’utilisateur !!
Une fois cette manipulation faite, et bien au moins on fait sauter les erreurs dconf et pulseaudio dans la ligne de commande. Cela ne veut pas dire que l’on résout les problème pulseaudio pour autant, mais au moins, notre Firefox se lance plus vite, avec moins de messagess d’erreur.
Remarque
Pour le moment, pas de miracle pour les autres :
(firefox:11101): GLib-GIO-CRITICAL **: 10:44:50.950: g_dbus_connection_register_object: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Il faudrait lancer un service dbus ....