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.
Tabla de contenidos
Requisitos
- CPU soportada por cpufreq
- Sudo / Gksudo
- Cpufrequtils
- Zenity
- Xosd
Editando sudoers
Este 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.
El script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #!/bin/bash DIALOG=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 15 if [ -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.
Pingback: Bitacoras.com /
Interesante opción. Gracias y cordial saludo.
Ramón
@anrafera
Gracias por tu comentario!
Me ha servido !
Muchas gracias !
Saludos.
@GaBo
Me alegro mucho GaBo 🙂 Gracias por tu comentario