I file desktop non sembrano usare $ PATH correttamente


13

Sto creando .desktopfile da utilizzare in Unity Launcher.

Ho la mia posizione nella mia directory home dove ho messo i miei eseguibili ( ~/usr/bin/) che sono correttamente aggiunti alla mia PATHvariabile di ambiente nel mio .pam_environmentfile come specificato nella relativa documentazione di Ubuntu .

Questo è il contenuto del mio .pam_environmentfile:

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/

Il risultato è che la mia PATHvariabile è la seguente:

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/

So che viene aggiunto due volte, ma qualsiasi cosa nel .pam_environmentfile sembra essere aggiunta due volte, indipendentemente da ciò che è accaduto quando ho usato la sintassi corretta raccomandata nella documentazione di Ubuntu.

Questo è un esempio del problema (succede in tutti i casi). Ho uno script (chiamato eclipse) in ~/usr/bin/cui viene eseguito Eclipse IDE.

Posso aprire qualsiasi terminale e semplicemente digitare eclipsee funziona bene come ci si aspetterebbe.

Ma quando si utilizza il seguente .desktopfile:

#!/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

Ottengo l'errore: Errore

Ma quando cambio la Exec=linea in:

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

funziona perfettamente.

La documentazione ufficiale di Unity Launchers e dei file desktop suggerisce che questo dovrebbe funzionare:

Exec è il percorso del file eseguibile. Il percorso completo del file eseguibile deve essere utilizzato solo nel caso in cui non si trovi in ​​nessuno dei percorsi specificati nella variabile $ PATH. Ad esempio, tutti i file che si trovano all'interno del percorso / usr / bin non devono avere il loro percorso completo specificato nel campo Exec, ma solo il loro nome file.

Qualche suggerimento su cosa sta succedendo?


Modifica il tuo file desktop per renderlo divertente in una shell e potrebbe funzionare. Non saprei dire da quando ho smesso di usare il portatile qualche tempo fa.
RobotHumans

Risposte:


5

La tilde non si espande .pam_environmentcome farebbe in uno script di profilo e i file desktop non eseguono l'espansione della shell sulle loro Execlinee come farebbe la shell, quindi sta cercando un file che è letteralmente chiamato ~/usr/bin/eclipse, che ovviamente non non esiste.

Sostituisci la tilde nell'assegnazione PATH con $ {HOME} e sembra funzionare.


La tua risposta è corretta, questo risolve completamente il problema. Grazie! Per salvarmi facendo un'altra domanda, hai idea del perché accodarsi a $PATHdue volte accada?
BT

1
È un bug: pad.lv/955032
cscarney,

3

Ciò che è detto nella documentazione di Ubuntu ha senso, tuttavia la sua sezione "non più consigliata" è carente in alcuni dettagli. Per tale motivo, la mia risposta riguarderà l'utilizzo di uno di questi metodi. Inoltre: è già utilizzato per questo stesso identico scopo.

Visita rapidamente il tuo file ./.profile.

Il mio contiene questo:

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

Come puoi vedere dall'ultima sezione di questo file (le righe sotto # impostano PATH in modo che includa il cestino privato dell'utente se esiste), questo è già stato fatto. Quindi se volessi aggiungere qualcosa alla variabile $ PATH, faresti semplicemente la stessa cosa. La documentazione menziona che questo verrà eseguito ogni volta che il sistema viene avviato.

Nel tuo caso, tutto ciò che dovresti fare è aggiungere questo:

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

A questo punto sto iniziando a pensare che l'unica ragione per cui questo metodo non è più raccomandato è che coinvolge lo scripting all'avvio, che è molto sensibile ai piccoli errori. Quando qualcuno sta lavorando con qualcosa del genere, tuttavia, un piccolo errore potrebbe essere annullato semplicemente cambiando il file nel modo in cui era.

Se non sei sicuro di come eseguire questa operazione:

1) Innanzitutto, premi CTRL + ALT + F3

2) Accedi seguendo il prompt sullo schermo

3) Digita questo nel prompt dei comandi:

/usr/bin/nano ./.profile

4) rimuovi queste righe: (le abbiamo appena aggiunte)

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

5) premere CTRL + O (come in Out)

6) premi CTRL + X (come in eXit)

7) digitare exite premere INVIO (a volte INVIO)

8) ora premi CTRL + ALT + F7

9) Dovresti visualizzare la schermata di accesso o il desktop, a seconda di quando si è verificato il problema. In caso contrario, premere CTRL + ALT + CANC (a volte CTRL + ALT + CANC) e il sistema dovrebbe riavviarsi in modo sicuro.

Spero che sia di aiuto!


Entrambe le soluzioni funzionano per risolvere il problema, quindi grazie :) Ti ho votato entrambi ma @csarney spiega il motivo esatto del problema e usa il metodo di impostazione della variabile d'ambiente raccomandato nella documentazione, quindi l'ho contrassegnato come soluzione.
BT
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.