デスクトップファイルは$ PATHを正しく使用していないようです


13

.desktopUnityランチャーで使用するファイルを作成しています。

関連するUbuntuのドキュメントで指定されているように、ファイルの環境変数に~/usr/bin/正しく追加された実行可能ファイル()を置くホームディレクトリに自分の場所がありますPATH.pam_environment

これは私の.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/

私はそれが2回追加されていることを知ってい.pam_environmentますが、私が参照したUbuntuドキュメントで推奨されている正しい構文を使用すると、ファイル内のすべてが2回追加されるようです。

これは問題の一例です(すべての場合に発生します)。Eclipse IDEを実行するスクリプト(と呼ばれるeclipse)が~/usr/bin/あります。

任意のターミナルを開いて入力するだけで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

完璧に機能します。

公式ユニティランチャーやデスクトップのファイルのドキュメントでは、これが動作する必要があることを示唆しています:

Execは、実行可能ファイルへのパスです。実行可能ファイルへのフルパスは、$ PATH変数で指定されたパスのいずれにも含まれていない場合にのみ使用する必要があります。たとえば、パス/ usr / bin内にあるすべてのファイルは、Execフィールドでフルパスを指定する必要はなく、ファイル名のみを指定する必要があります。

何が起こっているのかについての提案はありますか?


デスクトップファイルをシェルで楽しい日食に変更すると、動作する場合があります。少し前にポータブルの使用をやめたので、私は言うことができませんでした。
RobotHumans

回答:


5

チルダはで展開されません.pam_environment、それはプロファイルスクリプトでする方法、およびデスクトップのファイルは、その上のシェル拡張をしないExec、それは文字通りという名前のファイルを探しているので、ラインシェルが希望の道を~/usr/bin/eclipse当然のdoesnの」存在します。

PATH割り当てのチルダを$ {HOME}に置き換えると、動作するようです。


あなたの答えは正しいです、それは問題を完全に修正します。ありがとう!別の質問をするのを避けるために、なぜ追加するの$PATHが2回起こるのかご存知ですか?
BT

1
それはバグです:pad.lv/955032
cscarney

3

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 + Del)を押すと、システムが安全に再起動します。

お役に立てれば!


両方のソリューションが問題を解決するために機能するので、感謝します:)あなたの両方に賛成しましたが、@ csarneyは問題の正確な理由を説明し、ドキュメントで推奨されている環境変数設定方法を使用するので、私はそれをソリューションとしてマークしました。
BT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.