Crie um script de exemplo que inicialize na interface gráfica, para testar o início automático na inicialização

1

Estou trabalhando em um servidor Debian Linux (AWS EC2) e tenho um software que precisa ser executado em um ambiente gráfico.

Se eu iniciá-lo manualmente (digitando ./program.sh em seu diretório) está funcionando bem: eu posso mudar para uma janela vncviewer (é um servidor em nuvem que eu estou controlando remotamente) eu posso ver o programa de partida. o valor $DISPLAY é definido no momento da inicialização para :1.0

No entanto, se eu tentar que meu program.sh seja executado no momento da inicialização, criando um script init.d , não vejo nada acontecendo no ambiente gráfico.

Eu tentei ler o log do meu programa, mas não consegui encontrar nada conclusivo.

Acho que há um problema com a variável DISPLAY ou com a permissão xhosts, mas como o software que estou executando é um pouco intricado (com credenciais de login, etc), é difícil para mim encontrar o problema

É por isso que eu gostaria de recorrer à criação de um script simples " hello_world.sh " que apenas abriria uma janela simples no env gráfico, para testar o que acontece quando iniciar manualmente e com o boot start.

Alguém pode me dar esse roteiro? Sua funcionalidade deve ser basicamente: digite ./hello_world.sh em um shell - > veja uma janela se abrindo no ambiente gráfico. O objetivo seria testar como esse script simples se comportaria se eu criasse um script de inicialização init.d para ele.

Como um entrevistado solicitou os detalhes do meu arquivo init.d não funcional atual, aqui está:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          IBController
# Required-Start:    $remote_fs $syslog +vncserver
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/opt/IBController"
cmd="./IBControllerGatewayStart.sh"
user="depot"

name='basename $0'
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps -p 'get_pid' > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        xhost local:depot
    export DISPLAY=:2.0
        cd "$dir"
        if [ -z "$user" ]; then
            sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
        else
            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill 'get_pid'
        for i in 1 2 3 4 5 6 7 8 9 10
        # for i in 'seq 10'
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0
    
por jim basquiat 17.11.2017 / 14:48

1 resposta

0

O ambiente de área de trabalho é carregado depois que user fez login. Portanto, init.d não funcionará porque não haverá Xserver em execução.

Antes de tentar abaixo da solução alternativa, você também terá que configurar Debian para se autologar no user especificado, de modo que a GUI seja carregada.

Crie um arquivo program.desktop dentro deste diretório /home/$user/.config/autostart/ . Crie o diretório, se não existir.

program.desktop

[Desktop Entry]
Type=Application
Exec=program.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Porgram
Comment=Program Description

Existem algumas questões relacionadas, dê uma olhada nelas também.

por 17.11.2017 / 17:50