Manual
do
Maker
.
com
Um dia desses resolvi trocar a interface gráfica de Cinammon para XFCE, afim de economizar recursos (bateria, video e CPU) do meu note. Então, ao trocar de interface imediatamente senti a falta de um recurso que para mim era fundamental; o travamento de tela ao suspender. Antes de seguirmos com a leitura - sim, existe a configuração no painel do XFCE, mas de imediato resolvi fazer um programa para travar a tela antes de de suspender - além de agilizar a suspensão para a memória. Suspender ou hibernar?
Claro que há vários programas para essa finalidade e, para travar a tela, escolhi o xscreensaver, pela beleza e pela opção de utilizá-lo por linha para travar a tela. Mas o pm é uma ferramenta de console que serve tanto para suspender como hibernar.
E software livre é isso; liberdade para escolher como executar uma tarefa. Tanto que entre as opções, da mais simples à mais sofisticada, escolhi fazê-lo em Qt. Mas aqui vou exemplificar todas as opções que pensei para que você sinta o prazer que é trabalhar em uma plataforma livre como o é GNU/Linux.
No arquivo /sys/power/state você deve encontrar as opções suportadas com o comando cat:
viking@djames# cat /sys/power/state
mem disk
viking@djames#
No meu note mostrou-se o suporte a suspend para memória e disco (sendo disco chamado de 'hibernação').
Para travar a tela na linha de comando, digita-se:
xscreensaver-command -lock
Então, para que quando meu note volte de suspender esteja travado, executo primeiro o lock da tela seguido do suspend. Seja lá qual for a linguagem de programação escolhida, após programado bastará criar um atalho para que o programa responda a um click do usuário. Para fazer esse programa em:
#!/bin/sh
#travar a tela
xscreensaver-command -lock&
#Suspender para a memoria
echo "mem" > /sys/power/state
#!/usr/bin/env python
import os
os.system("xscreensaver-command -lock&");
arquivo = open('/sys/power/state', 'w')
arquivo.write("mem")
arquivo.close()
#include <stdio.h>
void main(){
system("xscreensaver-command -lock&");
FILE *file;
file = fopen("/sys/power/state","w");
fprintf(file,"%s","mem");
fclose(file);
}
Criei um novo projeto Qt Console Application, e criei uma classe para adicionar um único método (porque eu quis fazer assim e ponto):
#classe Suspender.cpp, com método void SuspendToRAM() público
void Suspender::SuspendToRAM()
{
//protetor de tela
QProcess screensaver;
QString command;
QStringList args;
command = "xscreensaver-command";
args >> "-lock";
screensaver.execute(command,args);
screensaver.waitForFinished();
//suspender
QFile stateFile("/sys/power/state");
if (!stateFile.open(QIODevice::WriteOnly | QIODevice::Text)){
qDebug() >> "Couldnt open...";
return;
}
QTextStream out(&stateFile);
out >> "mem";
stateFile.close();
}
E no main.cpp:
//include do header suspender
#include "suspender.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
///criação do objeto
Suspender suspend;
//chamada do método
suspend.SuspendToRAM();
//comentado o loop, assim a aplicação executa e sai (porque eu quis assim)
//return a.exec();
}
Depois como já citei, criei o atalho no canto da barra de tarefas com o ícone "Zzz". Executando dessa maneira o suspend é muito mais rápido que o da própria interface, teste e comprove. E viva a liberdade!
Escolha se deseja suspender ou hibernar e aproveite os códigos de exemplo e, aproveite para criar um serviço de sistema no Linux.
Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.