如果我全新安装 Ubuntu 17.10,通过 snap 安装一个软件包,并将我的 shell 更改为 fish,再次登录后,gnome-shell 的菜单和我的收藏夹列表中会缺少该软件包。
奇怪的是,这也只有在使用 Wayland 时才会发生。
什么原因可能导致此问题?我可以确认我的 shell 正常工作并且路径正常。我还可以通过 snap run 或它们的命令行版本确认这些应用程序运行良好,但好像缺少 *.desktop 文件。
答案1
如果不存在则创建~/.config/fish/config.fish,并添加以下两行
set PATH /var/lib/snapd/snap/bin $PATH
set XDG_DATA_DIRS /var/lib/snapd/desktop/:$XDG_DATA_DIRS
这会将快照应用程序放在您的路径上并使您的快捷方式图标可用。
答案2
问题:该问题与您的登录 shell 有关。
当为源时,变量XDG_DATA_DIRS
被设置( )/etc/profile.d
/etc/profile.d/apps-bin-path.sh
但是如果你使用 fish-shell(如你的情况)或 zsh,你就不会采购/etc/profile.d/
,因此XDG_DATA_DIRS
永远不会设置,并且找不到.desktop
中的文件/var/lib/snapd/desktop
。这不是错误,而是由于 fish 不兼容 POSIX 1003.1。这意味着这些 shell 不理解 bash 语法。
解决方法:
我能想到至少两种解决方法。
最简单的方法是将默认 shell 反转为 bash
chsh -s /bin/bash
然后添加行
fish
在 的末尾
~/.bashrc
。这样你的登录 shell 将是 bash,而你的/etc/profile.d
将被 sourced,但每次打开终端时您都会使用 fish。在终端上输入“exit”将跳转回 bash。最棘手的方法是保留 fish 作为你的登录 shell,但强制
/etc/profile.d
使用 sourced。为此,您需要遵循以下步骤:从你的 fish shell 安装 fisher 和 bass (使 Bash 实用程序可在 Fish shell 中使用)。
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher # instruct fisher to download the bass package fisher add edc/bass
编辑您的
~/.config/fish/config.fish
(如果不存在则创建它)并/etc/profile.d
使用 bass 提供每个文件。nano ~/.config/fish/config.fish
(在另一个终端中
ls
获取/etc/profile.d directory
文件列表。复制它们)将列表粘贴到你的纳米终端中,如下所示:
bass source /etc/profile.d/apps-bin-path.sh bass source /etc/profile.d/cedilla-portuguese.sh bass source /etc/profile.d/vte-2.91.sh bass source /etc/profile.d/bash_completion.sh bass source /etc/profile.d/input-method-config.sh bass source /etc/profile.d/xdg_dirs_desktop_session.sh
保存、关闭、关闭会话或重新启动,然后‘ta-da’。
使用这个选项,你可以将 fish 保留为你的登录 shell,但你必须
/etc/profile.d
时不时地检查目录以确保没有你未获取的新文件。
答案3
除了建议的内容之外Esteban Vergara 的回答,我在~/.config/fish/config.fish
文件中添加了以下几行:
for file in /etc/profile.d/*.sh
bass source $file
end
profile.d
这将避免出现他建议的定期检查文件夹的问题,因为它会在会话启动时递归加载该文件夹中的所有 sh 文件。