Я недавно переместил в 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="$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
Однако этот сценарий только работает, когда питание переключается с AC на Батарею и не восстанавливает уровень яркости, после того как AC вернулся на. Кроме того, однажды на Батарее, этот сценарий последовательно пытается установить яркость на предопределенном уровне и даже если я пытаюсь изменить это вручную, это сбрасывает это. Я хотел бы смочь изменить уровень яркости вручную, если я требую даже в режиме работы от аккумулятора.
Сценарий 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
Каракатица является инструментом, который помогает автоматизировать изменения настроек на основе событий такой нас как включение и отключение источника питания
Введение
Сценарий ниже позволяет помнить уровни яркости в зависимости от источника питания, используемого ноутбуком. Это принимает значение по умолчанию к 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
через терминал:
sudo apt-get install git
устанавливать git
mkdir $HOME/bin
. Пропустите этот шаг если $HOME/bin
уже существуетcd $HOME/bin
git clone https://github.com/SergKolo/sergrep.git
$HOME/bin/sergrep/source_monitor.sh
. Удостоверьтесь, что сценарий является исполняемым файлом с chmod +x $HOME/bin/sergrep/source_monitor.sh
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="$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 "$@"
Иначе мог быть должен создать правила для 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