QStandardPaths:sudoコマンドを実行するとXDG_RUNTIME_DIRが設定されず、デフォルトは「/tmp/runtime-root」です。

QStandardPaths:sudoコマンドを実行するとXDG_RUNTIME_DIRが設定されず、デフォルトは「/tmp/runtime-root」です。

たとえば、sudo コマンドを実行すると、sudo dolphin次のような奇妙なエラーが発生します。

QStandardPaths: XDG_RUNTIME_DIR が設定されておらず、デフォルトは「/tmp/runtime-root」です。

これは何を意味し、どのように解決しますか?

インストール後にこのエラーが発生したようです。標準パスやそれに似たものは変更しませんでした。私はまだGNU / Linuxを初めて使用しています。

私はKDEを使ってDebian 9.1を実行しています。

編集する:ドルフィンを実行するためにsudoを使用しないでください!これにより、ファイルエクスプローラの脆弱性を悪用する可能性があります。また、他のほとんどのGUIをrootとして実行しないでください(これらのGUIはsudoパスワードのみを求めるメッセージを表示します)。

ベストアンサー1

これXDG_RUNTIME_DIR次の標準ディレクトリの1つです。 XDGの基本ディレクトリ仕様(freedesktop.org)

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

デフォルトでは、これはXDG(Freedesktop.Org)互換アプリケーションで使用するためのユーザー固有の一時ファイルディレクトリです。

Debian では、この変数は通常次のように表示されます。pam_systemdPAMモジュール、対話型ログイン。

$XDG_RUNTIME_DIR

コンピュータ上のユーザーのログイン時間に関連付けられているユーザーの個人ユーザー書き込み可能ディレクトリパス。最初のログイン時に自動的に作成され、最後のログアウト時に削除されます。ユーザーが一度ログインしてから再度ログアウトして再度ログインすると、その間にディレクトリの内容が失われますが、アプリケーションはこの動作に依存してはいけません。古いファイルを処理できるはずです。 ...

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

ただし、以下を使用してアプリケーションを起動する場合は適用されません。Sudoこれが、あなたのアプリケーション(イルカ)がこれを見ることができない理由です。

それではきちんとなるでしょう。発覚これ:

 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これはユーザー固有の一時ディレクトリであり、他のユーザーアクセスでアプリケーションを実行すると、ファイル権限が破損し、既存のセッションが破壊される可能性が高いため、間違っています。

したがって、これは「修正」しようとする必要はありません。

また、通常、次gksudoの理由でkdesudoグラフィックアプリケーションを実行する必要があります。ここ

おすすめ記事