Como executar um desligamento com o comando timer e screensaver em um script

3

Eu fiz este script quando executado irá desligar o meu sistema (depois de algum tempo) e deve ativar um protetor de tela.

#!/bin/bash
sudo shutdown -h +30
gnome-screensaver-command -a

Existem basicamente dois problemas neste script.

  1. Ele pede senha (que eu não quero)
  2. Depois de executar sudo shutdown -h +30 , ele não está executando gnome-screensaver-command -a

isto é, ativa o desligamento, mas não o protetor de tela

Como resolver esses problemas?

    
por Eka 18.05.2015 / 20:22

2 respostas

6

Solução para o problema 1 e 2:

  1. Você precisa editar o arquivo /etc/sudoers ( sudo visudo ) para adicionar a entrada relevante para conceder a permissão sudo sem senha para o usuário executar este script (não o comando shutdown ):

    foo spamegg = (root) NOPASSWD: /path/to/script.sh
    

    Aqui foo é o nome de usuário, spamegg é o nome do host, substitua /path/to/script.sh de acordo. Agora execute o comando como (torne o script executável):

    sudo /path/to/script.sh
    

    Observe que o comando gnome-screensaver-command -a também será executado como root , se você não quiser que você precise conceder permissão para o comando sudo shutdown sem senha para o usuário:

    foo spamegg = (root) NOPASSWD: /sbin/shutdown
    
  2. O segundo problema se deve ao fato de que, no seu script atual, o gnome-screensaver-command -a será executado somente após a conclusão do comando shutdown . Como o comando shutdown será realmente executado após 30 minutos, portanto, ele está em um estado de bloqueio. Para resolver isso, você pode colocar o comando shutdown em segundo plano:

    shutdown -h +30 &
    gnome-screensaver-command -a
    

Em poucas palavras, você pode criar o script da seguinte forma:

#!/bin/bash
shutdown -h +30 &
gnome-screensaver-command -a

Execute como:

sudo /path/to/script.sh

Antes de usar sudo , armazene o script em um local seguro, ele deve estar acessível apenas a você e você deve ter certeza do conteúdo do script.

    
por heemayl 18.05.2015 / 21:19
2

Quando você tem dois comandos em duas linhas separadas de um script de shell, o segundo só será executado quando o primeiro terminar. Para evitar isso, você precisa adicionar um & ao final do primeiro comando para executá-lo em segundo plano:

#!/bin/bash
sudo shutdown -h +30 &
gnome-screensaver-command -a

Quanto a não solicitar a senha, você precisará informar sudo de que seu usuário tem o direito de executar /sbin/shutdown sem senha. Execute sudo visudo e adicione essa linha a /etc/sudoers :

eka  ALL=NOPASSWD:/usr/sbin/shutdown

Altere eka para qualquer nome de usuário. Salve o arquivo e você poderá executar sudo shutdown sem solicitar uma senha.

    
por terdon 18.05.2015 / 21:20