Обновление уровня яркости в зависимости от источника питания на 16.04 LTS

Я недавно перешел на 64-битную 16,04 LTS с 32-битной 14,04 LTS на своем ноутбуке Toshiba L645. В системе 14.04 LTS у меня был скрипт, который автоматически обновлял уровень яркости в зависимости от источника питания. К сожалению, я не сохранил этот скрипт до перезаписи системы. В настоящее время я использую следующий сценарий

#!/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="[110]"
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

. Однако этот сценарий работает только при переключении питания с переменного тока на аккумулятор и не восстанавливает уровень яркости после повторного включения переменного тока. Кроме того, один раз на батарее, этот скрипт постоянно пытается установить яркость на заданном уровне, и даже если я пытаюсь изменить это вручную, он сбрасывает это. Я хотел бы иметь возможность изменить уровень яркости вручную, если я хочу, даже в режиме батареи.

7
задан 18.06.2016, 17:12

4 ответа

Сценарий Serg, казалось, работал сначала. Однако через какое-то время процент оценивался неправильно особенно после возвращения из спящего режима. Это, возможно, были некоторые проблемы с qdbus, но уровень яркости не просто изменится. Так, я решил к hardcode уровень яркости с помощью значения от max_brightness файл. Вот мой /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 "$@"

В отличие от сценария Serg, этот требует полномочия пользователя root записать в brightness файл. Таким образом, я создал systemd service в /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

Наконец делают рабочую нагрузку при начальной загрузке с полномочиями пользователя root:

sudo systemctl enable auto-backlight.service
1
ответ дан 29.09.2019, 12:24

Каракатица является инструментом, который помогает автоматизировать изменения настроек на основе событий такой нас как включение и отключение источника питания

0
ответ дан 29.09.2019, 12:24

Введение

сценарий ниже позволяет помнить уровни яркости в зависимости от источника питания, используемого ноутбуком. Это принимает значение по умолчанию к 50% на батарее, 90% на AC.

Обзор опций и использования

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

Установка

Установка с помощью git через терминал:

  1. Выполнение sudo apt-get install git для установки git
  2. Выполнение mkdir $HOME/bin. Пропустите этот шаг, если $HOME/bin уже будет существовать
  3. cd $HOME/bin
  4. Выполнение git clone https://github.com/SergKolo/sergrep.git
  5. , то сценарий будет в $HOME/bin/sergrep/source_monitor.sh. Удостоверьтесь, что сценарий является исполняемым файлом с [1 110]
  6. , Добавляет сценарий как приложение запуска. Ищите меню Startup Applications в Тире Единицы или поиске Gnome. С другой стороны, выполненный gnome-session-properties команда в терминале для запуска меню. Добавьте полный путь к сценарию как приложение запуска так, чтобы это запустилось каждый раз, когда Вы входите в GUI.

, С другой стороны, можно скопировать и сохранить источник сценария собой, chmod +x file, и пройти шаг № 6, описанный выше.

, Чтобы заставить сценарий автоматически запуститься каждый раз Вы входите в систему Gnome или Единицы, используете утилита Startup Applications .

источник Сценария

#!/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="[111]"
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 "$@"
3
ответ дан 29.09.2019, 12:24

Иначе мог быть должен создать правила для udev и назвать простой сценарий для изменения значения яркости: Во-первых, создайте файл, названный auto-backlight.sh в Вашем корневом каталоге (или любое другое из Вашего предпочтения) с Вашим любимым редактором, как gedit, и скопируйте и вставьте следующий код:

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

Обратите внимание на то, что, что /sys/class/backlight/intel_backlight/ могло быть что-то другое в Вашей системе, как /sys/class/backlight/acpi_video0/. Также обратите внимание, что возможно необходимо изменить значение / 10 в зависимости от значения max_brightness, это могло быть 100, 50, 5, и т.д. поскольку это - фактор подразделения.

Дают полномочия выполнения новому созданному сценарию: chmod 771 auto-backlight.sh

Затем создают файл, названный 99auto-backlight.rules с Вашим любимым редактором, и помещают его в /etc/udev/rules.d/ папка: sudo gedit /etc/udev/rules.d/99auto-backlight.rules (или ссылка это с использованием команды "ln"), содержа следующие две строки:

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"

Замена /path/to/your/script/ с фактическим путем была auto-backlight.sh сценарием, расположен.

Кредит Alex Layton для его идеи здесь: https://unix.stackexchange.com/a/110469 и к Pilot6 для его идеи здесь: https://askubuntu.com/a/613816

1
ответ дан 29.09.2019, 12:24

Теги

Похожие вопросы