shutdown de maneira específica, se ninguém usar o computador

3

Eu tenho problema porque meus amigos com quem moro frequentemente esquecem de desligar o computador. Não sei como a solução é usada para fingir. Existe o sistema Ubuntu instalado.

Eu estou procurando solução que o usuário será forçado a clicar e confirmar (uma vez por hora) que alguém usa o computador. Se ele não fizer isso, o computador deve desligar automaticamente.

Existe alguma solução para este problema?

    
por greg 01.05.2012 / 17:00

4 respostas

3

Esse é um script de trabalho do que você quer fazer:

#!/bin/bash
while true; do
   sleep 59m
   zenity --question --text "Are you using the pc (click anything)?"&
   zenity_id=$!
   #the user has 1 minute to answer, otherwise PC will shut down
   sleep 1m
   if kill $zenity_id 2> /dev/null; then 
      #zenity was still running, shutdown the pc
      dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
   fi
done

A cada hora, ele exibe um pop-up perguntando 'Você ainda está aqui?', se o usuário clicar em algo, ele não será desligado por mais uma hora (em uma hora, o pop-up é mostrado novamente ), mas se passar mais de 1 minuto sem interação com o diálogo, o PC desligará automaticamente. Para iniciá-lo na inicialização, crie um arquivo com o código acima e torne-o executável (clique com o botão direito- > propriedades- > permissões- > permitir a execução do arquivo como programa) e clique no botão liga / desliga no canto superior direito sua tela, selecione os aplicativos de inicialização e adicione esse script.

    
por hytromo 01.05.2012 / 17:26
5

Uma maneira de fazer isso é emular uma pressão no botão liga / desliga. Em seguida, a seguinte caixa de diálogo será exibida e desligará o computador após 60 segundos.

Parafazerisso,useacpi_fakekey116,queirá"pressionar" o botão de desligamento (número 116). (Pelo menos 116 é o meu botão de desligamento. Se falhar em sua máquina, tente instalar evtest e executá-lo enquanto você pressiona o botão)

Para automatizar isso a cada hora, adicione-o ao root crontab assim:

sudo crontab -e e adicione a seguinte linha:

0 * * * * /usr/bin/acpi_fakekey 116

Isso pressionará o botão no 0º minuto de cada hora de cada dia de cada semana de cada mês.

    
por Egil 01.05.2012 / 17:14
1

Você poderia escrever um script simples usando o comando shutdown 0 após um aviso.

Devo acrescentar que você pode usar o comando sleep em um loop para perceber a espera.

    
por Honoki 01.05.2012 / 17:02
1

Parece tedioso fazer alguém clicar em um botão a cada intervalo especificado.

Você pode deixar o gnome-screensaver funcionar para você e verificar há quanto tempo ele está sendo executado.

Em um script, você pode fazer algo como o seguinte:

#!/bin/bash

pidof X || exit #not running X!

export DISPLAY=":0" # use current display
DURATION="'gnome-screensaver-command -t | awk '{print $7}''"

if [ $DURATION -gt 3600 ]; then #idle for an hour
  shutdown -h now
fi

Este é um exemplo muito básico que qualquer pessoa poderia expandir. Coloque-o em um cron job ou execute-o em um modo de daemon com chamadas while / sleep.

Eu não o usaria exatamente como está, mas apenas para ilustrar um método. Isso faz a suposição de que estamos usando o gnome-screensaver. O xscreensaver tem chamadas semelhantes.

    
por papashou 01.05.2012 / 21:05