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

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

我在我的主目录中有自己的位置,我将可执行文件( ~/usr/bin/ )正确添加到我的.pam_environment文件中的PATH环境变量中,如相关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文档中推荐的正确语法。

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

我可以打开任何终端,只需输入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启动器和桌面文件文档表明这应该工作:

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

有关正在发生的事情的任何建议?

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

用$ {HOME}替换PATH赋值中的波浪号,它似乎有效。

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键(有时返回)

8)现在按CTRL + ALT + F7

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

希望这可以帮助!