Desligando o Linux com o botão Power do Computador
Essa já não é novidade nenhuma e eu tenho plena certeza de que há mais meios de configurar esta tarefa porém nenhuma mais POG do que esta.
Na realidade não tão POG, pois o nosso amigo Gnome utiliza-se da mesma técnica que o Paulo Matias usou para realizar esta simples tarefa. Então vamos à grande explicação com um pouco de história.
Estava eu, sentado na frente do computador, quando tive a brilhante idéia de que meu Linux não tinha algum monitor do botão de power, e sempre conversando com o Paulo via Jabber ou IRC terminei falando pra ele, pois num teste recente pude conferir que o FreeBSD já vinha com essa opção ativada por padrão.
O que me assustou foi que ele já veio falando todos os métodos de como montar a tal e já tendo em mente todas as possíveis linguagens de programação (na mente dele Python e C) logo pensando no quesito de que o arquivo iria ficar aberto pelo tempo que o computador ficasse ligado, o Paulo levou em consideração criar o programa na linguagem C.
A técnica se baseia em ter um arquivo aberto sendo lido sempre para que quando você apertar o botão de liga/desliga do computador (não o do teclado) o mesmo acesse o arquivo e desligue o computador.
Eu realizei os testes no meu Archlinux, e como o Paulo também usa Archlinux, tudo ocorreu como esperado, vamos então a instalação e configuração de tal script.
A instalação dá-se de maneira bem simples, copie e cole o código abaixo em um arquivo com nome de acpi-power-button-monitor.c em qualquer lugar de seu computador (no meu caso eu copiei na ~/).
acpi-power-button-monitor.c
/* ACPI power button monitor.
* Copyright (c) 2008 Paulo Matias
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main() {
static char buf[128];
FILE *fp;
assert((fp = fopen("/proc/acpi/event", "r")));
while(1) {
fgets(buf, sizeof(buf), fp);
if(!strcmp(strtok(buf, " "), "button/power")) {
system("halt");
break;
}
}
fclose(fp);
return 0;
}
Depois só precisamos compilar o código com o seguinte comando:
$ gcc -Os acpi-power-button-monitor.c -o acpi-power-button-monitor
E então copiar o arquivo compilado (programa já pronto para execução) para a pasta padrão dos programas da sua distribuição Linux. No caso do Archlinux esta pasta fica em /usr/bin:
# mv acpi-power-button-monitor /usr/bin
# chmod 755 /usr/bin/acpi-power-button-monitor
E depois também precisamos chamar este programa na inicialização do Linux, modificando no arquivo /etc/rc.local no caso do Archlinux:
# vi /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: Local multi-user startup script.
#
/usr/bin/acpi-power-button-monitor &
Com o programa sendo inicializado juntamente com o Linux, podemos então simplesmente testá-lo a partir da próxima vez que ligarmos o computador.
Lembrando que o mesmo consome 380Bytes de memória ram, irrisório para os computadores de hoje.
Obrigado e até a próxima.
2 Comentários »
Deixe um comentário
About
Leandro Pincini:
Quase formado Tecnólogo em Processamento de Dados pela Faculdade de Tecnologia (FATEC) de Taquaritinga. Sim, estou naquela faze chata de final de curso em que temos que escrever nossas monografias.
Áreas de interesse:
Arch Linux, Programação (Java, Python, Ruby), Tecnologia.
Já tentaram olhar o /etc/acpi.d?? Algo por ai? Tem um script lá que faz “isso”
Ele dá um case e tu só pega o case button/halt e executa o comando :)
Bem melhor
Na realidade , assim como foi postado há várias maneiras de se resolver isso, até com o apm, que já é uma daemon especializada para monitorar esses recursos.
Abraço.