Aktualisieren Sie die Helligkeitsstufe abhängig von der Stromquelle am 16.04 LTS


7

Ich habe kürzlich von 32 Bit 14.04 LTS auf meinem Toshiba L645-Laptop auf 64 Bit 16.04 LTS migriert. Im 14.04 LTS-System hatte ich ein Skript, das die Helligkeitsstufe abhängig von der Stromquelle automatisch aktualisierte. Leider habe ich dieses Skript nicht gespeichert, bevor ich das System überschrieben habe. Derzeit verwende ich das folgende Skript

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# Date: February 26 2016 
# Purpose: Brightness control that polls for
#          ac adapter presence. Uses
# Dependencies: on_ac_power script, dbus, Unity/Gnome 
# Written for: http://askubuntu.com/q/739617/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

# uncomment the line bellow for debugging
#set -x

ARGV0="$0"
ARGC=$#


main()
{

  # defaults
  local DISPLAY=:0
  local DECREASE=30
  local INCREASE=75
  local RCFILE="$HOME/.auto-backlightrc"
  #---

  # Check the settings
  if [ -f $RCFILE ]
  then 
       source $RCFILE 
  else
       create_rcfile $DECREASE $INCREASE
  fi
  #---

  # now actually test if we're using ac adapter
  if ! on_ac_power 
  then 
        change_brightness $DECREASE
  # The two lines bellow are optional for 
  # setting brightness if on AC. remove # 
  # if you want to use these two

  # else 
       # change_brightness $INCREASE
  fi

}

change_brightness()
{
  dbus-send --session --print-reply\
    --dest=org.gnome.SettingsDaemon.Power\
    /org/gnome/SettingsDaemon/Power \
    org.gnome.SettingsDaemon.Power.Screen.SetPercentage uint32:"$1"
}

create_rcfile()
{
  echo "DECREASE="$1 >  "$RCFILE"
  echo "INCREASE="$2 >> "$RCFILE"
}


while true
do
   main
   sleep 0.25
done

Dieses Skript funktioniert jedoch nur, wenn die Stromversorgung von Wechselstrom auf Batterie umgeschaltet wird, und stellt die Helligkeitsstufe nicht wieder her, sobald die Klimaanlage wieder eingeschaltet ist. Außerdem versucht dieses Skript im Akkubetrieb konsequent, die Helligkeit auf die vordefinierte Stufe einzustellen, und selbst wenn ich versuche, dies manuell zu ändern, wird dies zurückgesetzt. Ich möchte die Helligkeit manuell ändern können, wenn ich dies auch im Batteriemodus wünsche.


Sehr gut. Ich werde sehen, was ich tun kann. Wenn ich das richtig verstehe, soll das Skript auch die Helligkeit auf einem bestimmten Niveau steuern, wenn es auch auf Wechselstrom läuft, oder? Außerdem kann ich versuchen, eine Option hinzuzufügen, mit der das Skript manuell gestoppt / gestartet werden kann. Auf diese Weise können Sie es nach Belieben stoppen / starten. Wäre das akzeptabel?
Sergiy Kolodyazhnyy

Nicht genau. Ich möchte, dass das Skript die Helligkeit verringert, wenn es auf Batterie umgeschaltet wird, und es wieder auf Wechselstrom zurückstellt. Außerdem versucht das Skript derzeit beharrlich, die Helligkeitsstufe einzustellen. Ich möchte das nicht, da ich manchmal manuell einstellen möchte.
Thethakuri

Ich verstehe, Sie möchten also, dass es sich an die Helligkeitsstufen erinnert und nur dann Änderungen vornimmt, wenn sich die Stromquelle ändert. Andernfalls sollte sich das System wie gewohnt verhalten. Richtig ?
Sergiy Kolodyazhnyy

Ja, Sir, das war's!
Thethakuri

1
Ich habe einen Entwurf des Skripts gemacht. Es macht 90% der Anforderungen, merkt sich die Helligkeit, die bei der vorherigen Quelle verwendet wurde, hindert Sie jedoch nicht daran, die Helligkeit zu ändern, während Sie eine andere Quelle verwenden. Bisher ist es ein Kernstück von Github und ich beabsichtige, es zu verbessern, hier und da ein paar Funktionen hinzuzufügen, aber meistens ist es fertig. Lass mich wissen was du denkst. Die Helligkeit ist anfänglich auf 90 für Wechselstrom und 50 für Batterie eingestellt. Wenn Sie also zum ersten Mal mit Wechselstrom beginnen, springt sie auf 50 bei Batterie. Wenn Sie mit Batterie booten, springt sie bei Wechselstrom zum ersten Mal auf 90
Sergiy Kolodyazhnyy

Antworten:


3

Intro

Das folgende Skript ermöglicht das Speichern von Helligkeitsstufen in Abhängigkeit von der von einem Laptop verwendeten Stromquelle. Der Standardwert beträgt 50% bei Batterie und 90% bei Wechselstrom.

Übersicht über Optionen und Verwendung

source_monitor.sh [-a INT] [-b INT] [-v] [-h]

-a set initial brightness on AC adapter
-b set initial brightness on batter
-v enable verbose output
-h prints this help text

Installation

Installation über das gitDurchgangsterminal:

  1. Führen Sie sudo apt-get install gitdie Installationgit
  2. Ausführen mkdir $HOME/bin. Überspringen Sie diesen Schritt, falls $HOME/binbereits vorhanden
  3. cd $HOME/bin
  4. Lauf git clone https://github.com/SergKolo/sergrep.git
  5. Das Skript wird in sein $HOME/bin/sergrep/source_monitor.sh. Stellen Sie sicher, dass das Skript mit ausführbar istchmod +x $HOME/bin/sergrep/source_monitor.sh
  6. Fügen Sie das Skript als Startanwendung hinzu. Suchen Sie in der Unity Dash- oder Gnome-Suche nach dem Menü Startanwendungen. Alternativ können Sie den gnome-session-propertiesBefehl im Terminal ausführen , um das Menü zu starten. Fügen Sie den vollständigen Pfad zum Skript als Startanwendung hinzu, damit es jedes Mal gestartet wird, wenn Sie sich bei der GUI anmelden.

Alternativ können Sie die Skriptquelle selbst kopieren und speichern chmod +x fileund den oben beschriebenen Schritt 6 ausführen.

Verwenden Sie das Dienstprogramm " Startanwendungen", damit das Skript bei jeder Anmeldung bei Gnome oder Unity automatisch gestartet wird .

Skriptquelle

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# Date: June 18th 2016
# Purpose: Script that remembers and sets brightness
#      depending on power sources
# 
# Written for: https://askubuntu.com/q/788383/295286
# Tested on: Ubuntu 16.04 LTS , Ubuntu Kylin 16.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#
wait_ac_connect()
{
  while ! on_ac_power ; do : ; sleep 0.25 ; done
  $VERBOSE && echo "<<< adapter plugged in"
}

wait_ac_disconnect()
{
  while on_ac_power ; do : ; sleep 1.25 ; done 
  $VERBOSE && echo "<<< adapter unplugged"
}

change_brightness()
{
  qdbus org.gnome.SettingsDaemon \
       /org/gnome/SettingsDaemon/Power \
      org.gnome.SettingsDaemon.Power.Screen.SetPercentage "$1"
}

get_brightness()
{
  qdbus org.gnome.SettingsDaemon \
        /org/gnome/SettingsDaemon/Power \
        org.gnome.SettingsDaemon.Power.Screen.GetPercentage
}

print_usage()
{
cat <<EOF

source_monitor.sh [-a INT] [-b INT] [-v] [-h]

-a set initial brightness on AC adapter
-b set initial brightness on batter
-v enable verbose output
-h prints this help text

Copyright Serg Kolo , 2016
EOF
}

parse_args()
{
 # boiler-pate code for reusing, options may change
 local OPTIND opt  # OPTIND must be there, 
                   # opt can be renamed to anything
 # no leading : means errors reported(which is what i want)
 # : after letter means options takes args, no :  - no args
 while getopts "a:b:vh" opt
 do
   case ${opt} in
      a)  AC_PERCENTAGE="${OPTARG}"
        ;;
      b) BAT_PERCENTAGE="${OPTARG}"
        ;;
      v) VERBOSE=true
        ;;
      h) print_usage && exit 0
        ;;
     \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
    esac
  done
  shift $((OPTIND-1))
}

main()
{

    # default values, if -a,-b, or -v options given
    # they will be changed
    local BAT_PERCENTAGE=50
    local AC_PERCENTAGE=90
    local VERBOSE=false # for debugging

    parse_args "$@"

    while true
    do

      if on_ac_power ; then
         wait_ac_disconnect
          AC_PERCENTAGE=$(($(get_brightness)+1)) # too long to explain why +1
                         # just try it for yourself
          sleep 0.25
          change_brightness "$BAT_PERCENTAGE" > /dev/null
      else
          wait_ac_connect
          BAT_PERCENTAGE=$(($(get_brightness)+1))
          sleep 0.25
          change_brightness "$AC_PERCENTAGE" > /dev/null
      fi

      sleep 0.25

    done

}

main "$@"

Eine Frage: Was ist der Unterschied zwischen dieser Methode, qdbuseinfach und einfach echo 500 | sudo tee /sys/class/backlight/intel_backlight/brightness?
Thethakuri

Wenn Sie möchten, schauen Sie sich bitte meinen anderen Link an .
Thethakuri

Der große Unterschied ist, dass qdbusSie nicht brauchen sudo. Es verhält sich so, als würden Sie auf Funktionstasten auf der Tastatur klicken. Zweitens werden Prozentsätze anstelle der tatsächlichen Werte behandelt, die die Grafikkarte versteht, sodass ich das Rad nicht jedes Mal neu erfinden muss. Ich habe mir bereits Ihr anderes Problem angesehen, aber bisher habe ich keine Ahnung - ich bin nicht sehr gut informiert, wenn es um die Anzeigen auf der Oberseite geht.
Sergiy Kolodyazhnyy

Ja, ich dachte, es wäre su Zugang und die Absolutwertprobleme. Trotzdem danke für das Drehbuch!
Thethakuri

Ich teste gerade dieses Skript und bin auf etwas anderes gestoßen. Wenn Sie sich auf dem Anmeldebildschirm befinden und das Netzteil ein- und ausschalten, beträgt der berechnete Prozentsatz 50% bei Wechselstrom und 25% bei BVT (möglicherweise wird der standardmäßige maximale Helligkeitswert auf 50% zurückgesetzt). Gibt es eine Möglichkeit, den Prozentsatz der max_brightness fest zu codieren?
Thethakuri

1

Sergs Drehbuch schien zunächst zu funktionieren. Nach einiger Zeit wurde der Prozentsatz jedoch falsch ausgewertet, insbesondere nachdem er aus dem Winterschlaf zurückgekehrt war. Möglicherweise gab es einige Probleme, qdbusaber die Helligkeit ändert sich nicht nur. Also habe ich beschlossen, die Helligkeitsstufe mit dem Wert aus der max_brightnessDatei fest zu codieren . Hier ist mein /usr/local/bin/auto-backlight.sh:

#!/usr/bin/env bash

read MAX_BRIGHTNESS < /sys/class/backlight/intel_backlight/max_brightness

declare -i -r BATT_PERCENTAGE=45 
declare -i -r AC_PERCENTAGE=90 
declare -i -r ON_BATT=$(($MAX_BRIGHTNESS*$BATT_PERCENTAGE/100)) 
declare -i -r ON_AC=$(($MAX_BRIGHTNESS*$AC_PERCENTAGE/100))

wait_ac_connect() {   while ! on_ac_power ; do : ; sleep 0.25 ; done   echo "Adapter plugged in. Brightness level at $ON_AC" }

wait_ac_disconnect() {   while on_ac_power ; do : ; sleep 1.25 ; done  echo "Running on battery. Brightness level at $ON_BATT" }

main() {  
    while true
    do

      if on_ac_power ; then
        wait_ac_disconnect
         echo $ON_BATT > /sys/class/backlight/intel_backlight/brightness
      else
        wait_ac_connect
         echo $ON_AC > /sys/class/backlight/intel_backlight/brightness
      fi

      sleep 0.25

    done

}

main "$@"

Im Gegensatz zu Sergs Skript erfordert dieses ein Root-Privileg, um in eine brightnessDatei schreiben zu können . Also habe ich ein systemd serviceat erstellt /etc/systemd/system/auto-backlight.service:

[Unit]
Description=Change backlight on power source
ConditionFileIsExecutable=/usr/local/bin/auto-backlight.sh

[Service]
Type=simple
ExecStart=/usr/local/bin/auto-backlight.sh

[Install]
WantedBy=multi-user.target

Laden Sie den Dienst schließlich beim Booten mit Root-Rechten:

sudo systemctl enable auto-backlight.service

1

Eine andere Möglichkeit besteht darin, Regeln für udev zu erstellen und ein einfaches Skript aufzurufen, um den Helligkeitswert zu ändern: Erstellen Sie zunächst eine Datei mit dem Namen auto-backlight.shin Ihrem Ausgangsverzeichnis (oder einer anderen von Ihnen bevorzugten) mit Ihrem bevorzugten Editor wie gedit und kopieren und einfügen der nächste Code:

#!/bin/sh
# Adjust brightness of backlights based on power source
case $1 in
    # On battery
    true)
        # Dim screen backlight
        expr `cat /sys/class/backlight/intel_backlight/max_brightness` / 10 > \
            /sys/class/backlight/intel_backlight/brightness
    ;;

    # On AC
    false)
        # Dim screen backlight
        cat /sys/class/backlight/intel_backlight/max_brightness > \
            /sys/class/backlight/intel_backlight/brightness
    ;;
esac

return 0

Bitte beachten Sie, dass /sys/class/backlight/intel_backlight/dies in Ihrem System etwas anderes sein kann, wie z /sys/class/backlight/acpi_video0/. Beachten Sie auch, dass Sie möglicherweise den Wert von / 10abhängig vom Wert von ändern müssen. max_brightnessDies kann 100, 50, 5 usw. sein, da es sich um einen Divisionsfaktor handelt.

Geben Sie dem neu erstellten Skript Ausführungsberechtigungen: chmod 771 auto-backlight.sh

Erstellen Sie dann eine Datei 99auto-backlight.rulesmit dem Namen Ihres bevorzugten Editors und legen Sie sie in den /etc/udev/rules.d/Ordner: sudo gedit /etc/udev/rules.d/99auto-backlight.rules(oder verknüpfen Sie sie mit dem Befehl "ln"), der die folgenden zwei Zeilen enthält:

SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script/auto-backlight.sh true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script/auto-backlight.sh false"

Durch /path/to/your/script/den tatsächlichen Pfad ersetzen, in dem sich das Skript auto-backlight.sh befindet.

Dank an Alex Layton für seine Idee hier: https://unix.stackexchange.com/a/110469 und an Pilot6 für seine Idee hier: https://askubuntu.com/a/613816


0

Tintenfisch ist ein Tool, mit dem Sie Einstellungsänderungen basierend auf Ereignissen wie dem Ein- und Ausstecken der Stromversorgung automatisieren können

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.