QStandardPaths: XDG_RUNTIME_DIR não definido, assumindo o padrão de '/ tmp / runtime-root' ao executar comandos sudo

2

Ao executar comandos sudo, como sudo dolphin , estou recebendo este erro estranho:

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'

O que significa e como posso corrigi-lo?

Acho que recebi este erro desde a instalação e não alterei nenhum caminho padrão ou algo parecido: ainda sou novo no GNU / Linux.

Estou executando o Debian 9.1 com o KDE.

    
por mYnDstrEAm 30.07.2017 / 20:45

1 resposta

3

O XDG_RUNTIME_DIR é um dos diretórios padrão, definido pelo Especificação de diretório base do XDG (freedesktop.org)

$XDG_RUNTIME_DIR defines the base directory relative to which user-specific non-essential runtime files and other file objects (such as sockets, named pipes, ...) should be stored. The directory MUST be owned by the user, and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700.

Basicamente, é um diretório de arquivos temporários por usuário, para ser usado pelos aplicativos compatíveis com XDG (Freedesktop.Org).

No Debian, essa variável é normalmente definida pelo módulo PAM pam_systemd , em um formato interativo. login.

$XDG_RUNTIME_DIR

Path to a user-private user-writable directory that is bound to the user login time on the machine. It is automatically created the first time a user logs in and removed on the user's final logout. If a user logs in once, then logs out again, and logs in again, the directory contents will have been lost in between, but applications should not rely on this behavior and must be able to deal with stale files. ...

$XDG_RUNTIME_DIR is not set if the current user is not the original user of the session.

mas não é aplicado quando você inicia um aplicativo com sudo , e é por isso que seu aplicativo (dolphin) não pode vê-lo.

Ele irá corretamente detectar isto:

 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));
 } 

escolha um valor padrão razoável e emita um Aviso (não um erro) relacionado a ele.

Observe que a reutilização de um XDG_RUNTIME_DIR não seria correto, pois é um diretório temporário por usuário e ter um aplicativo, executado como um usuário diferente, acessá-lo provavelmente resultaria em permissões de arquivo quebradas e pode arruinar sua sessão existente.

Então, isso não é algo que você deva tentar "consertar".

Observe também que você normalmente deve usar gksudo ou kdesudo para executar aplicativos gráficos, pelos motivos explicados aqui .

    
por 03.08.2017 / 17:37