web-dev-qa-db-ja.com

QStandardPaths:XDG_RUNTIME_DIRが設定されていません。Sudoコマンドの実行時にデフォルトで「/ tmp / runtime-root」に設定されます

Sudo dolphinなどのSudoコマンドを実行すると、次の奇妙なエラーが発生します。

QStandardPaths:XDG_RUNTIME_DIRが設定されていません。デフォルトは「/ tmp/runtime-root」です。

それはどういう意味ですか、どうすれば修正できますか?

インストール後にこのエラーが発生したと思いますが、標準パスなどを変更していません。私はまだGNU/Linuxを初めて使用しています。

KDEでDebian 9.1を実行しています。

6
mYnDstrEAm

XDG_RUNTIME_DIRXDGベースディレクトリ仕様 (freedesktop.org)で定義されている標準ディレクトリの1つです。

$ XDG_RUNTIME_DIRは、ユーザー固有の非必須ランタイムファイルおよびその他のファイルオブジェクト(ソケット、名前付きパイプなど)を格納する必要があるベースディレクトリを定義します。ディレクトリはユーザーが所有する必要があり、ユーザーはそのディレクトリへの読み取りおよび書き込みアクセス権を持つ唯一のユーザーである必要があります。 Unixアクセスモードは0700でなければなりません。

基本的に、これはXDG(Freedesktop.Org)互換アプリで使用するユーザーごとの一時ファイルディレクトリです。

Debianでは、この変数は通常、対話型ログインで pam_systemd PAMモジュールによって設定されます。

$ XDG_RUNTIME_DIR

マシンのユーザーログイン時間にバインドされている、ユーザー専用のユーザー書き込み可能なディレクトリへのパス。これは、ユーザーが初めてログインしたときに自動的に作成され、ユーザーの最終ログアウト時に削除されます。ユーザーが一度ログインしてから再度ログアウトし、再度ログインすると、その間にディレクトリの内容が失われますが、アプリケーションはこの動作に依存せず、古いファイルを処理できる必要があります。 ...

現在のユーザーがセッションの元のユーザーでない場合、$ XDG_RUNTIME_DIRは設定されません。

Sudoでアプリケーションを起動する場合は適用されません。そのため、アプリケーション(イルカ)はそれを見ることができません。

その後、正しく detect this:

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

適切なデフォルト値を選択し、それについて警告(エラーではなく)を発行します。

既存のXDG_RUNTIME_DIRの再利用は、ユーザーごとの一時ディレクトリであり、別のユーザーとして実行されているアプリがあるため、正しくないことに注意してください、それにアクセスすると、おそらくファイルのアクセス権が壊れ、既存のセッションが破壊される可能性があります。

したがって、これは「修正」しようとするべきものではありません。

また、説明されている理由 here のため、通常はgksudoまたはkdesudoを使用してグラフィカルアプリを実行する必要があります。

10
zeppelin