将目录添加到 XDG_DATA_DIRS 的正确方法是什么?

将目录添加到 XDG_DATA_DIRS 的正确方法是什么?

我在 下安装了一些应用程序/opt/myapp,它有一个/opt/myapp/share目录。当我完成安装时,它告诉我:

Note that '/opt/myapp/share' is not in the search path
set by the XDG_DATA_HOME and XDG_DATA_DIRS
environment variables, so applications may not
be able to find it until you set them. The
directories currently searched are:

- /usr/share/gnome
- /home/joeuser/.local/share/flatpak/exports/share
- /var/lib/flatpak/exports/share
- /usr/local/share
- /usr/share

在系统范围内和作为单个用户将目录添加到该列表的正确方法是什么?

答案1

德国 ubuntuusers wiki 有一个很好的列表可用于该目的的文件和目录。

全局设置

根据我的研究,全局附加到该环境变量并不是微不足道的,但这里有一些提示:

  • 如果你想覆盖现有的值,/etc/environment是最简单的方法
  • 根据系统配置/etc/profile可能也是一个好方法,因为你它是由 shell 执行的
  • 其他要尝试的文件可能是/etc/X11/Xsession.d/*/etc/security/pam_env.conf

按用户设置

  • $HOME/.profile(或$HOME/.zprofile对于 zsh 用户)在多个地方都有建议,但是在其中添加该行XDG_DATA_DIRS="$HOME/.local/xdg:$XDG_DATA_DIRS"会使我的桌面在登录后完全无法运行
  • 对我有用的方法是创建$HOME/.xsessionrc线条并将其放在export XDG_DATA_DIRS="$HOME/.local/xdg:$XDG_DATA_DIRS"那里。当然,你必须替换$HOME/.local/xdg为你想要添加的目录。另请注意,这只会为图形应用程序设置变量,而不是为 shell 设置变量(因此您的值不会在 中提及echo $XDG_DATA_DIRS),但这应该不是问题。

推荐

只需执行此行并再次登录,它应该可以工作:

echo export 'XDG_DATA_DIRS="/opt/myapp/share:$XDG_DATA_DIRS"' >> ~/.xsessionrc

如果此后您的系统由于某种原因无法正常工作,请输入恢复模式,进入 root shell 并输入rm /home/<username>/.xsessionrc,然后reboot返回系统。

答案2

我不确定系统范围内的情况。但作为单个用户(可以在系统范围内访问),我将这一行包含在我的~/.profile文件中。

XDG_DATA_DIRS="/var/lib/flatpak/exports/share:$XDG_DATA_DIRS"

您可以对其进行调整以满足您自己的需求。

相关内容