로그인 시 자동으로 애플리케이션 실행

로그인 시 자동으로 애플리케이션 실행

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

하지만 컴퓨터를 다시 시작하면 응용 프로그램이 시작되지 않습니다.

저는 두 가지 문제를 확인했습니다.

  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.sh? realpath심볼릭 링크 문제가 있으면 해결하고 을 dirname제외한 경로를 가져 client.sh와서 포함 디렉터리를 가져와서 저장합니다.$this_dir
  • $this_dir/client.l4j.ini: 스크립트가 올바르게 찾을 수 있도록 디렉터리 + 파일을 포함합니다.client.l4j.ini
  • $this_dir/client.jar: 스크립트가 올바르게 찾을 수 있도록 디렉터리 + 파일을 포함합니다.client.jar

따라서 이제 스크립트는 실행해야 하는 모든 파일을 올바르게 찾고, 적용하려면 재부팅하는 동안 실행되어야 합니다.

관련 정보