4

リムーバブル デバイス (USB スティックなど) で実行する必要があるアプリを開発しています。Linux では、Gnome ランチャーを使用して、アプリへのショートカットをデバイスのルートに配置しています。ただし、デバイスがマウントされる場所が事前にわからないため、実行可能ファイルとアイコンには相対パスを使用する必要があります。.desktop ファイルには次のようなものがあります。

Exec=../myapp/myexecutable
アイコン=../myapp/myicon.png

実行可能ファイルもアイコンも見つかりません。.desktop ファイル (http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#icon_lookup) のアイコン ルックアップに関する仕様を読みましたが、理解できませんでした。

ランチャーに相対パスを使用させる方法はありますか? そうでない場合、私が望むものを達成するための別のアプローチはありますか (つまり、相対パスを使用して指定されたアイコンと実行可能ファイルを含むショートカット)?

4

2 に答える 2

3

相対パスはサポートされていません*。

解決策の 1 つは、インストーラーを用意することです。このスクリプトは、スクリプトの実行元の場所に従ってデスクトップ ファイルを更新します。スクリプトを実行可能にすると、ユーザーはそれをクリックしてインストールできます。このスクリプトでは、デスクトップ ファイルが書き込み可能である必要があります。

これは、Linux を念頭に置いて行われました。ファイルの名前はautorun.shです。しかし、これは単なる慣習であり、通常は自動的に実行されません。これを Linux 以外にデプロイする場合は、ファイルに別の名前 ( autorun.linux ) を付けるか、プラットフォームに応じて異なることを行うように適応させます。

#! /bin/sh

####  Fixup $APPNAME.desktop.
APPNAME=xvscatter
ICONNAME=xv_logo.png

cd $(dirname "$0")
APPDIR="$PWD/$APPNAME"
EXEC="$APPDIR/$APPNAME"
ICON="$APPDIR/$ICONNAME"

sed -i -e "s@^Icon=.*@Icon=$ICON@" \
    -e "s@^Exec.*@Exec=$EXEC@"  "$APPNAME.desktop"

* freedesktopの慣例では、$HOME/.icons、/usr/share/icons、または /usr/share/pixmaps にアイコンを配置します。これらのディレクトリの下には、さまざまなアイコン サイズとタイプのサブディレクトリがあります。これらのディレクトリの 1 つを使用してアイコンを保存すると、デスクトップ ファイルにはアイコン名のみ (ディレクトリなし) がリストされます。それ以外の場合は、ファイルへのフル パスを記録します。

パスにある場合、実行可能ファイルはパス名なしでリストできます (安全ではありません)。フルパスをリストすることをお勧めします。フルパスが指定されていないために間違ったプログラムが起動されることを想像してみてください。

もう 1 つの可能性は、デスクトップ ファイルをユーザーのデスクトップまたは/usr/share/applicationsにコピーし、そこで編集することです。プログラムが読み取り専用メディア上にある場合は、これを行ってください。

上記のいずれも真のインストールにはならないため、可能であれば、プラットフォームのネイティブ インストーラーとパッケージング ツール (rpm、dep、portage など) を使用してください。これらのツールは、適切なファイル許可 (selinux を考えてください) とデスクトップ メニューを含む完全なインストールのためのフレームワークを提供します。また、簡単なアンインストールも提供します。

プログラムをリムーバブル メディアから実行する必要がある場合は、/opt/vendor/progname へのシンボリック リンクをインストールするためだけにシステム インストールを使用することを検討してください。

于 2010-10-07T06:02:42.800 に答える