Autostart application on login

1

Eu quero iniciar o aplicativo gui-java na inicialização. Então eu tentei usar

/etc/xdg/autostart/

com meu .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

e cat de client.sh :

#!/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

Mas quando eu reinicio meu computador, o aplicativo não inicia.

Eu determino dois problemas:

  1. Quando tento iniciar o aplicativo de ~/

    debian@debian:~$ sh /home/debian/my/app/2.4.93/client/bin/client.sh
    Error: Unable to access jarfile client.jar
    

    Mas quando eu começo de seu próprio diretório, tudo está ok.

    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. Meu aplicativo definiu um diretório padrão por conta própria.

    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
    

Eu tenho medo de que o aplicativo use outro diretório em vez de definir se iniciar de / etc/xdg/autostart/

Como devo corrigir o início automático da configuração após o login?

    
por Nikolay Kulakov 20.12.2015 / 19:39

1 resposta

0

Mantendo sua configuração existente conforme descrito na sua pergunta, modifique client.sh da seguinte forma:

#!/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"

Salve, então, reinicie o computador, veja se ele agora é iniciado.

Explicação

  • O arquivo /etc/xdg/autostart da área de trabalho parece bem, então é mais provável que o script seja executado, client.sh , é a origem do problema
  • o script client.sh que você postou tinha uma barra invertida extra: \#!/bin/sh , mas normalmente é apenas #!/bin/bash para especificar o bash ou, no seu caso, #!/bin/sh está bom e deixe seu sistema decidir qual sh deve correr, bater ou não.
  • você disse que client.sh não funciona quando executado em outro lugar, mas funciona quando chamado do mesmo diretório que contém client.sh , além de ver client.sh fazer referências a nomes de arquivos diretamente sem outro código esclarecendo caminhos, o que sugere problemas de caminho
  • fazer referência a nomes de arquivos diretamente, pois isso funciona somente quando o diretório de trabalho atual contém esses arquivos; portanto, para lidar com usos quando você não está executando client.sh no diretório que contém, precisamos adicionar código extra para ajudar o script a determinar caminho
  • this_dir="$(dirname "$(realpath "$0")")" é baseado em Bash - consulte um arquivo no mesmo diretório , em que $0 é o caminho completo para client.sh , realpath resolve caso haja problemas de link sym e dirname apenas obtém o caminho, exceto client.sh , obtendo assim o diretório que o contém, salvando-o $this_dir
  • $this_dir/client.l4j.ini : contendo diretório + arquivo, assim o script pode encontrar corretamente client.l4j.ini
  • $this_dir/client.jar : contendo diretório + arquivo, assim o script pode encontrar corretamente client.jar

Portanto, agora que o script pode encontrar corretamente todos os arquivos necessários para execução, e desde que você reinicie para torná-lo efetivo, ele deve ser executado agora.

    
por 21.12.2015 / 01:29

Tags