Catnoo
Notes de paramétrage de postes de travail, et autres vicissitudes ...

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 Lucien-Henry

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 ....

SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL