桌面文件似乎没有正确使用 $PATH

桌面文件似乎没有正确使用 $PATH

我正在创建.desktop用于 Unity Launcher 的文件。

我的主目录中有自己的位置,我将可执行文件(~/usr/bin/)放在那里,该可执行文件已正确添加到我的文件PATH中的环境变量中.pam_environment,如相关 Ubuntu 文档

这是我的文件的内容.pam_environment

LANGUAGE=en_AU:en_GB:en
LANG=en_AU.UTF-8
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_MONETARY=en_AU.UTF-8
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8

PATH DEFAULT=${PATH}:~/usr/bin/

这导致我的PATH变量如下:

ben@ben-HPdv6:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/usr/bin/:~/usr/bin/

我知道它被附加了两次,但是.pam_environment无论如何,当使用我在引用的 Ubuntu 文档中推荐的正确语法时,文件中的任何内容似乎都会被添加两次。

这是问题的一个例子(它在所有情况下都会发生)。我有一个脚本(称为eclipse~/usr/bin/,其中运行 Eclipse IDE。

我可以打开任何终端并简单输入eclipse,它就会像您期望的那样正常运行。

但是当使用以下.desktop文件时:

#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Eclipse - Juno (4.2)
Icon=/home/ben/.icons/eclipse.svg
Exec=eclipse

我收到错误: 错误

但是当我将该Exec=行改为:

Exec=/home/ben/usr/bin/eclipse

它运行完美。

官方 Unity Launchers 和桌面文件文档建议这应该可行:

Exec 是可执行文件的路径。仅当可执行文件不在 $PATH 变量中指定的任何路径中时,才必须使用可执行文件的完整路径。例如,路径 /usr/bin 中的任何文件都不需要在其 Exec 字段中指定其完整路径,而只需指定其文件名即可。

对于正在发生的事情有什么建议吗?

答案1

波浪号不会.pam_environment像在配置文件脚本中那样进行扩展,并且桌面文件也不会像 shellExec那样在其行上进行 shell 扩展,因此它正在寻找一个字面上名为 的文件~/usr/bin/eclipse,而该文件当然不存在。

将 PATH 分配中的波浪号替换为 ${HOME} ,它似乎可以起作用。

答案2

Ubuntu 文档中所说的内容是有道理的,但是其“不再推荐”部分缺少一些细节。因此,我的回答将涉及使用其中一种方法。另外:它已经用于完全相同的目的。

快速访问您的./.profile 文件。

我的包含这个:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

从该文件的最后一部分(# set PATH 下面的几行,以便它包含用户的私有 bin(如果存在))可以看出,这已经完成了。因此,如果您想向 $PATH 变量添加某些内容,只需执行相同的操作即可。文档确实提到,每次启动系统时都会运行此操作。

对于您来说,您需要做的就是添加以下内容:

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

此时我开始认为不再推荐这种方法的唯一原因是它涉及启动时编写脚本,这对微小的错误非常敏感。然而,当有人使用这样的方法时,只需将文件改回原样即可消除小错误。

如果您不确定如何执行此操作:

1)首先,按 CTRL+ALT+F3

2)按照屏幕提示登录

3)在命令提示符中输入以下内容:

/usr/bin/nano ./.profile

4)删除以下几行:(我们刚刚添加了它们)

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

5)按 CTRL+O(与 Out 相同)

6)按 CTRL+X(如 eXit 所示)

7)输入exit并按ENTER键(有时按RETURN键)

8)现在按 CTRL+ALT+F7

9) 您应该可以看到登录屏幕或桌面,具体取决于问题发生的时间。如果没有,请按 CTRL+ALT+DEL(有时按 CTRL+ALT+DELETE),您的系统应该可以安全重启。

希望这可以帮助!

相关内容