Bash-Skriptredirect-brightness

Bash-Skriptredirect-brightness

Betriebssystem: Ubuntu – 18.04 LTS

Ich habe 2 symbolische Links im /sys/class/backlight/Verzeichnis.

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/

Die Helligkeits-Hotkeys ändern den Wert von acpi_video0/brightness. Die tatsächliche Helligkeit des Displays wird dadurch jedoch nicht geändert.

Durch manuelles Ändern des Werts wird jedoch nv_backlight/brightnesstatsächlich die Helligkeit des Displays geändert.

Das Verknüpfen der Hotkeys mit nv_backlightstatt mit acpi_video0würde mein Problem lösen, aber ich weiß nicht, wie ich das machen soll.

Bearbeiten: Der Popup-Schieberegler für den Fortschrittsbalken wird beim Betätigen der Fn-Tasten für die Helligkeit (Hotkeys) auf dem Bildschirm angezeigt.

Bearbeiten:

  1. Eingang:

    cat /sys/class/backlight/nv_backlight/max_brightness
    

    Ausgabe:

    100
    
  2. Eingang:

    cat /sys/class/backlight/nv_backlight/actual_brightness
    

    Ausgabe (dieser Wert ändert sich automatisch in den gleichen Wert, den ich manuell eingegeben habe /sys/class/backlight/nv_backlight/brightness):

    10
    
  3. Eingang:

    cat /sys/class/backlight/acpi_video0/max_brightness
    

    Ausgabe:

    15
    

Antwort1

Bash-Skriptredirect-brightness

Ihr Problem ist, dass Funktionstasten zum Erhöhen/Verringern der Helligkeit aktualisiert werden, /sys/class/backlight/acpi_video0/brightnessanstatt/sys/class/backlight/nv_backlight/brightness

Die ursprüngliche Anforderung war, die Funktionstasten abzufangen und sie zur Steuerung des nv_backlightTreibers zu verwenden. Das Problem dabei ist:

  • Schwierige udevSkripte
  • Kein Popup-Benachrichtigungsschieberegler, der die Helligkeit ohne kompliziertes Python-Skripting anzeigt.

Die Lösung besteht darin, inotifyÄnderungen an zu überwachen acpi_video0. Berechnen Sie dann den Helligkeitsprozentsatz und wenden Sie denselben Prozentsatz auf an nv_backlight.

Im folgenden Bash-Skript müssen Sie Folgendes festlegen:

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

Platzieren Sie das Skript /usr/local/binund machen Sie es ausführbar mit:

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

Führen Sie zunächst das Skript über die Befehlszeile aus.

redirect-brightness -l

Wenn ein Problem auftritt, überprüfen Sie die Protokolldatei mit:

cat /tmp/redirect-brightness.log

Wenn alles gut funktioniert, fügen Sie es redirect-brightnesszu Ihren Startanwendungen hinzu.

redirect-brightnessBash-Skript

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

Ursprüngliche Antwort vom 11. Juni 2018.

Antwort zu „In Arbeit“

Es gibt viele nVidia-Benutzer mit ähnlichen Problemen in Ubuntu 18.04:


Vor dem Schreiben eines Skripts

Ich kann ein Skript schreiben, um Änderungen an /acpi_video nachzuahmen und /nv_backlight zu füllen, aber vorher versuche ich Folgendes:

  • Bearbeiten /etc/default/grub.
  • Findenquiet splash
  • Hinter dem Splash hinzufügen:acpi_backlight=vendor
  • Speicher die Datei
  • Laufensudo update-grub

Laut dieser Antwort sollte es bei Ihnen funktionieren:Xubuntu 18.04: Fn-Helligkeitstasten mit /sys/class/backlight/nv_backlight/ kompatibel machen


Wayland

Helligkeit funktioniert unter Wayland nicht. Stellen Sie sicher, dass Sie es nicht verwenden. Siehe:Die Helligkeit des Laptop-Bildschirms kann weder mit den Tasten noch mit dem Schieberegler eingestellt werden. Bearbeiten

verwandte Informationen