ログイン時に自動的にアプリケーションを実行する

ログイン時に自動的にアプリケーションを実行する

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つの問題を確認しました。

  1. アプリケーションを起動しようとしたとき~/

    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
    ...
    
  2. 私のアプリケーションは、独自にいくつかのデフォルトディレクトリを設定します。

    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/bashbashを指定するか、あなたの場合はシステムがbashまたは他のものを実行する必要があるかどうか#!/bin/shを判断します。sh
  • client.sh他の場所で実行すると機能しませんが、includeと同じディレクトリから呼び出すと機能し、ファイル名への直接参照がclient.sh表示され、client.shパスを明確にする他のコードはありません。どちらもパスの問題を指します。
  • このようなファイル名を直接参照することは、現在の作業ディレクトリにそのファイルが含まれている場合にのみ機能するため、インクルードclient.shディレクトリで実行されていないときに使用を処理するには、スクリプトがフルパスを決定するのに役立つ追加のコードを追加する必要があります。 。
  • this_dir="$(dirname "$(realpath "$0")")"に基づいてBash - 同じディレクトリのファイル参照$0のフルパスはどこですかclient.shrealpathシンボリックリンクに問題がある場合は、それを解決し、以外のdirnameパスを取得し、インクルードclient.shディレクトリをインポートして保存します。$this_dir
  • $this_dir/client.l4j.ini: スクリプトが正しく検索できるように、ディレクトリ + ファイルが含まれます。client.l4j.ini
  • $this_dir/client.jar: スクリプトが正しく検索できるように、ディレクトリ + ファイルが含まれます。client.jar

したがって、スクリプトは、実行する必要があるすべてのファイルを正しく検索して適用するには、再起動中に実行する必要があります。

関連情報