我正在运行 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
这是一些故障排除信息。以 root 身份运行时,我看不到这些路径。这不会产生标准输出:
# echo $XDG_DATA_DIRS
在我机器上的普通用户帐户中,以下命令不产生标准输出并且返回值1
:
$ grep -r XDG_DATA_DIRS /etc/profile.d/
除了二进制文件 places.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 (any) https://www.archlinux.org/packages/extra/any/extra-cmake-modules/
我希望这个包不负责搞砸我的 mime 类型关联......
在另一台设备上全新安装 Arch 的新用户帐户中,以下三个命令不会产生标准输出:
echo $XDG_DATA_DIRS
grep -r XDG_DATA_DIRS /etc/profile.d/
grep -r XDG_DATA_DIRS= /usr
/usr/local/share/applications
不在$XDG_DATA_DIRS
您粘贴的值中,因此无需删除不存在的值如果你 grep -r XDG_DATA_DIRS /usr
你会看到很多 XDG_DATA_DIRS。
不,它不会搞砸任何事情。它也只搜索那些目录
确切地说,您在不同的系统中得到不同的值。它是您安装的那些包和为该特定用户定义的环境变量,它们将定义将要搜索数据文件的目录。如果相同的值被定义两次,那么它将显示两次。拥有它并没有什么奇怪的,因为有时包不协调在一起。
grep
/usr/
,/opt
并且$HOME
您肯定会在某个地方找到罪魁祸首。如果没有grep /
;)如果您使用的是
zsh
外壳,您可以添加到您的~/.zshrc
:然后
$XDG_DATA_DIRS
标量变量将被T
绑定到 ,$xdg_data_dirs
这使得操作更容易,并且元素U
使用-U
.然后要删除不存在的组件,您可以添加:
这将删除不是实际目录的组件(
/
符号链接解析后(-
))要删除 bash 中的重复目录和不存在的目录:
你在你的主目录中搜索过吗?
这是我发现的唯一万无一失的解决方案:
我把这些命令放在我的
~/.bashrc
文件中检查 /usr/bin/x-session-manager 和 /usr/bin/startxfce4 这两个在 XDG_DATA_DIRS 中重复的 /usr/share。