Modificando um Shell Script com Zenity.. Os scripts já estão funcionando bem. [RESOLVIDO]

1. Modificando um Shell Script com Zenity.. Os scripts já estão funcionando bem. [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 08/12/2018 - 19:05h

Boa noite, estou modificando e traduzindo um Shell Script com Zenity para trocar a "energia" usada pelo processador, "governor".

Na realidade, estou traduzindo, modificando e ampliando o Script de GILMOREJA, Flórida USA,

https://bbs.archlinux.org/viewtopic.php?id=192774

Claro que vou citar, depois, ao publicar.

Para não confundir a galera, estou removendo minhas respostas mais antigas... deixando apenas o script "quase bom".....

P




  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/12/2018 - 16:13h


albfneto escreveu:

@ MSOliver

Olha, funcionou usando parte do seu código, o INTROD para e escolher,
e com sed também, mas simplificado em relação ao seu,
simples mostrei as primeiras 37 o38 linhas, que são a introdução, na tela do zenith:


INTROD=$(zenity --list --text "Deseja Ver a introdução do TROCAGOV??" --radiolist --column "" --column "Opções" false "Sim" false "Não" 2>/dev/null)

if [ "$INTROD" = "Sim" ] ; then

# Mostra a Introdução que se encontra nos comentários do script:

sed -n 1,38p $0 | zenity title="Introdução" --text-info --width 640 --height 640

else
zenity --error --title="Não Ver Introdução" --text="Você clicou para pular a Introdução\!"
fi


tá exibindo no Zenity como eu queria.

Script atual completo que modifiquei, tá assim:


#!/bin/bash

# Este Script roda em Linux com Zenity, para trocar o governor,
# modifica a frequência e a energia usada pelos processadores.

# Por albfneto <albfneto@fcfrp.usp.br>:
# https://www.vivaolinux.com.br/~albfneto">https://www.vivaolinux.com.br/~albfneto
# e
# msoliver:
# https://www.vivaolinux.com.br/~msoliver">https://www.vivaolinux.com.br/~msoliver

# Site "Viva o Linux"
# https://www.vivaolinux.com.br

# Versão 3.8 (2018).

# Licença: GPL, Livre para baixar, usar, modificar, citando a autoria.
#######################################################################

# INTRODUÇÃO:

# idéia inspirada por antigos Scripts que usavam CPUfreq e Dialog:
# https://www.vivaolinux.com.br/script/cpufreqselector-em-Dialog-Centrino-frequencia
# https://pastebin.com/3PikpU8v
# https://www.thelinuxrain.com/articles/a-script-to-toggle-cpu-performance-governor
# https://meganerd.ca/site/node/45

# Os Linux modernos não usam mais CPUFreq e sim CPUPower:
# https://www.vivaolinux.com.br/dica/Regulando-velocidade-e-energia-gasta-pelos-processadores-Metodo-moderno-cpupower


# Shell Script com Zenity, baseado, traduzido e Modificado do Script original de GILMOREJA, EUA:
# https://bbs.archlinux.org/viewtopic.php?id=192774
# http://www.deskdr.com/dr/new-to-bash-scripting-making-script-to-change-laptop-cpu-governor.html


# Observação: Instale o pacote Zenity na sua Distribuição, caso não esteja instalado.


# Corpo do Script:

# Checar se rodando como Root:

(($UID != 0)) && { zenity --timeout="5" --warning --text '<span foreground="red" font="16">Exige Root\nLogue com o \"root\"\nOu\nUso: sudo $0</span>' 2>/dev/null;exit;}

# Informação Inicial:

zenity --info --width=400 --title=TROCAGOV --text="Script Zenity Para Trocar Governor do Processador\n\nPor:\n\nAlbfneto e MSOliver, do Site:\n\nViva o Linux\n\nVersão: 3.8 (2018)"

# zenity --question --title="Introdução" --text="Deseja ver a Introdução do TROCAGOV?"

INTROD=$(zenity --list --text "Deseja Ver a introdução do TROCAGOV??" --radiolist --column "" --column "Opções" false "Sim" false "Não" 2>/dev/null)

if [ "$INTROD" = "Sim" ] ; then

# Mostra a Introdução que são as primeiras 37-38 linhas dos comentários:

sed -n 1,38p $0 | zenity title="Introdução" --text-info --width 640 --height 640

else
zenity --error --title="Não Ver Introdução" --text="Você clicou para pular a Introdução\!"
fi


# Definindo o Governor e Variáveis:

governor=($(cpupower frequency-info|awk -F: '/reguladores/ {print $2}'))
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval ${X}="TRUE" || eval ${X}=FALSE; done

# Zenity para selecionar o governor que vai usar

wantedGovernor=$(zenity --list --width=400 --height=300 --title="Selecionar" --text="Selecionar o Governor que quer usar:" --radiolist --column "" --column "Opções" $(for ((x=0;x<${#governor[@]};x++));do echo "${!governor[$x]} ${governor[$x]}"|awk '/^FALSE/'; done))

# Checar se o botão Cancelar foi Pressionado.

if [ $? = 1 ]
then exit 0
fi

# Checar se o Governor que quer trocar já havia sido selecionado antes

currentGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

if [ $wantedGovernor = $currentGovernor ]
then
newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
zenity --info --width=400 --title="Não Trocar" --text="Governor já estava trocado para $newGovernor.\n\nSem Modificações."
exit 0
fi

# Usaremos CPUPower para trocar.

cpupower frequency-set -g $wantedGovernor

sleep 3

zenity --notification --timeout="6" --title="Governors AJustados para Todos os Núcleos" --text="$(cpupower frequency-set -g $wantedGovernor)"


# Parte da saída de "frequency-info" mostra que o governor foi trocado, numa janela de zenity:

cpupower frequency-info | grep -i regulador| zenity --text-info


# Checando se Trocado o governor Corretamente

newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

zenity --info --text="Governor ajustado para $newGovernor."

sleep 2

zenity --info --width=500 --title=TROCAGOV --text="Obrigado por usar TROCAGOV!\n\nEmail para Entrar em Contato com os Autores:\n\nalbfneto@fcfrp.usp.br\n\nClique em OK Para Sair."

#EOF



Ele tá assim agora, funcionando,
Se quiser teste a execução dele.
A introdução aparece na janela do Zenity, sem precisar de arquivo de texto.

se quiser mexer, no sed, remova (mas só no print do zenity) as "#" das primeiras 37 linhas. Dá para remover os "#" só do print? não quero substituir nada, só printar no zenity.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


Sim, da para "casar" com o numero da linha,
o inconveniente é que se incluir linhas no script ..., o comando deve ser alterado...
Por isso uso as "marcas" ##INTRO.
O comando:
sed -n '/^##INTRO/,/^##INTRO/p' $0 |sed -r 's/^##INTRO|^#//'
Pega o texto entre "##INTRO", inclusive,
Depois substitui "##INTRO" e "#" por nada.

A definição da variável:
currentGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor) 

Estava no lugar errado..... rsrsrsrsr
Foi alterada.

Inclui o teste para verificar se o zenity está instalado e otimizei alguns comandos . . . .

O comando:
cpupower frequency-set -g $wantedGovernor
É executado duas X...
Uma para setar o governor e outra para mostrar a notificação....
Acredito que a primeira execução pode ser eliminada....
Comentei a 1ª execução, deu certo.

# coloquei o sed para tirar os espaços iniciais:
cpupower frequency-info | grep -i regulador|sed 's/ \+//'| zenity --width=450 --height=200 --text-info 2>/dev/null

Segue o script:
#!/bin/bash

##INTRO
# INTRODUÇÃO:

# Este Script roda em Linux com Zenity, para trocar o governor,
# modifica a frequência e a energia usada pelos processadores.

# Por albfneto <albfneto@fcfrp.usp.br>:
# https://www.vivaolinux.com.br/~albfneto">https://www.vivaolinux.com.br/~albfneto">https://www.vivaolinux.com.br/~albfneto">https://www.vivaolinux.com.br/~albfneto
# e
# msoliver:
# https://www.vivaolinux.com.br/~msoliver">https://www.vivaolinux.com.br/~msoliver">https://www.vivaolinux.com.br/~msoliver">https://www.vivaolinux.com.br/~msoliver

# Site "Viva o Linux"
# https://www.vivaolinux.com.br

# Versão 3.8 (2018).

# Licença: GPL, Livre para baixar, usar, modificar, citando a autoria.
#######################################################################

# idéia inspirada por antigos Scripts que usavam CPUfreq e Dialog:
# https://www.vivaolinux.com.br/script/cpufreqselector-em-Dialog-Centrino-frequencia
# https://pastebin.com/3PikpU8v
# https://www.thelinuxrain.com/articles/a-script-to-toggle-cpu-performance-governor
# https://meganerd.ca/site/node/45

# Os Linux modernos não usam mais CPUFreq e sim CPUPower:
# https://www.vivaolinux.com.br/dica/Regulando-velocidade-e-energia-gasta-pelos-processadores-Metodo-moderno-cpupower


# Shell Script com Zenity, baseado, traduzido e Modificado do Script original de GILMOREJA, EUA:
# https://bbs.archlinux.org/viewtopic.php?id=192774
# http://www.deskdr.com/dr/new-to-bash-scripting-making-script-to-change-laptop-cpu-governor.html


# Observação:
# Instale o pacote Zenity na sua Distribuição, caso não esteja instalado, é verificado pelo script.

##INTRO

# Corpo do Script:

# Checar se rodando como Root:
(($UID != 0)) && { zenity --timeout="5" --warning --text '<span foreground="red" font="16">Exige Root\nLogue com o \"root\"\nOu\nUso: sudo $0</span>' 2>/dev/null;exit 0;}

# Testa o ZENITY está instalado
[[ $(which zenity) ]] || { zenity --timeout="5" --title="ERRO" --warning --text '<span foreground="red" font="16">\nInstale o \"zenity\" para continuar!\n</span>' 2>/dev/null;exit 0;}


# Informação Inicial:
zenity --timeout="5" --info --width=400 --title=TROCAGOV --text="Script Zenity Para Trocar Governor do Processador\n\nPor:\n\nAlbfneto e MSOliver, do Site:\n\nViva o Linux\n\nVersão: 3.8 (2018)"

#Deseja ver a Introdução do TROCAGOV?
INTROD=$(zenity --list --text "Deseja Ver a introdução do TROCAGOV??" --radiolist --column "" --column "Opções" false "Sim" false "Não" 2>/dev/null)

if [ "$INTROD" = "Sim" ] ; then
# Mostra a Introdução que são as linhas contidas entre "##INTRO":
sed -n '/^##INTRO/,/^##INTRO/p' $0|sed -r 's/^##INTRO|^#//'|zenity --text-info --title="Introdução" --width 640 --height 640
else
zenity --error --title="Não Ver Introdução" --text="Você clicou para pular a Introdução\!"
fi

#GOVERNORS DISPONÍVEIS:
governor=($(cpupower frequency-info|awk -F: '/reguladores/ {print $2}'))

#GOVERNOR EM USO:
currentGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

# Definindo Variáveis:
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval ${X}="TRUE" || eval ${X}=FALSE;
done

# Zenity para selecionar o governor que vai usar
wantedGovernor=$(zenity --list --width=400 --height=300 --title="Selecionar" --text="Selecionar o Governor que quer usar:" --radiolist --column "" --column "Opções" $(for ((x=0;x<${#governor[@]};x++));do echo "${!governor[$x]} ${governor[$x]}"|awk '/^FALSE/'; done))

# Checar se o botão Cancelar foi Pressionado.
(($?==1)) && exit 0

# Checar se o Governor que quer trocar já havia sido selecionado antes
if [ $wantedGovernor = $currentGovernor ];then
newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
zenity --info --width=400 --title="Não Trocar" --text="Governor já estava trocado para $newGovernor.\n\nSem Modificações."
exit 0
fi

# Usaremos CPUPower para trocar.
#cpupower frequency-set -g $wantedGovernor

#sleep 3

zenity --notification --timeout="6" --title="Governors AJustados para Todos os Núcleos" --text="$(cpupower frequency-set -g $wantedGovernor)"


# Parte da saída de "frequency-info" mostra que o governor foi trocado, numa janela de zenity:
# coloquei o sed para tirar os espa
cpupower frequency-info | grep -i regulador|sed 's/ \+//'| zenity --width=450 --height=200 --text-info 2>/dev/null

# Checando se Trocado o governor Corretamente
newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

zenity --info --text="Governor ajustado para $newGovernor."

sleep 2

zenity --info --width=500 --title=TROCAGOV --text="Obrigado por usar TROCAGOV!\n\nEmail para Entrar em Contato com os Autores:\n\nalbfneto@fcfrp.usp.br\n\nClique em OK Para Sair."

#EOF

Marcelo Oliver

3. Re: Modificando um Shell Script, mas Ele não está funcionando.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/12/2018 - 19:31h

albfneto escreveu:

Boa noite, estou modificando e traduzindo um Shell Script com Zenity para trocar a "energia" usada pelo processador, "governor".

Na realidade, estou traduzindo, modificando e ampliando o Script de GILMOREJA, Flórida USA,

https://bbs.archlinux.org/viewtopic.php?id=192774

Claro que vou citar, depois, ao publicar;

Ocorre que tem dois problemas.... Ele "funciona" e funciona sempre... roda completo com qualquer coisa que vc digite como senha de root!...

e ao rodar ele "funciona" mas não funciona.... ele não troca, deixa sempre o "governor" que é préajustado....

o código do meu script está assim:


#!/bin/bash

# Este Script roda Zenity para trocar o governor, a anergia usada pelos processadores

# Variáveis

optionPerformance="FALSE"
optionOndemand="FALSE"
optionConservative="FALSE"
optionPowersave="FALSE"
optionUserspace="FALSE"

# Lendo o Atual governor.

currentGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

# Checando e Listando as opções no Zenity.

if [ $currentGovernor = 'performance' ]
then optionPerformance="TRUE"
fi

if [ $currentGovernor = 'ondemand' ]
then optionOndemand="TRUE"
fi

if [ $currentGovernor = 'conservative' ]
then optionConservative="TRUE"
fi

if [ $currentGovernor = 'powersave' ]
then optionPowersave="TRUE"
fi

if [ $currentGovernor = 'userspace' ]
then optionUserspace="TRUE"
fi

# Zenity para selecionar o governor que vai usar

wantedGovernor=$(zenity --list --text "Selecionar o Governor que quer usar:" --radiolist --column "" --column "Opções" $optionPerformance "performance" $optionOndemand "ondemand" $optionConservative "conservative" $optionPowersave "powersave" $optionUserspace "userspace")

# Checar se o botão Cancelar foi Pressionado.

if [ $? = 1 ]
then exit 0
fi

# Checar se o Governor default foi selecionado.

if [ $wantedGovernor = $currentGovernor ]
then
newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
zenity --info --text "Governor já estava trocado para $newGovernor.\n\nSem Modificações."
exit 0
fi

# Para trocar
# Usaremos CPUPower para trocar. Zenity pedirá senha para Root

zenity --title "Senha para Root:" --password | su -c "cpupower frequency-set -g $wantedGovernor"

# Se o botão Cancelar foi Pressionado, Cancelar

if [ ${PIPESTATUS[0]} = 1 ]
then exit 0
fi

# Checando se a senha de root é a correta.

if [ ${PIPESTATUS[1]} = 1 ]
then
zenity --error --text "Senha de Root Errada.";
exit 1
fi

# Checando se Trocado o governor Corretamente

newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

zenity --info --text "Governor ajustado para $newGovernor."


ainda executando, ele dá um erro de "esperado operador unário", na linha 72, que é:


trocagovernormodif.sh: linha 72: [: =: esperava operador unário

ESTA é a Linha 72 (marcada com)
# if [ ${PIPESTATUS[1]} = 1 ]
then
zenity --error --text "Senha de Root Errada.";
exit 1
fi


Boa noite alfbneto.
Dei uma olhada rápida ....
Me parece que as arrays "${PIPESTATUS[0]}" e "${PIPESTATUS[1]}", não foram definidas...
Um detalhe, troque esses "if's" do "currentGovernor", pelo case, é bem mais rápido.

Editado:
Ao invés do case, optei por outra solução:
currentGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
governor=(performance ondemand conservative powersave userspace)
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval Option${X^}="TRUE" || eval Option${X^}=FALSE;
done

Os comandos acima, definem as variáveis:
optionPerformance
optionOndemand
optionConservative
optionPowersave
optionUserspace
com os devidos valores.

att.:
marcelo oliver




4. Re: Modificando um Shell Script com Zenity.. Os scripts já estão funcionando bem. [RESOLVIDO]

Eric
Grinder

(usa Slackware)

Enviado em 10/12/2018 - 23:34h

Boa noite,

Acho que vale ressaltar que os governors dependem do driver utilizado de acordo com seu processador.
Utilizando Intel-PStates, os governors utilizados são powersave/performace
Utilizando ACPI PStates, os governors utilizados são os demais, podendo também usar o performace.

- - - - -
www.github.com/ericfernandesferreira
www.youtube.com/candelabrus1


5. Re: Modificando um Shell Script com Zenity.. Os scripts já estão funcionando bem. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 10/12/2018 - 23:55h

Adapte aí

#!/bin/bash
while true
do
resp=$(zenity --password)

# Pega a senha do login gráfico
senha=$(echo "$resp" | cut -f1 -d'|')

# Passa a senha
echo $senha | sudo -S -u root zenity --info --text "Bem vindo: r00t" 1 2>/dev/null && exit

# Perguntar se quer tentar novamente.
zenity --question --text 'Erro. Tentar novamente?'

# Sair se pressionou cancelar.
(( $? )) && exit
done

#EOF


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



6. Re: Modificando um Shell Script com Zenity, mas agora ele funciona com qualquer senha!.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/12/2018 - 00:51h

albfneto escreveu:

Se eu modifico a linha do zenity e uso um comando geral,, tipo "ls -a"


zenity --title "Senha para Root:" --password | su -c "ls -a"


Funciona e só roda o "ls -a" se a senha de root na janela do Zenity, for a correta..., portanto acho que a sintaxe do zenity tá correta.

se eu uso a linha do script, linha 56 assim....


zenity --title "Senha para Root:" --password | su -c "cpupower frequency-set -g $performance"


o governor é trocado, portanto não é nessa linha o erro....
Resumo.... executado com su ou sudo ele troca o governor.
Executado normal como usuário, a janela do Zenity pede a senha, porém nunca troca, mesmo que seja senha de root.

quando pronto, quero publicar o script, citarei sua co-autoria, contribuição.

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


Boa noite albfneto .
Quanto a var "PIPESTATUS", a mesma é gerada pelo "zenity"...
Cancelar=> PIPESTATUS=1
OK=> PIPESTATUS=0
E não é um array!!!

Vamos aos pontos:
1 - Com os comandos sugeridos, não é necessário definir as variáveis:
optionPerformance="FALSE"
optionOndemand="FALSE"
optionConservative="FALSE"
optionPowersave="FALSE"
optionUserspace="FALSE"
O comando:
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval Option${X^}="TRUE" || eval Option${X^}=FALSE;
done

define....

2 - Quanto ao "governor", no caso do meu "pc", não são todos os disponíveis.
O comando:
cpupower frequency-info|awk -F: '/reguladores/ {print $2}'
performance powersave
Mostra os disponíveis....

Nesse caso é interessante trocar:
governor=(performance ondemand conservative powersave userspace)
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval Option${X^}="TRUE" || eval Option${X^}=FALSE;
done
Por:
governor=($(cpupower frequency-info|awk -F: '/reguladores/ {print $2}'))
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval ${X}="TRUE" || eval ${X}=FALSE; done

E:
wantedGovernor=$(zenity --list --text "Selecionar o Governor que quer usar:" --radiolist --column "" --column "Opções" $optionPerformance "performance" $optionOndemand "ondemand" $optionConservative "conservative" $optionPowersave "powersave" $optionUserspace "userspace")
Por:
wantedGovernor=$(zenity --list --text "Selecionar o Governor que quer usar:" --radiolist --column "" --column "Opções" $(for ((x=0;x<${#governor[@]};x++));do echo "${!governor[$x]} ${governor[$x]}"; done)) 


3 - No debian o comando 'cpupower" não vem instalado por padrão,
instalei o libcpupower1 e o linux-cpupower.
O comando:
[[ $(which cpupower) ]] && echo instalado || echo intalar
Faz a verificação.

4 - zenity --title "Senha para Root:" --password | su -c "ls -a"
Aqui não funcionou... Mostra mensagem:
su : deve ser executado a partir de um terminal

Já que o comando exige o 'root',
Exija que esteja logado como tal....
(($UID != 0)) && { echo -e "\nExige Root\nSaindo...";exit;} || echo OKAY 


Por hora é isso...
Espero não ter esquecido de postar tudo o que testei . . . rsrsrsr
Abç.:
Marcelo Oliver



7. Script funciona....mas parte do código ignorada.

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 11/12/2018 - 14:11h

SCRIPT TÁ QUASE PERFEITO:

Observação, no Sabayon, onde testei, vários governors são disponíveis, veja, com o seu comando por exemplo:


$ cpupower frequency-info|awk -F: '/reguladores/ {print $2}'
conservative ondemand powersave userspace performance schedutil


de fato sabayon tem serviço cpupower ativo no systemd.

Script como está agora, ele executa como root (su && ./script.sh) ou com sudo (sudo ./script) e como esperado, não executa sem root...
o código todo está assim, e funcionando


#!/bin/bash

# Este Script roda em Zenity para trocar o governor, a anergia usada pelos processadores.

# Por albfneto <albfneto@fcfrp.usp.br>, e
# msoliver:
# https://www.vivaolinux.com.br/topico/Zenity/Modificando-um-Shell-Script-mas-Ele-nao-esta-funcionando

# Versão 2.2 (2018).

# Licença: GPL, Livre para baixar, usar, modificar, citando a autoria.

# Baseado, traduzido e Modificado do Script de GILMOREJA, USA:

# https://bbs.archlinux.org/viewtopic.php?id=192774

# Checar se rodando como Root:

(($UID != 0)) && { echo -e "\nExige Root\nExecutar Novamente como Root ou com Sudo\nSaindo...";exit;} || echo OKAY

# Definindo o Governor e Variáveis:

governor=($(cpupower frequency-info|awk -F: '/reguladores/ {print $2}'))
for X in ${governor[*]};do
[[ $currentGovernor = $X ]] && eval ${X}="TRUE" || eval ${X}=FALSE; done


# Zenity para selecionar o governor que vai usar

wantedGovernor=$(zenity --list --text "Selecionar o Governor que quer usar:" --radiolist --column "" --column "Opções" $(for ((x=0;x<${#governor[@]};x++));do echo "${!governor[$x]} ${governor[$x]}"; done))

# Checar se o botão Cancelar foi Pressionado.

if [ $? = 1 ]
then exit 0
fi

# Checar se o Governor default foi selecionado.

if [ $wantedGovernor = $currentGovernor ]
then
newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
zenity --info --text "Governor já estava trocado para $newGovernor.\n\nSem Modificações."
exit 0
fi

# Usaremos CPUPower para trocar.

su -c "cpupower frequency-set -g $wantedGovernor"

# Se o botão Cancelar foi Pressionado, Cancelar

if [ ${PIPESTATUS[0]} = 1 ]
then exit 0
fi

# Checando se Trocado o governor Corretamente

newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)

zenity --info --text "Governor ajustado para $newGovernor."




8. Re: Modificando um Shell Script com Zenity, mas agora ele funciona com qualquer senha!.

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 11/12/2018 - 16:19h

Marcelo, gostei da idéia de fazer a senha pro zenity no inicio do programa, mas após as linhas, dando OK na tela de R00t... ele fecha o programa e não continua, onde ficou armazenada a "$senha" pro programa seguir?
deveria pegar com "echo -e $senha" , não?
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


9. Re: Modificando um Shell Script com Zenity, mas agora ele funciona com qualquer senha!.

Eric
Grinder

(usa Slackware)

Enviado em 11/12/2018 - 18:56h

Veja se te ajuda parceiro.
Pode ser que você encontre esses arquivos em outra pasta, mas bastante semelhante de acordo com seu processador e kernel.

cd /sys/devices/system/cpu/cpu0/driver/cpu0/cpufreq/
cat scaling_driver
cat scaling_available_governors
cat scaling_governor

- - - - -
www.github.com/ericfernandesferreira
www.youtube.com/candelabrus1


10. Re: Modificando um Shell Script com Zenity, mas agora ele funciona com qualquer senha!.

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 11/12/2018 - 20:09h

Grinder, os governors estão em ordem, no meu micro. não há problema nos governors, o script funciona mas

O script é que não roda partes dele problema no script, não nos governors, todos são achados e setam, no meu micro.

veja aqui, após rodar o script da resposta 6, o governor setado corretamente para 'ondemand":


$ cpupower frequency-info
analisando o CPU 0:
driver: acpi-cpufreq
CPUs que rodam na mesma frequência de hardware: 0
CPUs que precisam ter suas frequências coordenadas por software: 0
maior latência de transição: 4.0 us
limites do hardware: 1.40 GHz - 3.10 GHz
available frequency steps: 3.10 GHz, 2.80 GHz, 2.30 GHz, 1.90 GHz, 1.40 GHz
reguladores do cpufreq disponíveis: conservative ondemand powersave userspace performance schedutil
política de frequência atual deve estar entre 1.40 GHz e 3.10 GHz.
O regulador "ondemand" deve decidir qual velocidade usar
dentro desse limite.
current CPU frequency: Unable to call hardware
current CPU frequency: 2.11 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes


agora veja, vou rodar o script da resposta 6 , e vou trocar de "ondemand" para "userspace", depois volto... Como esperado, não roda sem root


$ sh trocagovernormodif6.sh
Exige Root
Executar Novamente como Root ou com Sudo
Saindo...


Como Root e troquei governor:


$ sudo sh trocagovernormodif6.sh
senha:
OKAY
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
Setting cpu: 4
Setting cpu: 5
Setting cpu: 6
Setting cpu: 7


imagens do script, funcionando "quase perfeito" e trocando o governor corretamente

http://ap.imagensbrasil.org/image/ql4eBK
http://ap.imagensbrasil.org/image/ql4wK2

Agora veja governor trocado corretamente pelo script:


cpupower frequency-info
analisando o CPU 0:
driver: acpi-cpufreq
CPUs que rodam na mesma frequência de hardware: 0
CPUs que precisam ter suas frequências coordenadas por software: 0
maior latência de transição: 4.0 us
limites do hardware: 1.40 GHz - 3.10 GHz
available frequency steps: 3.10 GHz, 2.80 GHz, 2.30 GHz, 1.90 GHz, 1.40 GHz
reguladores do cpufreq disponíveis: conservative ondemand powersave userspace performance schedutil
política de frequência atual deve estar entre 1.40 GHz e 3.10 GHz.
O regulador "userspace" deve decidir qual velocidade usar
dentro desse limite.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.90 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes


Resumo. não é problema nos governors...., apenas pequenos problemas no script...

o Script que passei, na resposta 6

está "quase bom"... o que quero? colocar senha gráfica do zenity no começo do script, como sugeriu o mauricio

e fazer o "comparador" rodar, isto é quando tenta trocar governor default, pelo mesmo, ele deve não trocar...

Apenas "partes" do script não rodam como quero.

OBSERVAÇÃO: apaguei reapostas minhas antigas neste post para não confundir os leitores... deixei apenas o script que está rodando melhor...
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


11. Re: Modificando um Shell Script com Zenity... tá quase bom

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 11/12/2018 - 20:38h

O que falta? saber porque a porção "comparadora", que não deveria deixar trocar o governor por ele mesmo, está sendo ignorada, pulada no script da resposta 6:


if [ $wantedGovernor = $currentGovernor ]
then
newGovernor=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
zenity --info --text "Governor já estava trocado para $newGovernor.\n\nSem Modificações."
exit 0
fi


e aplicar a ideia do mauricio, de colocar a senha com zenity , no início do script.... Colocando o código do MAuricio, Ele tá parando quando o botão OK, em "Benvindo ao r00t" é clicado....

echo -e $senha

não transporta a senha e a execução para...

Tá quase bom. Pretendo ao ficar OK, publicar aqui, em co-autoria com o MSOliver e o Mauricio. Vou perguntar ao Flávio como se pode fazer para publicar o script com três autores.

Aproveitando, agradeço.... Vcs são bons com Shell Script. Para mim, nem sempre fácil, pq não sou programador, nem profissional de TI.

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


12. Re: Modificando um Shell Script com Zenity.. Os scripts já estão funcionando bem. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 11/12/2018 - 20:44h

aqui eu só coloco isso no inicio do script

#Verifica se o usuário é root
if [ "`id -u`" != "0" ] ; then
gksu $0
exit
fi


quanto ao outro script de senha é o seguinte onde tem o 'echo' "benvindo r00T..." essa parte tem que ser substituida pelo body do script.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------




01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts