File Desktop sepertinya tidak menggunakan $ PATH dengan benar


13

Saya membuat .desktopfile untuk digunakan di Peluncur Persatuan.

Saya memiliki lokasi saya sendiri di direktori home saya di mana saya meletakkan file executable saya ( ~/usr/bin/) yang ditambahkan dengan benar ke PATHvariabel lingkungan saya di .pam_environmentfile saya sebagaimana ditentukan dalam dokumentasi Ubuntu yang relevan .

Ini adalah isi .pam_environmentfile saya :

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/

Yang menghasilkan PATHvariabel saya adalah sebagai berikut:

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/

Saya tahu ini ditambahkan dua kali, tetapi segala sesuatu dalam .pam_environmentfile tersebut sepertinya akan ditambahkan dua kali tidak peduli apa pun saat menggunakan sintaks yang benar yang direkomendasikan dalam Dokumentasi Ubuntu yang saya rujuk.

Ini adalah salah satu contoh masalah (ini terjadi pada semua kasus). Saya memiliki skrip (disebut eclipse) ~/usr/bin/yang menjalankan Eclipse IDE.

Saya dapat membuka terminal apa saja dan cukup mengetik eclipsedan itu berjalan dengan baik seperti yang Anda harapkan.

Tetapi saat menggunakan .desktopfile berikut :

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

Saya mendapatkan kesalahan: Kesalahan

Tetapi ketika saya mengubah Exec=jalur ke:

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

ini bekerja dengan sempurna.

The Official Persatuan Peluncur dan Desktop file dokumentasi menunjukkan bahwa ini harus bekerja:

Exec adalah path ke file yang dapat dieksekusi. Path lengkap ke file yang dapat dieksekusi harus digunakan hanya jika itu tidak ada di path yang ditentukan dalam variabel $ PATH. Misalnya, file apa pun yang ada di dalam path / usr / bin tidak perlu memiliki path lengkap yang ditentukan di bidang Exec, tetapi hanya nama file mereka.

Ada saran tentang apa yang terjadi?


Ubah file desktop Anda untuk bersenang-senang gerhana di shell dan mungkin berhasil. Saya tidak bisa mengatakannya sejak saya berhenti menggunakan portable beberapa waktu lalu.
RobotHumans

Jawaban:


5

Tilde tidak diperluas .pam_environmentseperti dalam skrip profil, dan file desktop tidak melakukan ekspansi shell pada Execbaris mereka seperti yang dilakukan shell, jadi mencari file yang secara harfiah bernama ~/usr/bin/eclipse, yang tentu saja tidak tidak ada.

Ganti tilde dalam tugas PATH dengan $ {HOME} dan sepertinya berhasil.


Jawaban Anda benar, yang memperbaiki masalah sepenuhnya. Terima kasih! Untuk menyelamatkan saya mengajukan pertanyaan lain, apakah Anda tahu mengapa menambahkan itu $PATHterjadi dua kali?
BT

1
Itu adalah bug: pad.lv/955032
cscarney

3

Apa yang dikatakan pada dokumentasi Ubuntu masuk akal, namun bagian "tidak direkomendasikan lagi" kurang dalam beberapa detail. Untuk alasan itu, jawaban saya akan melibatkan penggunaan salah satu metode ini. Juga: sudah digunakan untuk tujuan yang sama persis ini.

Lakukan kunjungan cepat ke file ./.profile Anda.

Milik saya mengandung ini:

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

Seperti yang dapat Anda lihat pada bagian terakhir dari file ini (baris di bawah # atur PATH sehingga termasuk bin pribadi pengguna jika ada), ini sudah dilakukan. Jadi jika Anda ingin menambahkan sesuatu ke variabel $ PATH, Anda cukup melakukan hal yang sama. Dokumentasi menyebutkan bahwa ini akan dijalankan setiap kali sistem dimulai.

Dalam kasus Anda, yang perlu Anda lakukan adalah menambahkan ini:

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

Pada titik ini saya mulai berpikir bahwa satu-satunya alasan bahwa metode ini tidak direkomendasikan lagi adalah karena melibatkan scripting pada startup, yang sangat sensitif terhadap sedikit kesalahan. Namun, ketika seseorang bekerja dengan sesuatu seperti ini, kesalahan kecil dapat diatasi hanya dengan mengubah file kembali seperti semula.

Jika Anda tidak yakin bagaimana melakukan ini:

1) Pertama, tekan CTRL + ALT + F3

2) Masuk dengan mengikuti prompt di layar

3) Ketik ini ke dalam prompt perintah:

/usr/bin/nano ./.profile

4) hapus baris ini: (kami baru saja menambahkannya)

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

5) tekan CTRL + O (seperti dalam Keluar)

6) tekan CTRL + X (seperti pada eXit)

7) ketik exitdan tekan ENTER (terkadang RETURN)

8) sekarang tekan CTRL + ALT + F7

9) Anda harus mendapatkan layar login atau desktop Anda, tergantung kapan masalah terjadi. Jika tidak, tekan CTRL + ALT + DEL (terkadang CTRL + ALT + DELETE) dan sistem Anda harus memulai ulang dengan aman.

Semoga ini membantu!


Kedua solusi bekerja untuk memperbaiki masalah, jadi terima kasih :) Saya telah melakukan upvoted pada Anda berdua tetapi @carney menjelaskan alasan yang tepat untuk masalah ini dan menggunakan metode pengaturan variabel lingkungan yang direkomendasikan dalam dokumentasi, jadi saya telah menandai itu sebagai solusi.
BT
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.