Un Script que nos Ayuda a Elegir la Frecuencia de Nuestra CPU

A mí me gusta tener el control sobre la frecuencia de la CPU, ya sea porque muchas veces no estoy haciendo nada y lo quiero dejar al mínimo de velocidad para que se caliente menos, o porque algunas veces necesito un poco más de potencia, y otras veces lo dejo a su aire para que cambie de frecuencia solo.

El script se basa en llamadas a cpufreq-set de cpufrequtils, aunque la llamada tiene que ser con permisos de root, por lo que conviene ver antes este artículo, de todas formas, todo esto se hará paso a paso.
Requisitos

CPU soportada por cpufreqSudo / Gksudo
Cpufrequtils
Zenity
Xosd

Editando sudoers (opcional)

Nuestro script lo ejecutaremos desde nuestro usuario, pero la llamada a cpufreq-set necesita permisos especiales, por lo tanto, lo haremos con sudo. Si saltamos este paso, nos preguntará la contraseña para ejecutar los comandos, pero si no queremos que nos pregunte, debemos hacer esto.

Lo primero es ejecutar:

$ sudo visudo

Y en el archivo, debajo de la última línea sin comentario, escribimos:
mi_usuario ALL= NOPASSWD : /usr/bin/cpufreq-set

Sustituyendo mi_usuario por el usuario que va a ejecutar el script. Si tenéis varios usuarios podéis añadirlos uno por línea, o ver el artículo mencionado antes para más opciones.
#!/bin/bashDIALOG=zenity
CPUFREQSET='which cpufreq-set'
OSDCAT='which osd_cat'
XOSD_FONT=”-*-luxisans-bold-*-*-*-47-*-*-*-*-*-*-*”
XOSD_OPTIONS=”–pos=bottom -o -210 -A center -c green -s 2 -d 2 -f “$XOSD_FONT;
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap “rm -f $tempfile” 0 1 2 5 15if [ -z $CPUFREQSET ]
then
echo “cpufrequtils no está instalado”
exit
fi

if [ -z $OSDCAT ]
then
echo “xosd no está instalado”
exit
fi

if [ -e “/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies” ]
then
actual=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq`
cnt=0
for i in `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies`
do
if [[ $i != $actual ]]; then
cnt=`expr $cnt + 1`
fi
done
else
echo “CPUfreq no está disponible”
exit
fi

simple_math()
{
echo “scale=2; $1″ | bc;
}

saca_freq()
{
cnt=0
for i in `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies`
do
if [[ $cnt == $1 ]]; then
frq=$i
break
fi
cnt=`expr $cnt + 1`
done
echo $frq
}

pone_freqs()
{
cnt=0
for j in `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies`
do
if [[ $j != $actual ]]; then
frq=$frq”:Cpufreq “$cnt”:”`simple_math $j/1000000`” Ghz”
fi
cnt=`expr $cnt + 1`
done
echo $frq
}

pone_governors()
{
possible_governors=([0]=powersave [1]=conservative [2]=ondemand [3]=performance)
governor_command=([0]=Powersave [1]=Conservative [2]=Ondemand [3]=Performance)
governor_text=([0]=”Ahorro de energía” [1]=”Modo conservador” [2]=”Modo Bajo demanda” [3]=”Modo rendimiento”)
available_governors=`cpufreq-info -g`

for (( g=0; g<${#possible_governors[*]}; g++ ))
do
# echo $g
# echo ${possible_governors[$g]}
gov=${possible_governors[$g]}
if [ -n “`echo $available_governors | grep $gov`” ]
then
frq=$frq”:”${governor_command[$g]}”:”${governor_text[$g]}
fi
done

echo $frq
}

freqs=”Exit:No hacer nada”
freqs=$freqs`pone_freqs`
freqs=$freqs`pone_governors`

OLD_IFS=$IFS
IFS=”:”

$DIALOG –width=240 –height=250 –title=”Selector de frecuencia” –list –column “ID” –column “Frecuencia” –hide-column 1 –text “Elige una opcion” $freqs > $tempfile

retval=$?
IFS=”${OLD_IFS}”

choice=`cat $tempfile`

comando=`echo $choice | cut –delimiter ” ” –fields 1`
modif=`echo $choice | cut –delimiter ” ” –fields 2`

case $retval in
0)
case $comando in
“Exit”)
echo “Salir” | osd_cat $XOSD_OPTIONS
;;
“Cpufreq”)
freqdef=`saca_freq $modif`
gksudo “$CPUFREQSET -g userspace”
gksudo “$CPUFREQSET -f $freqdef”
echo “Velocidad actual “`simple_math $freqdef/1000000`”Ghz” | $OSDCAT $XOSD_OPTIONS
;;
“Powersave”)
gksudo “/usr/bin/cpufreq-set -g powersave”
echo “Modo ahorro de energía” | $OSDCAT $XOSD_OPTIONS
;;
“Conservative”)
gksudo “/usr/bin/cpufreq-set -g conservative”
echo “Modo conservador” | $OSDCAT $XOSD_OPTIONS
;;
“Ondemand”)
gksudo “/usr/bin/cpufreq-set -g ondemand”
echo “Modo bajo demanda” | $OSDCAT $XOSD_OPTIONS
;;
“Performance”)
gksudo “/usr/bin/cpufreq-set -g performance”
echo “Modo rendimiento” | $OSDCAT $XOSD_OPTIONS
;;
esac;;
1)
echo “Cancelado”;;
255)
echo “Escape”;;
esac

Notas del script

He optado por filtrar el resultado de cpufreq-info -g y cambiar las palabras, me gusta filtrar todos los datos que me llegan.
Añadí la primera opción para no hacer nada, porque me resultó más cómoda cuando quiero cancelar el menú
zenity nos devuelve dos cosas: El resultado de la ejecución y el valor elegido, por tanto el primer valor lo podemos averiguar del script, el segundo lo devuelve como texto, por eso lo almacenamos en un archivo temporal
Para cambiar el tipo de letra, tenemos que ejecutar xfontsel, desde ese programa, elegir el tipo de letra y copiar el texto que nos devuelve a la variable XOSD_FONT

Por último…
Para disfrutar de este script, lo bueno es asociarlo a una tecla, por ejemplo yo lo tengo en Meta+F3 y con ello se puede cambiar la frecuencia rápidamente.
Anuncios

2 Respuestas a “Un Script que nos Ayuda a Elegir la Frecuencia de Nuestra CPU

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s