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

ein*_*lum 6 directory-structure xdg-open xdg

我在 下安装了一些应用程序/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
Run Code Online (Sandbox Code Playgroud)

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

Xer*_*rus 7

德国ubuntuusers维基有一个很好的列表,可用于这一目的的文件和目录。

全局设置

根据我的研究,全局附加到该环境变量并非易事,但这里有一些提示:

  • 如果要覆盖现有值,/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为您要添加的目录。另请注意,这只会为图形应用程序设置变量,而不是为外壳程序设置变量(因此不会在 中提及您的值echo $XDG_DATA_DIRS),但这应该不是问题。

推荐

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

echo export 'XDG_DATA_DIRS="/opt/myapp/share:$XDG_DATA_DIRS"' >> ~/.xsessionrc
Run Code Online (Sandbox Code Playgroud)

如果此后无论出于何种原因您的系统无法正常运行,请进入Recovery Mode,进入 root shell 并键入rm /home/<username>/.xsessionrc然后reboot返回到您的系统。


小智 3

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

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

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