web-dev-qa-db-fra.com

Comment basculer entre les options de `/ sys / class / backlight` pour résoudre le problème de luminosité?

OS: Ubuntu - 18.04 LTS

J'ai 2 liens symboliques dans le répertoire /sys/class/backlight/.

acpi_video0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/backlight/acpi_video0/
nv_backlight -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-LVDS-1/nv_backlight/

Les touches rapides de luminosité changent la valeur de acpi_video0/brightness. Mais cela ne change pas réellement la luminosité de l'écran.

Cependant, changer manuellement la valeur de nv_backlight/brightness change réellement la luminosité de l'écran.

Ainsi, lier les raccourcis clavier à nv_backlight au lieu de acpi_video0 résoudra mon problème, mais je ne sais pas comment le faire.

Modifier: la barre de progression du curseur contextuel apparaît à l’écran lors de l’utilisation des touches Fn pour la luminosité (touches de raccourci).

Modifier:

  1. Contribution:

    cat /sys/class/backlight/nv_backlight/max_brightness
    

    Sortie:

    100
    
  2. Contribution:

    cat /sys/class/backlight/nv_backlight/actual_brightness
    

    Sortie (cette valeur passe automatiquement à la même valeur, j'ai donné manuellement dans /sys/class/backlight/nv_backlight/brightness):

    10
    
  3. Contribution:

    cat /sys/class/backlight/acpi_video0/max_brightness
    

    Sortie:

    15
    
3
boobalan

Script Bash redirect-brightness

Votre problème est que les touches de fonction pour augmenter/diminuer la luminosité mettent à jour /sys/class/backlight/acpi_video0/brightness au lieu de /sys/class/backlight/nv_backlight/brightness.

La requête initiale consistait à intercepter les touches de fonction et à les utiliser pour contrôler le pilote nv_backlight. Le problème avec ceci est:

  • Tricky udev scripts
  • Aucun curseur de notification contextuel affichant la luminosité sans les scripts compliqués Python.

La solution consiste à utiliser inotify pour surveiller les modifications apportées à acpi_video0. Calculez ensuite le pourcentage de luminosité et appliquez ce même pourcentage à nv_backlight.

Dans le script bash ci-dessous, vous devez définir:

WatchDriver="/sys/class/backlight/acpi_video0/brightness"
PatchDriver="/sys/class/backlight/nv_backlight/brightness"

Placez le script dans /usr/local/bin et exécutez-le à l'aide de:

chmod a+x /usr/local/bin/redirect-brightness

Commencez par exécuter le script à partir de la ligne de commande à l'aide de

redirect-brightness -l

S'il y a un problème, vérifiez le fichier journal en utilisant:

cat /tmp/redirect-brightness.log

Si tout fonctionne bien, ajoutez redirect-brightness à vos applications de démarrage.

redirect-brightness script bash

#!/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
    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

Réponse originale le 11 juin 2018.

Réponse en cours

Ubuntu 18.04 compte de nombreux utilisateurs de nVidia ayant des problèmes similaires:


Avant d'écrire un script

Je peux écrire un script pour imiter les modifications apportées à/acpi_video et peupler/nv_backlight mais avant cela, essayez ceci:

  • Éditez /etc/default/grub.
  • Trouver quiet splash
  • Ajouter derrière splash: acpi_backlight=vendor
  • Sauvegarder le fichier
  • Exécuter Sudo update-grub

Selon cette réponse, cela devrait fonctionner pour vous: Xubuntu 18.04: les touches de luminosité Fn fonctionnent avec/sys/class/backlight/nv_backlight /


Wayland

La luminosité ne fonctionne pas sous Wayland. Assurez-vous de ne pas l'utiliser. Voir: La luminosité de l'écran du portable ne peut pas être réglée avec les boutons ou le curseur. Éditer

3
WinEunuuchs2Unix