私はArch LinuxとKDEを実行しており、MIMEタイプのファイル接続について学びたいと思います。
私のシステムの調査中に、次の問題が見つかりました。
$ echo $XDG_DATA_DIRS
/usr/share:/usr/share:/usr/local/share
パスが/usr/share
重複していることに注意してください。この問題を解決する方法と回避策を知りたいです。
/usr/local/share/applications/
また、私のシステムには、「環境変数からパスを削除できますか?」というメッセージはありません。$XDG_DATA_DIRS
では、どうすればよいですか?
私は最終結果が次のようになるはずだと思います。
$ echo $XDG_DATA_DIRS
/usr/share
以下は、いくつかのトラブルシューティング情報です。ルートとして実行すると、このパスは表示されません。これは標準出力を生成しません。
# echo $XDG_DATA_DIRS
マイコンピュータの一般ユーザーアカウントでは、次のコマンドは標準出力を生成せずに次のものを返します1
。
$ grep -r XDG_DATA_DIRS /etc/profile.d/
この検索では、バイナリファイルplace.sqlite(Firefoxプロファイルにあります)を除いて一致するものが見つかりませんでした。
find /home/myuser -mount -type f -exec grep -r XDG_DATA_DIRS= {} +
これも標準出力を生成しません。
grep -r XDG_DATA_DIRS /etc/
これまでに私が見つけた唯一の一致は次のとおりです。
# grep -r XDG_DATA_DIRS= /usr
/usr/share/ECM/kde-modules/prefix.sh.cmake:export XDG_DATA_DIRS=@KDE_INSTALL_FULL_DATADIR@:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}
だから...
pacman -F /usr/share/ECM/kde-modules/prefix.sh.cmake
usr/share/ECM/kde-modules/prefix.sh.cmake is owned by extra/extra-cmake-modules 5.66.0-1
Arch Linux - extra-cmake-modules 5.66.0-1(すべて)https://www.archlinux.org/packages/extra/any/extra-cmake-modules/
このバッグが私の無言のタイプの関連性を台無しにしないことを願っています...
他のデバイスにArchを新しくインストールした新しいユーザーアカウントでは、次の3つのコマンドは標準出力を生成しません。
echo $XDG_DATA_DIRS
grep -r XDG_DATA_DIRS /etc/profile.d/
grep -r XDG_DATA_DIRS= /usr
答え1
また、私のシステムには/usr/local/share/applications/がありません。 $XDG_DATA_DIRS環境変数からこのパスを削除できますか?
/usr/local/share/applications
$XDG_DATA_DIRS
貼り付けた値にはないため、存在しない値を削除する必要はありません。
grep -r XDG_DATA_DIRS /usr の場合
XDG_DATA_DIRSが何度も表示されることがわかります。
このバッグが私の無言のタイプの関連性を台無しにしないことを願っています...
いいえ、何も混乱しません。また、このディレクトリのみを検索します。
他のデバイスにArchを新しくインストールした新しいユーザーアカウントでは、次の3つのコマンドは標準出力を生成しません。
むしろ他のシステムでは異なる値を得る。インストールしたパッケージとその特定のユーザーに対して定義した環境変数は、データファイルを検索するディレクトリを定義します。同じ値が 2 回定義されると、2 回表示されます。時にはパッケージが一緒に動作しないので、奇妙なことはありません。そしてgrep
/usr/
、あなたはどこかで犯人を見つけるでしょう。そうでなければ;)/opt
$HOME
grep /
答え2
シェルを使用している場合は、zsh
以下を追加できます~/.zshrc
。
typeset -UT XDG_DATA_DIRS xdg_data_dirs
その後、$XDG_DATA_DIRS
スカラー変数がリンクT
され$xdg_data_dirs
、操作が簡単になり、要素がU
一意に設定されます-U
。
その後、存在しないコンポーネントを削除するには、次を追加できます。
xdg_data_dirs=($^xdg_data_dirs(N-/))
実際のディレクトリ以外のコンポーネントが削除されます(/
シンボリックリンクの確認(-
)の後)。
答え3
Bashから重複または存在しないディレクトリを削除するには、次の手順を実行します。
#!/usr/bin/env bash
XDG_DATA_DIRS=/usr/share:/usr/share:/usr/local/share
IFS=: read -ra xdg_data_dirs <<< "$XDG_DATA_DIRS"
declare -p xdg_data_dirs
for d in "${xdg_data_dirs[@]}"; do
test -d "$d" || continue
[[ :$result: != *:$d:* ]] || continue
result+="${result+:}$d"
done
XDG_DATA_DIRS=$result
ホームディレクトリで検索しましたか?
答え4
XDG_DATA_DIRSの/usr/shareと重複する/usr/bin/x-session-managerと/usr/bin/startxfce4を確認してください。