.sh arquivo em aplicativos de inicialização não é executado

2

Este é um acompanhamento para uma pergunta sobre caixas de diálogo .

Eu quero mostrar uma caixa de diálogo no início de uma sessão e depois de n minutos de inatividade. Eu decidi usar zenity e xautolock . Eu tenho sucesso invocando ambos da linha de comando (bash).

zenity --text=text --warning
xautolock -time 15 -locker "zenity --text=sometext --warning"

No entanto, existem algumas restrições:

  • O texto tem várias palavras. Se houver espaços, zenity mostrará apenas a primeira palavra e tentará analisar as outras palavras como parâmetros. Para corrigir isso, coloco o texto entre aspas duplas ( " ), mas isso leva a:
  • xautolock recebe o comando zenity inteiro como uma opção para o parâmetro -locker . O comando tem várias palavras, então tenho que incluí-lo entre aspas. Mas já tinha citações originalmente, por isso conflita em citações dentro de citações.
  • Quero que o texto de alerta seja personalizável, por isso estou usando --text="$(cat .filename)" .

Agora, o que eu tenho é:

zenity --text="$(cat .filename)" --warning
xautolock -time 15 -locker "zenity --text=\"$(cat .filename)\" --warning"

Se eu executar cada linha separadamente em uma sessão de terminal (bash), elas funcionarão . O cursor fica paralisado esperando o processo terminar, mas as caixas de diálogo são exibidas da maneira que eu preciso.

Agora preciso que ele seja iniciado automaticamente sem intervenção do usuário. O que eu fiz:

  • Eu coloquei cada linha separadamente na lista Aplicações de inicialização . Em vez de mostrar o texto desejado, eles mostrarão $ (cat na caixa de diálogo.
  • Eu criei um arquivo command.sh na minha pasta ~ , colei essas duas linhas, tornei-a executável.
  • A execução do script a partir da linha de comando funciona.
  • Colocar ~/command.sh como uma entrada no Startup Applications não funciona . Nada acontece, nada é exibido, nenhuma mensagem de erro, nada. De acordo com esta resposta , deve funcionar .
  • Colocar /home/username/command.sh funciona, mas esse usuário é apenas um "skel" que é copiado para uma pasta de usuário convidado criada no login, portanto, a pasta de nome de usuário será "guest-RANDOMSTRING" e não posso definir como entrada de aplicativos de inicialização. Por motivos de permissão, também não posso entrar no usuário "skel".
por That Brazilian Guy 15.08.2014 / 19:44

2 respostas

2

Acontece que cada entrada na lista de aplicativos de inicialização é criada como um arquivo .desktop em ~/.config/autostart$ .

Como mencionado por ambas as respostas @ muru e uma resposta sobre a questão que ele vinculou , .desktop arquivos não expandem o til como o shell faria. Nem eles parecem ter a variável $ {HOME}.

A solução foi adicionar a seguinte linha ao arquivo ~/.pam_environment :

PATH DEFAULT=${PATH}:${HOME}/scripts

Em seguida, coloque meu script .sh na pasta ~/scripts e adicione script.sh , sem prefixos, à lista de aplicativos de inicialização.

    
por That Brazilian Guy 16.08.2014 / 19:42
2

Tente colocá-los em um script e adicionar esse script como a entrada em seus aplicativos de inicialização. É bastante difícil usar variáveis de ambiente e ~ em arquivos da área de trabalho, sem falar na substituição completa de comandos, como evidenciado por Os arquivos da área de trabalho não parecem usar o $ PATH corretamente e Como incluir o ambiente Variável no lançador para o ícone .

    
por muru 15.08.2014 / 23:03