2. Re: Modificando um Shell Script com Zenity.. Os scripts já estão funcionando bem. [RESOLVIDO]
Melhor resposta
msoliverusa Debian
Post recolhido
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:
# 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:
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:
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.
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.
# 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
#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.
msoliverusa Debian
Post recolhido
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,
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
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]
Grinderusa Slackware
Post recolhido
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.
# 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!.
msoliverusa Debian
Post recolhido
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
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....
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.
(($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
zenity --info --text "Governor ajustado para $newGovernor."
8. Re: Modificando um Shell Script com Zenity, mas agora ele funciona com qualquer senha!.
albfnetousa openSUSE
Post recolhido
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!.
Grinderusa Slackware
Post recolhido
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
10. Re: Modificando um Shell Script com Zenity, mas agora ele funciona com qualquer senha!.
albfnetousa openSUSE
Post recolhido
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...
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
albfnetousa openSUSE
Post recolhido
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]
Mauriciodezusa Debian
Post recolhido
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 |-----------------------------------------