桌面文件似乎没有正确使用$ 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),系统应安全重启。
希望这可以帮助!