gui-java
起動時にアプリケーションを起動したいです。だから試してみました。
/etc/xdg/autostart/
my.desktopへ
debian@debian:~$ cat /etc/xdg/autostart/alclient.desktop
[Desktop Entry]
Name=ALClient
GenericName=ALClientt
Comment=ALClient
Exec=/home/debian/my/app/2.4.93/client/bin/client.sh
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
そして猫~のクライアントスクリプト:
#!/bin/sh
OPTIONS=
if [ -f client.l4j.ini ] ; then
OPTIONS=$(grep -v '^#' client.l4j.ini | tr -d "\r" | tr "\n" " ")
fi
java $OPTIONS -jar client.jar
ただし、コンピュータを再起動するとアプリケーションは起動しません。
私は2つの問題を確認しました。
アプリケーションを起動しようとしたとき
~/
debian@debian:~$ sh /home/debian/my/app/2.4.93/client/bin/client.sh Error: Unable to access jarfile client.jar
しかし、独自のディレクトリから起動すると、すべてが正常です。
debian@debian:~/my/app/2.4.93/client/bin$ sh /home/debian/my/app/2.4.93/client/bin/client.sh Dec 20, 2015 9:25:12 PM checkJVMVersion WARNING: Run only with jre 1.8 ...
私のアプリケーションは、独自にいくつかのデフォルトディレクトリを設定します。
Home Directory = /home/debian/my/app/2.4.93/client Data Directory = /home/debian/my/app/2.4.93/client/data Logs Directory = /home/debian/my/app/2.4.93/client/logs Config Directory = /home/debian/my/app/2.4.93/client/conf Locale Directory = /home/debian/my/app/2.4.93/client/locale
アプリケーションが/で起動するかどうかを定義する以外の別のディレクトリを使用するかどうか心配です。etc/xdg/autostart/
ログイン後に自動的に起動するように設定を変更するにはどうすればよいですか?
答え1
質問の説明に従って、既存の設定を維持し、client.sh
次のように修正します。
#!/bin/sh
OPTIONS=
this_dir="$(dirname "$(realpath "$0")")"
if [ -f "$this_dir/client.l4j.ini" ] ; then
OPTIONS=$(grep -v '^#' "$this_dir/client.l4j.ini" | tr -d "\r" | tr "\n" " ")
fi
java $OPTIONS -jar "$this_dir/client.jar"
保存してコンピュータを再起動し、今すぐ起動していることを確認してください。
説明する
/etc/xdg/autostart
デスクトップファイルは大丈夫に見えるため、実行されるスクリプトがclient.sh
問題の原因である可能性が高くなります。- 公開したスクリプト
client.sh
には追加のバックスラッシュがありますが、\#!/bin/sh
通常は#!/bin/bash
bashを指定するか、あなたの場合はシステムがbashまたは他のものを実行する必要があるかどうか#!/bin/sh
を判断します。sh
client.sh
他の場所で実行すると機能しませんが、includeと同じディレクトリから呼び出すと機能し、ファイル名への直接参照がclient.sh
表示され、client.sh
パスを明確にする他のコードはありません。どちらもパスの問題を指します。- このようなファイル名を直接参照することは、現在の作業ディレクトリにそのファイルが含まれている場合にのみ機能するため、インクルード
client.sh
ディレクトリで実行されていないときに使用を処理するには、スクリプトがフルパスを決定するのに役立つ追加のコードを追加する必要があります。 。 this_dir="$(dirname "$(realpath "$0")")"
に基づいてBash - 同じディレクトリのファイル参照$0
のフルパスはどこですかclient.sh
?realpath
シンボリックリンクに問題がある場合は、それを解決し、以外のdirname
パスを取得し、インクルードclient.sh
ディレクトリをインポートして保存します。$this_dir
$this_dir/client.l4j.ini
: スクリプトが正しく検索できるように、ディレクトリ + ファイルが含まれます。client.l4j.ini
$this_dir/client.jar
: スクリプトが正しく検索できるように、ディレクトリ + ファイルが含まれます。client.jar
したがって、スクリプトは、実行する必要があるすべてのファイルを正しく検索して適用するには、再起動中に実行する必要があります。