web-dev-qa-db-fra.com

QStandardPaths: XDG_RUNTIME_DIR non défini, par défaut sur '/ tmp / runtime-root' lors de l'exécution des commandes Sudo

Lors de l'exécution de commandes Sudo telles que Sudo dolphin Je reçois cette étrange erreur:

QStandardPaths: XDG_RUNTIME_DIR non défini, par défaut sur '/ tmp/runtime-root'

Qu'est-ce que cela signifie et comment puis-je y remédier?

Je pense que j'ai eu cette erreur depuis l'installation et je n'ai changé aucun chemin standard ou quelque chose de similaire: je suis encore nouveau sur GNU/Linux.

J'utilise Debian 9.1 avec KDE.

6
mYnDstrEAm

XDG_RUNTIME_DIR est l'un des répertoires standard, défini par XDG Base Directory Specification (freedesktop.org)

$ XDG_RUNTIME_DIR définit le répertoire de base par rapport auquel les fichiers d'exécution non essentiels spécifiques à l'utilisateur et les autres objets fichier (tels que les sockets, les canaux nommés, ...) doivent être stockés. L'annuaire DOIT être la propriété de l'utilisateur, et il DOIT être le seul à y avoir accès en lecture et en écriture. Son mode d'accès Unix DOIT être 0700.

Fondamentalement, il s'agit d'un répertoire de fichiers temporaires par utilisateur, à utiliser par les applications compatibles XDG (Freedesktop.Org).

Dans Debian, cette variable est normalement définie par le module pam_systemd PAM, sur une connexion interactive.

$ XDG_RUNTIME_DIR

Chemin vers un répertoire accessible en écriture utilisateur privé qui est lié à l'heure de connexion de l'utilisateur sur la machine. Il est automatiquement créé la première fois qu'un utilisateur se connecte et supprimé lors de la déconnexion finale de l'utilisateur. Si un utilisateur se connecte une fois, puis se déconnecte à nouveau et se connecte à nouveau, le contenu du répertoire aura été perdu entre les deux, mais les applications ne doivent pas se fier à ce comportement et doivent pouvoir gérer les fichiers périmés. ...

$ XDG_RUNTIME_DIR n'est pas défini si l'utilisateur actuel n'est pas l'utilisateur d'origine de la session.

mais il n'est pas appliqué lorsque vous lancez une application avec Sudo , c'est pourquoi votre application (dauphin) ne peut pas la voir.

Il va alors correctement détecter ceci:

 QString xdgRuntimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR"));
 if (xdgRuntimeDir.isEmpty()) {
     const QString userName = QFileSystemEngine::resolveUserName(myUid);
     xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
        //...
     qWarning("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '%s'", qPrintable(xdgRuntimeDir));
 } 

choisissez une valeur par défaut raisonnable et émettez un avertissement (pas une erreur) à ce sujet.

Notez que la réutilisation d'un XDG_RUNTIME_DIR (--=== -) existant ne serait pas correcte, car il s'agit d'un répertoire temporaire par utilisateur et d'une application, exécutée en tant qu'utilisateur différent. , y accéder, entraînerait très probablement une autorisation de fichier cassée et pourrait ruiner votre session existante.

Ce n'est donc pas quelque chose que vous devriez essayer de "réparer".

Notez également que vous devez normalement utiliser gksudo ou kdesudo, pour exécuter des applications graphiques, pour les raisons expliquées ici .

10
zeppelin