根据16.04 LTS上的电源更新亮度级别

我最近在我的东芝L645笔记本电脑上从32位14.04 LTS迁移到64位16.04 LTS。 在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重新打开后不会恢复亮度级别。 此外,一旦打开电池,此脚本将始终尝试将亮度设置为预定义级别,即使我尝试手动更改它也会重置该值。 如果我想要电池模式,我希望能够手动改变亮度等级。

介绍

下面的脚本允许根据笔记本电脑使用的电源记住亮度级别。 电池默认为50%,AC为90%。

选项和用法概述

 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 。 确保脚本可以使用chmod +x $HOME/bin/sergrep/source_monitor.sh
  6. 将脚本添加为启动应用程序。 在Unity Dash或Gnome搜索中查找“启动应用程序”菜单。 或者,在终端中运行gnome-session-properties命令以启动菜单。 将脚本的完整路径添加为启动应用程序,以便每次登录GUI时都会启动它。

或者,您可以自己复制和保存脚本源, chmod +x file ,并完成上述步骤#6。

要在每次登录Gnome或Unity时自动启动脚本,请使用“ 启动应用程序”实用程序。

脚本来源

 #!/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 <&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 "$@" 

Serg的剧本似乎起初有效。 然而,经过一段时间后,特别是在从hibernate状态恢复后,该百分比被正确评估。 这可能是qdbus一些问题,但亮度级别不会随之改变。 因此,我决定使用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文件。 所以我在/etc/systemd/system/auto-backlight.service创建了一个systemd 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 

另一种方法是为udev创建规则并调用一个简单的脚本来更改亮度值:首先,使用您喜欢的编辑器(如gedit)在主目录(或您的任何其他偏好)中创建一个名为auto-backlight.sh的文件,并复制并粘贴下一个代码:

 #!/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/ 。 另请注意,根据max_brightness的值,您可能需要更改/ 10的值,它可能是max_brightness等,因为它是一个分max_brightness因子。

为新创建的脚本授予执行权限: 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

墨鱼是一种工具,可以根据插拔电源等事件自动更改设置