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 CPU est à 100%, alors qu'elle est branchée, la batterie commence à se vider. C'est un drain très lent utilisant un chargeur USB 3.0 QC mais, je veux garder la tablette allumée 24/7 de manière assez fiable.
Je voudrais 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 haute performance.
Je veux l'utiliser pour des services tels que Kodi; il peut ne pas gâcher la lecture vidéo s'il est un peu étranglé.
Question secondaire, à part les informations sur la batterie, existe-t-il un moyen de connaître l'ampérage et les watts d'un adaptateur secteur?
Dans cette démo, la fenêtre cpuf
est à gauche et les informations système conky
sont à droite. Voici comment progresse la démo:
800
/3500
800
/800
et l'utilisation du processeur passe à 20%3500
/3500
et l'utilisation du processeur tombe à 10%Avec trois moniteurs, cpuf
peut apparaître à 3 mètres, utilisez donc le paramètre 1 --geometry
option pour le rapprocher de conky
:
Sudo cpuf --geometry="450x450+4720+80" /home/rick/Pictures/icons/cpu-intel-128.svg
--geometry
est la largeur de la fenêtre x hauteur + décalage de largeur + décalage de hauteurcpuf
Script bashCette section vous oblige à ouvrir un terminal avec Ctrl+Alt+T.
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 simple lorsque vous placez le script cpuf
dans un répertoire appartenant à la racine dans votre chemin de recherche. Par exemple: /usr/local/bin
.
Pour créer un script cpuf
, ouvrez l'éditeur avec Sudo -H gedit /usr/local/bin/cpuf
.
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="/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