web-dev-qa-db-fra.com

Réduire la luminosité maximale de l'écran avec Ubuntu 18.04

J'essaie de définir une limite de luminosité maximale de l'écran sur mon Thinkpad X250 sous Ubuntu 18.04.

n peu de contexte: J'ai changé l'écran d'origine avec un nouveau (avant d'installer Ubuntu), les commandes de luminosité fonctionnent parfaitement, mais j'ai remarqué que, avec une luminosité supérieure à 55-60%, les modifications sont presque imperceptibles pour œil humain, mais il draine beaucoup plus de batterie et il commence à fonctionner très chaud. Je prévois de donner l'ordinateur à ma famille avec des utilisateurs jeunes et inexpérimentés. Je souhaite donc définir une limite qui n'exige aucune intervention de l'utilisateur à chaque démarrage et peut fonctionner pour tous les utilisateurs sans craindre une mise à jour via le gestionnaire de logiciels. pourrait effacer les paramètres.

Ce que j'ai essayé: J'ai essayé de modifier directement /sys/class/backlight/intel_backlight/max_brightness mais il refuse d'être modifié (même après avoir utilisé chmod pour changer les permissions). J'ai vu des réponses suggérant d'ajouter une commande du type "echo MAX_VALUE>/sys/class/backlight/intel_backlight/max_brightness" dans /etc/rc.local , mais je n'ai pas ce fichier. Notez que je n'ai pas de fichiers * acpi _ ** ni de dossier dans /sys/class/backlight/.

Quelle serait la bonne façon de définir une limite de luminosité permanente pour tous les utilisateurs?

3
NMZ

J'ai écrit un script pour surveiller /sys/class/backlight/*/brightness et le rediriger: Comment basculer entre les options de `/ sys/class/backlight` pour résoudre le problème de luminosité? .

Il peut être rapidement modifié selon vos besoins en ajoutant trois lignes:

    # Modification for: https://askubuntu.com/questions/1051171/lowering-screen-max-brightness-with-ubuntu-18-04
    # If brightness > 50, set to 50
    [[ WatchPer -gt 50 ]] && WatchPer=50

Script redirected-brightness modifié

#!/bin/bash

# NAME: redirect-brightness
# PATH: /usr/local/bin
# DESC: Redirect to correct driver when Ubuntu is adjusting the wrong
#       /sys/class/DRIVER_NAME/brightness

# DATE: June 13, 2018. Modified June 14, 2018.

# NOTE: Written for Ubuntu question:
#       https://askubuntu.com/q/1045624/307523

WatchDriver="/sys/class/backlight/intel_backlight"
PatchDriver="/sys/class/backlight/intel_backlight"

# Must be running as Sudo
if [[ $(id -u) != 0 ]]; then
    echo >&2 "Root access required. Use: 'Sudo redirect-brightness'"
    exit 1
fi

# inotifywait required
type inotifywait >/dev/null 2>&1 || \
    { echo >&2 "'inotifywait' required but it's not installed.  Aborting."; \
      echo >&2 "Use 'Sudo apt install inotify-tools' to install it.'"; \
      exit 1; }

# Was right watch driver directory name setup correctly?
if [[ ! -d $WatchDriver ]]; then
    echo >&2 "Watch directory: '$WatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Was right patch driver directory name setup correctly?
if [[ ! -d $PatchDriver ]]; then
    echo >&2 "Redirect to directory: '$PatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Get maximum brightness values
WatchMax=$(cat $WatchDriver/max_brightness)
PatchMax=$(cat $PatchDriver/max_brightness)

# PARM: 1="-l" or "--log-file" then write each step to log file.
fLogFile=false
if [[ $1 == "-l" ]] || [[ $1 == "--log-file" ]]; then
    fLogFile=true
    LogFile=/tmp/redirect-brightness.log
    echo redirect-brightness LOG FILE > $LogFile
    echo WatchMax: $WatchMax PatchMax: $PatchMax >> $LogFile
fi

SetBrightness () {
    # Calculate watch current percentage
    WatchAct=$(cat $WatchDriver/actual_brightness)
    WatchPer=$(( WatchAct * 100 / WatchMax ))
    [[ $fLogFile == true ]] && echo WatchAct: $WatchAct WatchPer: $WatchPer >> $LogFile
    # Reverse engineer patch brightness to set
    # Modification for: https://askubuntu.com/questions/1051171/lowering-screen-max-brightness-with-ubuntu-18-04
    # If brightness > 50, set to 50
    [[ WatchPer -gt 50 ]] && WatchPer=50
    PatchAct=$(( PatchMax * WatchPer / 100 ))
    echo $PatchAct | Sudo tee $PatchDriver/brightness
    [[ $fLogFile == true ]] && echo PatchAct: $PatchAct >> $LogFile
}

# When machine boots, set brightness to last saved value
SetBrightness

# Wait forever for user to press Fn keys adjusting brightness up/down.
while (true); do
    inotifywait --event modify $WatchDriver/actual_brightness
    [[ $fLogFile == true ]] && \
        echo "Processing modify event in $WatchDriver/actual_brightness" >> $LogFile
    SetBrightness
done
2
WinEunuuchs2Unix

Cela ne peut pas être fait comme vous le souhaitez car il s'agit d'une valeur en lecture seule du noyau Linux:

Il n'y a pas de code qui lira la valeur de max_brightness et agira en conséquence: le noyau ne fait que publier quelle que soit la valeur maximale de votre matériel.

Si vous essayez de forcer le noyau à accepter toujours les écritures, il lancera un Input/output error.

Peut-être qu'il y a un moyen de:

  • Intercepter les touches individuellement, puis refuser d'aller plus haut, mais cela signifierait en posant une nouvelle question et en rappelant ici pourquoi vous voudriez le faire.
  • demandez à Linus Torvalds lui-même de s'occuper de votre bug, mais il a très peu de chance de le résoudre dans un proche avenir ... ; -)
2
Fabby