GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Gui ou simple script bash pour accélérer le processeur ?

J'ai un problème avec un Chuwi Hi10 Pro. Cela se produit sous Linux et Windows.
Lorsque la luminosité de l'écran est trop élevée ou que le processeur est à 100 %, alors qu'il est branché, la batterie commence à se décharger. C'est une vidange très lente avec un chargeur USB 3.0 QC mais je veux garder la tablette allumée 24h/24 et 7j/7 de manière assez fiable.

J'aimerais savoir s'il existe une méthode simple, de préférence une interface graphique ou un simple script Bash, pour limiter le processeur (gestion de l'alimentation) et revenir en mode hautes performances.

Je veux l'utiliser pour des services tels que Kodi; cela ne gâchera peut-être pas la lecture vidéo si elle est un peu étranglée.

Question secondaire, autre que les informations sur la batterie, existe-t-il un moyen de connaître l'ampérage et les watts d'un adaptateur secteur ?

Meilleure réponse

cpuf – Interface graphique Bash simple pour définir la fréquence minimale/maximale du processeur

Démonstration

Dans cette démo cpuf la fenêtre est à gauche et conky les informations système se trouvent sur le côté droit. Voici comment la démo progresse :

  • La démo démarre alors que la vidéo YouTube est déjà en cours d'exécution
  • Les fréquences min/max du processeur par défaut sont 800 / 3500
  • Remplacer le min/max du processeur par 800 / 800 et l'utilisation du processeur passe à 20 %
  • Remplacer le min/max du processeur par 3500 / 3500 et l'utilisation du processeur chute à 10 %
  • La démo revient en boucle et recommence

Avec trois moniteurs cpuf peut apparaître à 10 pieds de distance, utilisez donc le paramètre 1 --geometry option pour le mettre près de conky :

sudo cpuf --geometry="450x450+4720+80" //eadn-wc01-5196795.nxedge.io/home/rick/Pictures/icons/cpu-intel-128.svg
  • Paramètre 1 --geometry est la largeur de la fenêtre x la hauteur + le décalage de largeur + le décalage de hauteur
  • Le paramètre 2 peut être votre propre icône (dans ce cas, l'image du processeur Intel), sinon il s'agit par défaut de l'icône de l'ordinateur

cpuf Script bash

Cette section nécessite que vous ouvriez un terminal avec Ctrl +Alt +T .

Comment configurer

Pour fonctionner, cpuf le script bash nécessite :

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

C'est plus facile quand vous placez cpuf script dans un répertoire appartenant à la racine dans votre chemin de recherche. Par exemple :/usr/local/bin .

Pour créer cpuf script ouvrez l'éditeur avec sudo -H gedit /usr/local/bin/cpuf .

  • Sélectionnez les lignes dans la section ci-dessous
  • Cliquez avec le bouton droit et sélectionnez "Copier"
  • Revenir à votre éditeur
  • Cliquez avec le bouton droit et sélectionnez "Coller"
  • Dans le menu de l'éditeur, sélectionnez "Enregistrer" puis "Quitter"

Rendre le script exécutable avec sudo chmod a+x /usr/local/bin/cpuf .

cpuf code à copier dans votre éditeur

#!/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. Pourquoi le script Bash ne reconnaît-il pas les alias ?

  2. Script Bash pour supprimer le fichier le plus ancien d'un dossier ?

  3. Le processeur est gratuit, mais le script Bash n'utilise pas toutes les ressources du processeur ?

  4. Faire le premier script Bash, impossible d'obtenir la commande Cd pour « coller ». ?

  5. Installer des programmes à partir du script Bash ?

Comment exécuter un script bash {7 méthodes}

Comment afficher les boîtes de dialogue de l'interface graphique dans le script bash à l'aide de Zenity

Un script BASH simple pour la post-installation du serveur Ubuntu

Une manière simple de comprendre la commande IOStat

Comment faire un script bash pour changer le format d'une date dans un fichier csv ?

Script bash pour supprimer le fichier le plus ancien d'un dossier