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


13

我正在创建.desktop要在Unity Launcher中使用的文件。

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

这是我.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 IDE 的脚本(称为eclipse~/usr/bin/

我可以打开任何终端,只需键入即可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

它完美地工作。

正式统一启动程序和桌面文件的文件表明,这应该工作:

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

有什么建议吗?


修改您的桌面文件以使Eclipse在Shell中变得有趣,并且它可能会起作用。我不能说,因为我前一段时间停止使用便携式计算机。
RobotHumans

Answers:


5

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

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


您的答案是正确的,可以完全解决问题。谢谢!为了免除我提出的另一个问题,您是否知道为什么将$PATH两次追加到事件中?
BT

1
这是一个错误:pad.lv/955032
cscarney

3

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(如出)

6)按CTRL + X(与eXit中一样)

7)输入exit并按ENTER键(有时会返回)

8)现在按CTRL + ALT + F7

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

希望这可以帮助!


两种解决方案都可以解决问题,所以谢谢:)我对你们俩都表示支持,但是@csarney解释了问题的确切原因,并使用了文档中建议的环境变量设置方法,因此我将其标记为解决方案。
BT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.