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
하지만 컴퓨터를 다시 시작하면 응용 프로그램이 시작되지 않습니다.
저는 두 가지 문제를 확인했습니다.
응용 프로그램을 시작하려고 할 때
~/
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
따라서 이제 스크립트는 실행해야 하는 모든 파일을 올바르게 찾고, 적용하려면 재부팅하는 동안 실행되어야 합니다.