Skip to content

Instantly share code, notes, and snippets.

@lihk11
Last active December 1, 2020 05:17
Show Gist options
  • Save lihk11/a863253e696aa5988b3c2236693eb59c to your computer and use it in GitHub Desktop.
Save lihk11/a863253e696aa5988b3c2236693eb59c to your computer and use it in GitHub Desktop.
Gnome下用插件快速修改显示器亮度

基本原理

使用argos调用ddcutil修改显示亮度和对比度

兼容性

本教程在Ubuntu 18.04和Gnome 3.28.4下测试通过,更新版本的Gnome没有测试,欢迎测试!

具体步骤

安装依赖项

  1. 安装ddctuil和i2c-tools
sudo apt install ddcutil i2c-tools
  1. 将当前用户加入i2c用户组
sudo usermod -a -G i2c $(whoami)
  1. 安装Argos
https://extensions.gnome.org/extension/1176/argos/

获取当前的显示器信息

在终端中执行

ddctuil detect

记录显示器的I2C bus地址,后边会用到地址中的编号,对于下边的结构,/dev/i2c-8则是DELL U2414H的地址,此处的编号为8

Display 1
   I2C bus:             /dev/i2c-8
   EDID synopsis:
      Mfg id:           DEL
      Model:            DELL U2414H
      Serial number:    4CWX758KDN0L
      Manufacture year: 2015
      EDID version:     1.3
   VCP version:         2.1

Display 2
   I2C bus:             /dev/i2c-9
   EDID synopsis:
      Mfg id:           AOC
      Model:            22B2W
      Serial number:    Unspecified
      Manufacture year: 2020
      EDID version:     1.3
   VCP version:         2.2

设置待控制显示器的环境变量

假设我们想控制DELL U2414H,其对应的I2C bus编号为8,则需要在~/.pam_environment中添加相关的环境变量,注意修改对应的编号,如下

BUS_DELL=8

准备脚本

建立脚本目录

此处选择~/shell_scripts目录存放相关脚本

mkdir -p ~/shell_scripts/brightness

准备控制亮度的基础脚本

  1. 建立名为brightness_and_contrast.sh的脚本文件
touch ~/shell_scripts/brightness/brightness_and_contrast.sh
chmod +x ~/shell_scripts/brightness/brightness_and_contrast.sh
  1. 添加脚本内容 在brightness_and_contrast.sh中添加如下内容
#!/bin/bash
# shell for adjust brightness and contrast
BUS_NO=$1
BRIGHTNESS=$2
CONTRAST=$3

ddcutil -b $BUS_NO setvcp 10 $BRIGHTNESS
ddcutil -b $BUS_NO setvcp 12 $CONTRAST

echo $BRIGHTNESS > ~/shell_scripts/brightness/val_brightness_$BUS_NO
echo $CONTRAST > ~/shell_scripts/brightness/val_contrast_$BUS_NO

添加控制显示器的Argos脚本

假设我们想控制Dell显示器,注意将脚本的dell和对应的编号替换成你想要控制的显示器。

  1. 新建脚本文件
touch ~/.config/argos/dell.sh 
chmod +x ~/.config/argos/dell.sh
  1. 添加脚本内容
#!/usr/bin/env bash
# shell for argos, placed in ~/.config/argos with x permission

BUS_NO=$BUS_DELL

BRIGHTNESS=$(< ~/shell_scripts/brightness/val_brightness_$BUS_NO)
CONTRAST=$(<~/shell_scripts/brightness/val_contrast_$BUS_NO)

BRIGHTNESS_UP_5=$((BRIGHTNESS + 5))
BRIGHTNESS_UP_2=$((BRIGHTNESS + 2))
BRIGHTNESS_UP_1=$((BRIGHTNESS + 1))
BRIGHTNESS_DOWN_5=$((BRIGHTNESS - 5))
BRIGHTNESS_DOWN_2=$((BRIGHTNESS - 2))
BRIGHTNESS_DOWN_1=$((BRIGHTNESS - 1))

CONTRAST_UP_5=$((CONTRAST + 5))
CONTRAST_UP_2=$((CONTRAST + 2))
CONTRAST_UP_1=$((CONTRAST + 1))
CONTRAST_DOWN_5=$((CONTRAST - 5))
CONTRAST_DOWN_2=$((CONTRAST - 2))
CONTRAST_DOWN_1=$((CONTRAST - 1))


echo "DELL:$BRIGHTNESS%-$CONTRAST%|iconName=display-brightness-symbolic"
echo "---"
echo "UP| iconName=display-brightness-symbolic"
echo "--+5 | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO $BRIGHTNESS_UP_5 $CONTRAST_UP_5' terminal=false refresh=true"
echo "--+2 | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO $BRIGHTNESS_UP_2 $CONTRAST_UP_2' terminal=false refresh=true"
echo "--+1 | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO $BRIGHTNESS_UP_1 $CONTRAST_UP_1' terminal=false refresh=true"

echo "DOWN| iconName=display-brightness-symbolic"
echo "---5 | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO $BRIGHTNESS_DOWN_5 $CONTRAST_DOWN_5' terminal=false refresh=true"
echo "---2 | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO $BRIGHTNESS_DOWN_2 $CONTRAST_DOWN_2' terminal=false refresh=true"
echo "---1 | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO $BRIGHTNESS_DOWN_1 $CONTRAST_DOWN_1' terminal=false refresh=true"

echo "20% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 20 20' terminal=false refresh=true"
echo "25% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 25 25' terminal=false refresh=true"
echo "30% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 30 30' terminal=false refresh=true"
echo "35% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 35 35' terminal=false refresh=true"
echo "40% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 40 40' terminal=false refresh=true"
echo "50% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 50 50' terminal=false refresh=true"
echo "60% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 60 60' terminal=false refresh=true"
echo "70% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 70 70' terminal=false refresh=true"
echo "80% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 80 80' terminal=false refresh=true"
echo "90% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 90 90' terminal=false refresh=true"
echo "100% | bash='~/shell_scripts/brightness/brightness_and_contrast.sh $BUS_NO 100 100' terminal=false refresh=true"
  1. 重启电脑生效 此时在Gnome的顶端会出现Argos的插件,点击对应的选项即可更改显示器亮度 如下图

示意图

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment