GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Gui o simple Bash Script para acelerar la CPU?

Tengo un problema con una Chuwi Hi10 Pro. Ocurre en Linux y Windows.
Cuando el brillo de la pantalla es demasiado alto, o la CPU está al 100%, mientras está enchufada, la batería comienza a agotarse. Es un drenaje muy lento con un cargador USB 3.0 QC, pero quiero mantener la tableta encendida las 24 horas del día, los 7 días de la semana, de manera bastante confiable.

Me gustaría saber si existe un método sencillo, preferiblemente GUI o script Bash simple, para acelerar la CPU (administración de energía) y volver al modo de alto rendimiento.

Quiero usarlo para servicios como Kodi; es posible que no arruine la reproducción de video si se acelera un poco.

Otra pregunta, además de la información de la batería, ¿hay alguna forma de saber el amperaje y los vatios de un adaptador de CA?

Mejor respuesta

cpuf:GUI de Bash simple para establecer la frecuencia mínima/máxima de la CPU

Demostración

En esta demostración cpuf la ventana está a la izquierda y conky la información del sistema está en el lado derecho. Así es como avanza la demostración:

  • La demostración comienza mientras el video de YouTube ya se está ejecutando
  • Las frecuencias mínimas/máximas de CPU predeterminadas son 800 / 3500
  • Anular CPU min/max a 800 / 800 y el uso de la CPU salta al 20 %
  • Anular CPU min/max a 3500 / 3500 y el uso de la CPU se reduce al 10 %
  • La demostración retrocede y comienza de nuevo

Con tres monitores cpuf puede aparecer a 10 pies de distancia, así que use el parámetro 1 --geometry opción para ponerlo cerca de conky :

sudo cpuf --geometry="450x450+4720+80" //eadn-wc01-5196795.nxedge.io/home/rick/Pictures/icons/cpu-intel-128.svg
  • Parámetro 1 --geometry es Ancho de la ventana x Alto + Desplazamiento de ancho + Desplazamiento de altura
  • El parámetro 2 puede ser su propio icono (en este caso, la imagen de la CPU de Intel); de lo contrario, el valor predeterminado es el icono de la computadora

cpuf Script bash

Esta sección requiere que abra una terminal con Ctrl +Alt +T .

Cómo configurar

Para funcionar, cpuf bash script requiere:

sudo apt install yad         # from the repository universe
sudo apt install coreutils   # installed by default in most distros

Es más fácil cuando colocas cpuf script en un directorio propiedad de la raíz dentro de su ruta de búsqueda. Por ejemplo:/usr/local/bin .

Para crear cpuf script abre el editor con sudo -H gedit /usr/local/bin/cpuf .

  • Resalte las líneas en la sección siguiente
  • Haga clic derecho y seleccione "Copiar"
  • Volver a tu editor
  • Haga clic derecho y seleccione "Pegar"
  • Desde el menú del editor, seleccione "Guardar" y luego "Salir"

Haga que el script sea ejecutable con sudo chmod a+x /usr/local/bin/cpuf .

cpuf código para copiar a tu editor

#!/bin/bash

# NAME: cpuf (Pronounced SEA-PUFF)
# CALL: sudo cpuf
# PARM: $1 = --geometry=WidthxHeight+VertOffset+HorizOffset
#       $2 = Optional image icon

# DESC: Simple GUI script to set CPU Min and Max Frequency.
#       For Ask Ubuntu Question: https://askubuntu.com/q/1141605/307523
# DATE: May 12, 2019.
# UPDT: No updates yet.
# NOTE: No notes yet.

### Dependancies ###

command -v yad >/dev/null 2>&1 || { echo >&2 
        "yad package required but it is not installed.  Aborting."; 
        exit 1; }

command -v nproc >/dev/null 2>&1 || { echo >&2 
        "coreutils package required but it is not installed.  Aborting."; 
        exit 2; }

if [[ $(id -u) != 0 ]]; then # root powers needed to call this script
    echo >&2 Must be called with sudo powers
    exit 3
fi

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical 
    "$0 cannot be run from GUI without TERM environment variable."
    exit 4
fi

### Program constants ###

## Yad Window parameters
# Hard code Height & Width to suit your screen resolution and scaling factor
GEOMETRY="--width 400 --height 500"
# Pass Parameter 1 with ---geometry="WidxHgt+WidOff+HgtOff" to override
[[ "$1" == --geometry=* ]] && GEOMETRY="$1"

TITLE="cpuf"
TEXT="Set CPU Min/Max Frequencies"
ICON="//eadn-wc01-5196795.nxedge.io/usr/share/icons/Adwaita/48x48/devices/computer.png"
# Pass Parameter 2 with icon for window image
# Intel CPU comes from: https://www.gnome-look.org/p/1107932/
[[ ! -z "$2" ]] && ICON="$2"

## Virtual File System directories
      CPU0_DIR=/sys/devices/system/cpu/cpu0/cpufreq
    PSTATE_DIR=/sys/devices/system/cpu/intel_pstate
 CURR_MIN_FREQ="$CPU0_DIR/scaling_min_freq"
 CURR_MAX_FREQ="$CPU0_DIR/scaling_max_freq"
ALLOW_MIN_FREQ="$CPU0_DIR/cpuinfo_min_freq"
ALLOW_MAX_FREQ="$CPU0_DIR/cpuinfo_max_freq"

OLD_IFS=$IFS            # Save current Input File Separtor (IFS)
declare -a Arr          # Array for YAD Window input
NumCPU=$(nproc --all)   # Number of CPUs (nproc from coreutils)

### Error Message Functions ###

Abend () {
    # Abnormal Ending - Parameter 1 = message to display, Parameter 2=exit code

    yad --image "dialog-error" --image-on-top --title "$TITLE - Fatal Error" 
        "$GEOMETRY" --button=gtk-ok:0 --text "$1" 2>/dev/null
    exit "$2"
   
} # Abend

ErrMsg () {
    # Parmater 1 = message to display

    yad --image "dialog-error" --title "$TITLE - Logical Error" 
        "$GEOMETRY" --button=gtk-ok:0 --text "$1" 2>/dev/null

    fErrMsgForceContinue=true
 
} # ErrMsg

### Initialize Variables ###

InitVars () {

    [[ ! -e "$ALLOW_MIN_FREQ" ]] && Abend "$ALLOW_MIN_FREQ not found" 11
    AllowMinFreq=$(cat "$ALLOW_MIN_FREQ")
    AllowMinFreq="${AllowMinFreq::-3}"  # Chop off three decimals at end

    [[ ! -e "$ALLOW_MAX_FREQ" ]] && Abend "$ALLOW_MAX_FREQ not found" 12
    AllowMaxFreq=$(cat "$ALLOW_MAX_FREQ")
    AllowMaxFreq="${AllowMaxFreq::-3}"

    [[ ! -e "$CURR_MIN_FREQ" ]] && Abend "$CURR_MIN_FREQ not found" 13
    CurrMinFreq=$(cat "$CURR_MIN_FREQ")
    CurrMinFreq="${CurrMinFreq::-3}"
    NewMinFreq="$CurrMinFreq"

    [[ ! -e "$CURR_MAX_FREQ" ]] && Abend "$CURR_MAX_FREQ not found" 14
    CurrMaxFreq=$(cat "$CURR_MAX_FREQ")
    CurrMaxFreq="${CurrMaxFreq::-3}"
    NewMaxFreq="$CurrMaxFreq"

    if [[ -e "$PSTATE_DIR" ]] ; then
        NumPstates=$(cat "$PSTATE_DIR/num_pstates")
        if [[ $(cat "$PSTATE_DIR/no_turbo") -eq 0 ]] ; then
            TurboBoost="Enabled"
        else
            TurboBoost="Disabled"
        fi
    else
        NumPstates="Not found"
        TurboBoost="Not found"
    fi

    if [[ -e "$CPU0_DIR/scaling_governor" ]] ; then
        Governor=$(cat "$CPU0_DIR/scaling_governor")
    else
        Governor="Not found"
    fi

    if [[ -e "$CPU0_DIR/scaling_cur_freq" ]] ; then
        CurrFreq=$(cat "$CPU0_DIR/scaling_cur_freq")
        # Chop off three decimals at end
        CurrFreq="${CurrFreq::-3}"
    else
        CurrFreq="Not found"
    fi

} # InitVars

### Paint / repaint window and get new frequencies ###

GetParameters () {

    # +------------------------------------------+
    # |  cpuf - Set CPU Min/Max Frequencies      |
    # +------------------------------------------+
    # |                                          |
    # |  Turbo Boost:            Enabled         |
    # |                                          |
    # |  Number of pstates:      99              |
    # |  Speed Governor Used:    powersave       |
    # |  Current CPU0 frequency: 9999 Mhz        |
    # |                                          |
    # |  Current Minimum Freq.:  9999 Mhz        |
    # |  Current Maximum Freq.:  9999 Mhz        |
    # |                                          |
    # |  New Minimum Frequency   9999            |
    # |  New Maximum Frequency   9999            |
    # |                                          |
    # +------------------------------------------+

    IFS="|"
    Arr=($(yad "$GEOMETRY" --form 
        --title "$TITLE" --text "$TEXT" 
        --window-icon="$ICON" --image="$ICON" 
        --field="Turbo Boost:":RO "$TurboBoost" 
        --field="Number of pstates:":RO "$NumPstates" 
        --field="Speed Governor:":RO "$Governor" 
        --field="Current Frequency:":RO "$CurrFreq MHz" 
        --field="Allowable Minimum Frequency:":RO "$AllowMinFreq MHz" 
        --field="Allowable Maximum Frequency:":RO "$AllowMaxFreq MHz" 
        --field="Current Minimum Frequency:":RO "$CurrMinFreq MHz" 
        --field="Current Maximum Frequency:":RO "$CurrMaxFreq MHz" 
        --field="New Minimum Frequency" "$NewMinFreq" 
        --field="New Maximum Frequency" "$NewMaxFreq" 2>/dev/null))

    Return="$?"
    NewMinFreq="${Arr[8]}"
    NewMaxFreq="${Arr[9]}"

} # GetParameters

###################################
#            MAINLINE             #
###################################

ALL_PREFIX="/sys/devices/system/cpu/cpu"
MIN_SUFFIX="/cpufreq/scaling_min_freq"
MAX_SUFFIX="/cpufreq/scaling_max_freq"

while true ; do

    InitVars
    GetParameters
    [[ ! "$Return" -eq 0 ]] && break ; # Exit on Cancel=1 or Close Window=252

    # Sanity checks
    fErrMsgForceContinue=false
    [[ $NewMinFreq -lt $AllowMinFreq ]] && ErrMsg "Minimum frequency too low"
    [[ $NewMaxFreq -gt $AllowMaxFreq ]] && ErrMsg "Maximum frequency too high"
    [[ $NewMinFreq -gt $NewMaxFreq ]]   && ErrMsg "Minimum frequency greater than Maximum Frequency"
    [[ $fErrMsgForceContinue == true ]] && continue
    
    # Set new Min/Max frequencies
    for (( i=0 ; i<NumCPU ; i++ )) ; do
        # If New Min > Curr Max, set Max first then Min
        if [[ $NewMinFreq -gt $CurrMaxFreq ]] ; then
            echo "$NewMaxFreq""000" > "$ALL_PREFIX$i$MAX_SUFFIX"
            echo "$NewMinFreq""000" > "$ALL_PREFIX$i$MIN_SUFFIX"
        else
            echo "$NewMinFreq""000" > "$ALL_PREFIX$i$MIN_SUFFIX"
            echo "$NewMaxFreq""000" > "$ALL_PREFIX$i$MAX_SUFFIX"
        fi
    done
    

done

IFS="$OLD_IFS"
exit 0

Ubuntu
  1. ¿Por qué The Bash Script no reconoce los alias?

  2. ¿Cómo detener el script Loop Bash en la terminal?

  3. ¿Cómo leer todo el script de Shell antes de ejecutarlo?

  4. ¿Cómo hacer un script Bash para cambiar el formato de una fecha en un archivo CSV?

  5. Al hacer el primer script de Bash, ¿no puede hacer que el comando Cd se 'pegue'?

Cómo ejecutar un script Bash {7 métodos}

Cómo mostrar cuadros de diálogo GUI en bash script usando Zenity

Un script BASH simple para la instalación posterior del servidor Ubuntu

Una forma sencilla de entender el comando IOStat

¿Cuál es la diferencia entre ejecutar un script Bash y obtenerlo?

Bash script para eliminar el archivo más antiguo de una carpeta