O método mais eficaz para acionar scripts e comandos durante os processos de suspensão e retomada no Linux, tanto antes de suspender quanto após retomar, é através do sistema de inicialização systemd. Isso se deve à sua interação direta com o kernel e os subsistemas de energia. Dominar essa ferramenta oferece ao usuário um controle substancial sobre o sistema operacional Linux.
É crucial ter em mente que a manipulação do sistema de inicialização pode ser arriscada se não for realizada com o devido conhecimento. Siga as instruções deste guia cuidadosamente para evitar potenciais problemas.
É importante notar que nem todas as distribuições Linux modernas utilizam o systemd como sistema de inicialização. Algumas podem empregar o Upstart ou outras alternativas. Este guia se concentrará no systemd, devido à sua ampla utilização. Se você estiver trabalhando com um sistema que não utiliza o systemd, consulte o manual do seu sistema operacional para obter orientações específicas.
Observação: Usuários do Debian devem substituir todas as ocorrências de `usr/lib/systemd/system-sleep` por `/lib/systemd/system-sleep/`.
Executando um comando antes da suspensão
Para executar um script antes da suspensão, copie um arquivo de script bash para o diretório `/usr/lib/systemd/system-sleep/`. Esses scripts podem realizar diversas ações, mas devem seguir uma sintaxe específica. Comece abrindo um terminal e obtendo privilégios de root com o comando `sudo -s`.
Em seguida, utilize o editor de texto nano para criar um novo script dentro do diretório system-sleep:
nano /usr/lib/systemd/system-sleep/pre-suspend.sh
Adicione o shebang no início do script. Esta etapa é essencial para garantir que o interpretador possa ler e executar o código corretamente.
#!/bin/bash/
A próxima etapa envolve a utilização da estrutura condicional “if”. Ela instruirá o sistema de gerenciamento de energia que, “se” o sistema estiver prestes a ser suspenso, uma ação específica deve ser executada. Insira o código a seguir:
if [ "${1}" == "pre" ]; then sh /caminho/para/o/script/a/ser/executado.sh
Substitua `sh /caminho/para/o/script/a/ser/executado.sh` pelo comando ou script que você deseja executar em seu sistema Linux (seja ele um computador pessoal ou servidor) imediatamente antes da suspensão. É importante notar que a linha seguinte à declaração “if” não precisa ser restrita a um único comando; você pode usar essa linha para executar múltiplos comandos, desde que sejam válidos para o bash.
A última parte do script “antes de suspender” é a inclusão da seção “else if”. Esta seção não necessita de modificação neste exemplo, pois o foco está em realizar uma ação antes da inatividade do sistema, e não quando ele retomar a atividade.
elif [ "${1}" == "post" ]; then # nada aqui fi
Após concluir as modificações no arquivo, salve as alterações pressionando `Ctrl + O`.
Executando um comando após a retomada
A execução de um comando após a retomada segue uma lógica semelhante à execução de um comando antes da suspensão. A diferença principal reside no fato de que a ação a ser executada será posicionada após a seção “elif”, em vez da seção “if”.
Para criar um script de pós-retomada, insira o shebang como a primeira linha:
#!/bin/bash
Na linha seguinte, adicione a seção “if” do script:
if [ "${1}" == "pre" ]; then # nada aqui
Com este bloco de código inserido no script bash, prossiga e cole a seção “else if”:
elif [ "${1}" == "post" ]; then sh /caminho/para/o/script/a/ser/executado.sh fi
Assim como anteriormente, você pode incluir qualquer comando válido sob a linha “elif”. O systemd e o bash se encarregarão da execução.
Executando comandos na suspensão e retomada
Se o objetivo é executar dois comandos opostos – um antes da suspensão e outro na retomada – isso é perfeitamente possível. Para isso, basta personalizar o script e incluir comandos tanto na seção “if” quanto na seção “elif”.
Comece incluindo o shebang no script, para informar ao interpretador que tipo de script é.
#!/bin/bash
Em seguida, adicione a seção “if” do código.
if [ "${1}" == "pre" ]; then # substitua pelo comando
Na seção “if”, substitua “# substitua pelo comando” pelo comando que você deseja executar imediatamente antes da suspensão do sistema. Prossiga para a seção “elif” e realize o mesmo procedimento.
elif [ "${1}" == "post" ]; then # substitua pelo comando fi
Salve o arquivo com `Ctrl + O`.
Atualizando permissões e utilizando o script
Embora todos os comandos necessários estejam presentes no arquivo do script, é preciso atualizar suas permissões antes que ele possa ser executado. Abra um terminal e obtenha acesso root com os comandos `su` ou `sudo -s`. Em seguida, execute o seguinte comando:
chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh
A partir deste ponto, sempre que o sistema for suspenso ou retomado, os comandos personalizados no script deverão ser executados.
Observação: Se tiver dúvidas sobre systemd system-sleep, consulte o manual com o comando `man systemd-suspend.service`.