Файлы рабочего стола, похоже, неправильно используют $ PATH

Я создаю .desktop файлы для использования в Unity Launcher.

У меня есть собственное местоположение в домашнем каталоге, куда я помещаю свои исполняемые файлы (~/usr/bin/), который правильно добавлен в мою переменную среды PATH в моем файле .pam_environment, как указано в соответствующей документации по Ubuntu [ 1116].

Это содержимое моего файла .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

я получаю ошибку: Error

Но когда я изменяю строку Exec= на:

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

это работает отлично.

В официальной документации по Launchers и Desktop для рабочего стола предлагается, чтобы это работало:

Exec - путь к исполняемому файлу. Полный путь к исполняемому файлу должен использоваться только в том случае, если его нет ни в одном из путей, указанных в переменной $ PATH. Например, любые файлы, которые находятся внутри пути / usr / bin, не обязательно должны указывать полный путь в поле Exec, а только свое имя файла.

Есть предложения о том, что происходит?

13
задан 4 February 2016 в 08:55

2 ответа

Тильда не раскрывается в .pam_environment так, как в скрипте профиля, и файлы рабочего стола не выполняют расширение оболочки в своих строках Exec, как это делает оболочка, поэтому она ищет файл это буквально называется ~/usr/bin/eclipse, который, конечно, не существует.

Замените тильду в назначении PATH на $ {HOME}, и это похоже на работу.

0
ответ дан 4 February 2016 в 08:55

То, что сказано в документации по 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

Как вы можете видеть из последнего раздела этого файла (строки ниже # устанавливают PATH, так что он включает в себя личный ящик пользователя, если он существует), это уже делается. Поэтому, если вы хотите добавить что-то в переменную $ 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), и ваша система должна безопасно перезагрузиться.

Надеюсь, это поможет!

0
ответ дан 4 February 2016 в 08:55

Другие вопросы по тегам:

Похожие вопросы: