Como posso automatizar uma tarefa em um determinado evento?

2

Playonlinux e WINE são ótimos. Finalmente eu posso ter meus jogos favoritos e as alegrias do Linux sem ter dual-boot ou preenchendo meu disco com lixo do Windows! Mas alguns são bem antigos e só funcionam com resoluções mais baixas. Felizmente, mantenho um emulador de terminal aberto e faço apenas xrandr -s 1366x768 . Às vezes é difícil: em 800x600 não consigo rolar para baixo nem ver o que estou escrevendo. E eu sei exatamente os processos que mudam a resolução. Isso me fez pensar: posso automatizá-lo?

Eu sei que com crontab posso executar tarefas por algumas horas ou na inicialização. Mas e quanto ao agendamento para quando algum script específico é executado ou termina? Ou mesmo quando o sistema fica preso, para matar o processo culpado? Como posso agendar tarefas para qualquer evento? Preciso de outro programa?

Obrigado antecipadamente,

    
por JMCF125 02.11.2013 / 20:31

2 respostas

1

Embrulhe o script em um script de shell e execute o script de shell.

#!/bin/bash

### xrandr command to set display size downsized
xrandr -s 800x600

... run program ...

### xrandr command to reset display back to normal size
xrandr -s 1366x768
    
por 02.11.2013 / 20:48
1

Você pode executar vários scripts juntos ao executá-los.

, por exemplo: Se você quiser fazer o desligamento do sistema depois que o sistema terminar de atualizar, será possível executar os dois juntos usando um ; entre eles. Gostar sudo apt-get update; sudo poweroff

Da mesma forma, no seu caso, ao invocar o programa de vinhos, você pode executá-los através do terminal ou escrever um script de shell para fazer o mesmo que executa algo como:

xrandr -s 800x600; path/to/program -parameters; xrandr -s 1366x768

Assim que seu programa terminar (e não retornar nenhum erro como seu código de saída), o terminal deverá executar o código final do seu script acima. Você não precisa da primeira parte do código acima se o seu programa alterar automaticamente a resolução para 800x600.

Edit: Como apontado por @slm, use ; ao invés de && , pois se um dos comandos retornar false, o resto dos comandos não serão executados. Corrigido minha resposta de acordo.

    
por 02.11.2013 / 21:06