Script Para o Desligamento do Sistema

Publicado por Leandro Santiago 28/02/2007

[ Hits: 6.028 ]

Homepage: http://leandrosan.wordpress.com

Download acpi_handler.sh




Essa é uma segunda versão de um script que eu escrevi para essa dica:
"Desligando o seu computador com o dedão do pé"(http://www.vivaolinux.com.br/dicas/verDica.php?codigo=793)

A "instalação" dele é a mesma descrita na dica.

Desculpem-me pelo script estar mal-comentado, ou não haver um ToDo, Changelog, ou coisa do tipo.. rsrs

  



Esconder código-fonte

#!/bin/bash

######################################################################################################################
## Script escrito por: Leandro Santiago da Silva ##
## e-mail: leandrosansilva@gmail.com             ##
## 21/01/2007 Maringá/PR Brasil                  ##

## O que esse script realmente faz?
## Ele serve para você fazer um desligamento seguro do seu computador quando você aperta o botão de desligar do gabinete
## Os metodos usados são pelo modo texto mesmo e pelo KDM (por enquanto...),
## mas não há nada que impeça que você adicione funções para outros ambientes gráficos ou gerenciadores de login.
## Para isso, copie este script para a pasta /etc/acpi, com o nome de acpi_handler.sh e dê permissão de execução à ele

## Depois, abra o arquivo o arquivo /etc/acpi/events/default
## E vá até a linha 17 e a deixe assim:
## event=button power.* 

## Nota: Isso tudo dará certo se você já estiver usando o acpid sem problemas.

## Reinicie o computador e voiala...

######################################################################################################################

# Algumas definições importantes:
  Cliente_Grafico='kdm'
  KDEDIR=/opt/kde/
   
## Função usada para fazer o desligamento normal. Aquele que vem por padrão, entende?
## No caso, executo o comando init 0, que entra no runlevel 0 do init, que faz o computador desligar.
DesligarConsole()
{
   /sbin/init 0   
}


# Função que faz a verificação se o usuário (recebido como índice 1) está ou não no KDE. 
# Se sim, aparece o diálogo de desligamento para ele.
DesligarGrafico() 
{
   # Esta função recebe três parâmetros, que são:
   # 1: Um login (nome de usuário)
   # 2: Um comando de desligamento
   # 3: O nome da sessão que o usuário está usando (default,kde,wmaker,enlightenment,etc)
   
   # Se estiver usando o KDE faz o que tem que fazer, 
   # senão, faz um outro tipo de desligamento, que no caso abaixo é via kdialog

   echo "${3}" | egrep '(kde|default)' && su - "${1}" -c "${2}" || (  su - "${1}" -c  "export DISPLAY=${4} ; $KDEDIR/bin/kdialog --error 'Ainda não Implementado' & " ) #DesligarConsole 
   
   return 0
}

# Função que realiza o processo de verificação se os usuários estão logados via terminal gráficos (não console nem screen).
# A verificação é feita usuário por usuário
function DesligarUsuarios
{
   # Inicializo a variável que irá representar cada usuário, num dado momento
   Usuario=1

   # Vetor que guarda todos os usuários logados no computador, com algumas informações a mais (digite "kdmctl list" para ver quais)
   KDMLIST=(`$KDEDIR/bin/kdmctl list`)

   # O While abaixo funciona assim:
   # Enquanto o usuário verificado estiver numa sessão gráfica, faça o processo de questionamento sobre o desligamento para ele,
   # e incremente a variável $Usuario, para que façamos a verificação do próximo.
   while echo ${KDMLIST[$Usuario]} | cut -f1 -d, | egrep -v '(tty|pts)' && [ "`echo ${KDMLIST[$Usuario]}`" != "" ]
   do
      UsuarioGrafico=$(echo ${KDMLIST[$Usuario]} | cut -f3 -d,)
      HaltDisplay=$(echo ${KDMLIST[$Usuario]} | cut -f1 -d,)
      HaltCommand="export DISPLAY=$HaltDisplay; $KDEDIR/bin/dcop kdesktop KDesktopIface logout"
      UserSessao="`echo ${KDMLIST[$Usuario]} | cut -f4 -d,`"
      DesligarGrafico "${UsuarioGrafico}" "${HaltCommand}" "${UserSessao}" "${HaltDisplay}"
      # Incremento Usuario, para poder analisar o próximo (e para o while funcionar)
      ((Usuario++)) 
   done
   
   # Quando terminar, eu verifico se eu fiz com sucesso a verificação para algum usuário. 
   # Se não fiz (que significa que não há ninguém com uma sessão gráfica, via KDM), 
   # aí eu faço o desligamento antigo (sem perguntar)
   if [ $Usuario -eq  1 ]
   then 
      DesligarConsole
   fi
   return 0
}   
         
# A função a seguir diz que se o KDM  estiver em execução, é executado o desligamento gráfico, 
# senão é utilizado o desligamento padrão, em modo texto

PowerProcess()
{
   fuser -vm / 2>&1 | grep $Cliente_Grafico && DesligarUsuarios || DesligarConsole
}   

## Aqui eu faço tudo isso definido acima.
PowerProcess 

## FIM DO SCRIPT ##

Scripts recomendados

Remover e-mails com MX inexistente e status deferred em servidores Postfix

SonyEricson-MD300 funciona

Script para desligamento automático do computador

Pingmon1.0 - Ping Timeout Monitor

Sysinfo 2.1


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts