Iniciar script no logon

1

Eu entendo que o shell executa comandos em ~ / .bash_profile, ~ / .bash_login ou ~ / .profile, o que for encontrado primeiro. Meu sistema tem apenas .profile, mas os comandos digitados lá não serão executados na inicialização / login.

O script do qual estou falando é essencialmente um gerenciador de listas front-end / TO-DO do cron. Quando o usuário efetua login (como no usuário obtém acesso aos seus arquivos pessoais / efetua login em sua conta), o script deve ser executado, verificando se há alguma tarefa que não tenha sido lembrada. Se encontrar algum, o prompt zenity será exibido, perguntando a próxima entrada.

    
por laur 10.12.2012 / 23:45

2 respostas

1

Ok, encontrei uma solução para o meu problema inicial. Mas está sujo.

Antes de mais nada, use ~/.bash_profile , ~/.bash_login , ~/.profile ou mesmo /etc/profile.d/ como métodos preferidos (aqui está uma boa leitura sobre o assunto) . Não sei porque não funciona para mim; talvez tenha algo a ver com a solução alternativa de logon automático do gerenciador de exibição, apenas um palpite.

Outra solução seria adicionar atalhos de script ao arquivo global executado na inicialização, por exemplo /etc/rc.local .

Como meu script requer que o xserver e o usuário façam logon , criei o initfile que aguarda a inicialização do xserver e do usuário para efetuar logon e, em seguida, executa o script:

#! /bin/bash

### BEGIN INIT INFO
# Provides:          script_file.sh startup at boot
# Required-Start:    $all
# Required-Stop:
# X-Start-Before:    
# Default-Start:     2 3 4 5
# Default-Stop:
# Description: runs '/usr/local/bin/script_file.sh --optional --flags' at startup, when xserver has started and YOURUSERNAME is logged on.
### END INIT INFO

case "$1" in
    start)
        # Wait until X is running and required user logged in:
        count=0
        until [[ "$(tty)" != "\/dev\/tty1" ]] && [[ "$(who | cut -d' ' -f1 | sort | uniq)" == "YOURUSERNAME" ]]; do
            sleep 5
            let count=$count+1
            if [[ "$count" == "10" ]]; then
                echo "Xserver hasn't started or other error occurred. Abort"; exit 1
            fi
        done
        # Run the script as YOURUSERNAME instead of root:
        su - YOURUSERNAME -c '/usr/local/bin/script_file.sh --optional --flags'
    ;;
    stop)
        :
    ;;
esac
exit 0

Essa eliminação de alma pressupõe a configuração automática do logon. Como mencionado, realmente não é a maneira de fazer isso, mas funciona por enquanto.

    
por 26.12.2012 / 06:04
2

Primeiro, crie seu ~/.bash_login e faça algo simples (como echo a frase).

echo "echo Look at me go" > ~/.bash_login

Em seguida, use bash -l como @mata disse. O -l flag irá executar o bash como se fosse o shell de login (para ter certeza de que ele lê seus arquivos de configurações).

    
por 11.12.2012 / 00:20