Os arquivos da área de trabalho não parecem usar o $ PATH corretamente

13

Estou criando .desktop arquivos para uso no Unity Launcher.

Eu tenho meu próprio local no meu diretório pessoal onde eu coloquei meus executáveis ( ~/usr/bin/ ) que foram corretamente adicionados à minha variável de ambiente PATH no meu arquivo .pam_environment conforme especificado no documentação relevante do Ubuntu .

Este é o conteúdo do meu arquivo .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/

Que resulta na minha variável PATH da seguinte forma:

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/

Eu sei que ele é adicionado duas vezes, mas qualquer coisa no arquivo .pam_environment parece ser adicionada duas vezes, não importando o que usar ao usar a sintaxe correta recomendada na Documentação do Ubuntu que referi.

Este é um exemplo do problema (acontece em todos os casos). Eu tenho um script (chamado eclipse ) em ~/usr/bin/ que executa o Eclipse IDE.

Eu posso abrir qualquer terminal e simplesmente digitar eclipse e ele será executado como você espera.

Mas ao usar o seguinte arquivo .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

Eu recebo o erro:

Mas quando eu mudo a linha Exec= para:

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

funciona perfeitamente.

A documentação oficial dos Unity Unity Launchers e dos arquivos da área de trabalho sugere que isso deve funcionar:

  

Exec é o caminho para o arquivo executável. O caminho completo para o arquivo executável deve ser usado apenas no caso de não estar em nenhum dos caminhos especificados na variável $ PATH. Por exemplo, quaisquer arquivos que estejam dentro do caminho / usr / bin não precisam ter seu caminho completo especificado no campo Exec, mas apenas o nome do arquivo.

Alguma sugestão sobre o que está acontecendo?

    
por B T 28.01.2013 / 06:24

2 respostas

5

O til não é expandido em .pam_environment do jeito que seria em um script de perfil, e os arquivos da área de trabalho não fazem a expansão do shell em suas Exec linhas como o shell, por isso está procurando um arquivo isso é literalmente chamado ~/usr/bin/eclipse , o que obviamente não existe.

Substitua o til na atribuição PATH por $ {HOME} e parece funcionar.

    
por cscarney 05.02.2013 / 22:58
3

O que é dito na documentação do Ubuntu faz sentido, no entanto, sua seção "não recomendado mais" está faltando em alguns detalhes. Por essa razão, minha resposta envolverá o uso de um desses métodos. Além disso: já é usado para esse mesmo propósito.

Faça uma rápida visita ao seu arquivo ./.profile.

A minha contém isto:

# ~/.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

Como você pode ver na última seção deste arquivo (linhas abaixo de # set PATH, então ele inclui o private bin do usuário, se existir), isso já está sendo feito. Então, se você quisesse adicionar algo à variável $ PATH, você simplesmente faria a mesma coisa. A documentação mencionou que isso será executado toda vez que o sistema for iniciado.

No seu caso, tudo o que você precisa fazer é adicionar isto:

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

Neste ponto, estou começando a pensar que a única razão pela qual esse método não é mais recomendado é que ele envolve scripts na inicialização, o que é muito sensível a pequenos erros. Quando alguém está trabalhando com algo assim, no entanto, um pequeno erro pode ser desfeito simplesmente alterando o arquivo de volta para a forma como foi.

Se você não tiver certeza de como fazer isso:

1) Primeiro, pressione CTRL + ALT + F3

2) Faça o login seguindo o prompt na tela

3) Digite isto no prompt de comando:

/usr/bin/nano ./.profile

4) remova estas linhas: (acabamos de adicioná-las)

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

5) pressione CTRL + O (como em Out)

6) pressione CTRL + X (como em eXit)

7) digite exit e pressione ENTER (às vezes RETURN)

8) pressione CTRL + ALT + F7

9) Você deve obter sua tela de login ou desktop, dependendo de quando o problema ocorreu. Se não, pressione CTRL + ALT + DEL (às vezes, CTRL + ALT + DELETE) e seu sistema deve reiniciar com segurança.

Espero que isso ajude!

    
por JimmyC866 05.02.2013 / 21:30