sudo gedit /usr/share/X11/xorg.conf.d/10-nvidia-brightness.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Quadro K1000M"
Option "RegistryDwords" "EnableBrightnessControl=1"
EndSection
sudo gedit /etc/x11/xorg.conf
然后在设备部分内添加Option "RegistryDwords" "EnableBrightnessControl=1"
,将其粘贴到新的一行中。
然后重新启动你的电脑,一切应该正常。#!/bin/bash
# This script was originally created by 'qgj' from askubuntu. It has been modified
# to work using the BacklightBrighness setting available for some displays on the currrent nvidia driver
# It has also been modified to remove display specific configuration, instead applying the setting to all
# active displays which support the BacklightBrightness setting.
# Tested only with nvidia-settings-319.12 and nvidia-drivers-331.20 on Linux Mint 17 Mate
#
# Requirements:
# - NVIDIA Drivers (e.g. nvidia-current in Ubuntu)
# - NVIDIA Settings (nvidia-settings in Ubuntu)
#
# This script can be used to change the brightness on systems with an NVIDIA graphics card
# that lack the support for changing the brightness (probably needing acpi backlight).
# It uses "nvidia-settings -a" to assign new gamma or brightness values to the display.
#
# If this script fails, your display likely does not support the 'BacklightBrightness' option.
# In that event, execute 'nvidia-settings -n -q all' to see which options are available for the displays
#
# "nvidia-brightness.sh" may be run from the command line or can be assigned to the brightness keys on your Keyboard
# Type "nvidia-brightness.sh --help" for valid options.
if [ -z "${BASH}" ] ; then
echo "please run this script with the BASH shell"
exit 1
fi
usage ()
{
cat << ENDMSG
Usage:
nvidia-brightness.sh [ options ]
Options:
[ -bu ] or [ --brightness-up ] increase brightness by 10
[ -bu <no> ] or
[ --brightness-up <no> ] increase brightness by specified <no>
[ -bd ] or [ --brightness-down ] decrease brightness by 10
[ -bd <no> ] or
[ --brightness-down <no> ] decrease brightness by specified <no>
[ -i ] or [ --initialize ] Must be run once to create the settings file
(~/.nvidia-brightness.cfg).
Brightness settings from ~/.nvidia-settings-rc
will be used if file exists, otherwise
brightness will be set to 100.
[ -l ] or [ --load-config ] Load current settings from ~/.nvidia-brightness.cfg
(e.g. as X11 autostart script)
Examples:
nvidia-brightness -bd this will decrease gamma by 10
nvidia-brightness -bu 15 this will increase brightness by 15
ENDMSG
}
case $1 in
-h|--help)
usage
exit 0
esac
if [ "$1" != "-i" -a "$1" != "--initialize" ] ; then
if [[ ! -f ~/.nvidia-brightness.cfg ]]; then
echo 'You must run this script with the --initialize option once to create the settings file.'
echo 'Type "nvidia-brightness.sh --help" for more information.';
exit 1
fi
fi
#### INITIALIZE ####
initialize_cfg ()
{
BRIGHTNESS_TEMP=100
echo "BRIGHTNESS=$BRIGHTNESS_TEMP" > ~/.nvidia-brightness.cfg
source ~/.nvidia-brightness.cfg
echo "BRIGHTNESS: $BRIGHTNESS"
# Valid BacklightBrightness values are between 0 and 100
# Example: nvidia-settings -n -a BacklightBrightness=80
nvidia-settings -n -a BacklightBrightness=$BRIGHTNESS 1>/dev/null
exit $?
}
#### LOAD CONFIGURATION ####
load_cfg ()
{
source ~/.nvidia-brightness.cfg
echo "BRIGHTNESS: $BRIGHTNESS"
nvidia-settings -n -a BacklightBrightness=$BRIGHTNESS 1>/dev/null
}
#### BRIGHTNESS CHANGE ####
brightness_up ()
{
source ~/.nvidia-brightness.cfg
[[ -z $1 ]] && BRIGHTNESS_INC=10 || BRIGHTNESS_INC=$1
BRIGHTNESSNEW=$(( $BRIGHTNESS + $BRIGHTNESS_INC ))
[[ $BRIGHTNESSNEW -gt 100 ]] && BRIGHTNESSNEW=100
sed -i s/.*BRIGHTNESS=.*/BRIGHTNESS=$BRIGHTNESSNEW/g ~/.nvidia-brightness.cfg
source ~/.nvidia-brightness.cfg
echo "BRIGHTNESS: $BRIGHTNESS"
nvidia-settings -n -a BacklightBrightness=$BRIGHTNESS 1>/dev/null
}
brightness_down ()
{
source ~/.nvidia-brightness.cfg
[[ -z $1 ]] && BRIGHTNESS_INC=10 || BRIGHTNESS_INC=$1
BRIGHTNESSNEW=$(( $BRIGHTNESS - $BRIGHTNESS_INC ))
[[ $BRIGHTNESSNEW -lt 0 ]] && BRIGHTNESSNEW=0
sed -i s/.*BRIGHTNESS=.*/BRIGHTNESS=$BRIGHTNESSNEW/g ~/.nvidia-brightness.cfg
source ~/.nvidia-brightness.cfg
echo "BRIGHTNESS: $BRIGHTNESS"
nvidia-settings -n -a BacklightBrightness=$BRIGHTNESS 1>/dev/null
}
if [[ "$3" != "" ]]; then
usage
exit 1
fi
error_mixed_brightness ()
{
echo "Error: [ --brightness-up ] and [ --brightness-down ] can't be used together."
}
if [[ "$2" != "" ]]; then
[[ ! "$2" == ?(-)+([0-9]) ]] && usage && exit 1
fi
case $1 in
-bu|--brightness-up)
[ "$2" == "-bd" ] && error_mixed_brightness && exit 1
[ "$2" == "--brightness-down" ] && error_mixed_brightness && exit 1
brightness_up $2
;;
-bd|--brightness-down)
[ "$2" == "-bu" ] && error_mixed_brightness && exit 1
[ "$2" == "--brightness-up" ] && error_mixed_brightness && exit 1
brightness_down $2
;;
-h|--help)
usage
exit 0
;;
-i|--initialize)
if [ "$2" != "" ]; then usage; exit 1; fi
initialize_cfg
exit $?
;;
-l|--load-config)
if [ "$2" != "" ]; then usage; exit 1; fi
load_cfg
exit 0
;;
*)
usage
exit 1
esac
nvidia-brightness.sh:
#!/bin/sh
# Tested only with nvidia-settings-319.12 and nvidia-drivers-319.17 on Funtoo Linux running XFCE 4.10
#
# Requirements:
# - NVIDIA Drivers (e.g. nvidia-current in Ubuntu)
# - NVIDIA Settings (nvidia-settings in Ubuntu)
# - xrandr (used by default to determine the correct display name)
#
# This script can be used to change the brightness on systems with an NVIDIA graphics card
# that lack the support for changing the brightness (probably needing acpi backlight).
# It uses "nvidia-settings -a" to assign new gamma or brightness values to the display.
#
# "nvidia-brightness.sh" may be run from the command line or can be assigned to the brightness keys on your Keyboard
# e.g. in XFCE4.
#
# Type "nvidia-brightness.sh --help" for valid options.
usage ()
{
cat << ENDMSG
Usage:
nvidia-brightness.sh [ options ]
Options:
[ -gu ] or [ --gamma-up ] increase gamma by 0.1
[ -gd ] or [ --gamma-down ] decrease gamma by 0.1
[ -bu ] or [ --brightness-up ] increase brightness by 0.1
[ -bd ] or [ --brightness-down ] decrease brightness by 0.1
[ -i ] or [ --initialize ] Must be run once to create the settings file
(~/.nvidia-brightness.cfg).
Brightness settings from ~/.nvidia-settings-rc
will be used if file exists, otherwise
gamma will be set to 1.0 and brightness to 0.0
(NVIDIA Standard).
[ -l ] or [ --load-config ] Load current settings from ~/.nvidia-brightness.cfg
(e.g. as X11 autostart script)
Examples:
nvidia-brightness -gd this will decrease gamma by 0.1
nvidia-brightness -bu -gd this will increase brightness by 0.1 and decrease gamma by 0.1
ENDMSG
}
case $1 in
-h|--help)
usage
exit 0
esac
if [ "$1" != "-i" -a "$1" != "--initialize" ]; then
if [ ! -f ~/.nvidia-brightness.cfg ]; then
echo 'You must run this script with the --initialize option once to create the settings file.'
echo 'Type "nvidia-brightness.sh --help" for more information.';
exit 1
fi
fi
#### INITIALIZE ####
initialize_cfg ()
{
CONNECTED="[`xrandr | grep " connected" | awk '{ print $1 }'`]"
#CONNECTED="`cat ~/.nvidia-settings-rc | grep RedBrightness | grep -o "\[.*]"`"
#CONNECTED="[DVI-I-1]"
#CONNECTED="[dpy:2]"
#CONNECTED="0"
if [ -f ~/.nvidia-settings-rc ]; then
if [ "`grep RedGamma ~/.nvidia-settings-rc`" != "" ]; then
if [ "`grep RedBrightness ~/.nvidia-settings-rc`" != "" ]; then
GAMMA_TEMP=`grep RedGamma= ~/.nvidia-settings-rc | sed s/^.*=//`
BRIGHTNESS_TEMP=`grep RedBrightness= ~/.nvidia-settings-rc | sed s/^.*=//`
NVIDIA_SETTINGS_OK=1
fi
fi
fi
[ "$NVIDIA_SETTINGS_OK" != "1" ] && \
GAMMA_TEMP=1.000000 \
BRIGHTNESS_TEMP=0.000000
echo "\
CONNECTED_DISPLAY=$CONNECTED
GAMMA=$GAMMA_TEMP
BRIGHTNESS=$BRIGHTNESS_TEMP" > ~/.nvidia-brightness.cfg
source ~/.nvidia-brightness.cfg
GAMMACOMMA=`echo $GAMMA | sed s/"\."/"\,"/`
BRIGHTNESSCOMMA=`echo $BRIGHTNESS | sed s/"\."/"\,"/`
nvidia-settings -n -a $CONNECTED_DISPLAY/Gamma=$GAMMACOMMA -a $CONNECTED_DISPLAY/Brightness=$BRIGHTNESSCOMMA 1>/dev/null
}
#### LOAD CONFIGURATION ####
load_cfg ()
{
source ~/.nvidia-brightness.cfg
GAMMACOMMA=`echo $GAMMA | sed s/"\."/"\,"/`
BRIGHTNESSCOMMA=`echo $BRIGHTNESS | sed s/"\."/"\,"/`
nvidia-settings -n -a $CONNECTED_DISPLAY/Gamma=$GAMMACOMMA -a $CONNECTED_DISPLAY/Brightness=$BRIGHTNESSCOMMA 1>/dev/null
}
#### GAMMA CHANGE ####
gamma_up ()
{
source ~/.nvidia-brightness.cfg
GAMMANEW=`echo $GAMMA | awk '{printf "%f", $GAMMA + 0.100000}'`
GAMMACOMMA=`echo $GAMMANEW | sed s/"\."/"\,"/`
nvidia-settings -n -a $CONNECTED_DISPLAY/Gamma=$GAMMACOMMA 1>/dev/null
sed -i s/.*GAMMA=.*/GAMMA=$GAMMANEW/g ~/.nvidia-brightness.cfg
}
gamma_down ()
{
source ~/.nvidia-brightness.cfg
GAMMANEW=`echo $GAMMA | awk '{printf "%f", $GAMMA - 0.100000}'`
GAMMACOMMA=`echo $GAMMANEW | sed s/"\."/"\,"/`
nvidia-settings -n -a $CONNECTED_DISPLAY/Gamma=$GAMMACOMMA 1>/dev/null
sed -i s/.*GAMMA=.*/GAMMA=$GAMMANEW/g ~/.nvidia-brightness.cfg
}
#### BRIGHTNESS CHANGE ####
brightness_up ()
{
source ~/.nvidia-brightness.cfg
BRIGHTNESSNEW=`echo $BRIGHTNESS | awk '{printf "%f", $BRIGHTNESS + 0.100000}'`
BRIGHTNESSCOMMA=`echo $BRIGHTNESSNEW | sed s/"\."/"\,"/`
nvidia-settings -n -a $CONNECTED_DISPLAY/Brightness=$BRIGHTNESSCOMMA 1>/dev/null
sed -i s/.*BRIGHTNESS=.*/BRIGHTNESS=$BRIGHTNESSNEW/g ~/.nvidia-brightness.cfg
}
brightness_down ()
{
source ~/.nvidia-brightness.cfg
BRIGHTNESSNEW=`echo $BRIGHTNESS | awk '{printf "%f", $BRIGHTNESS - 0.100000}'`
BRIGHTNESSCOMMA=`echo $BRIGHTNESSNEW | sed s/"\."/"\,"/`
nvidia-settings -n -a $CONNECTED_DISPLAY/Brightness=$BRIGHTNESSCOMMA 1>/dev/null
sed -i s/.*BRIGHTNESS=.*/BRIGHTNESS=$BRIGHTNESSNEW/g ~/.nvidia-brightness.cfg
}
if [ "$3" != "" ]; then
usage
exit 1
fi
error_mixed_gamma ()
{
echo "Error: [ --gamma-up ] and [ --gamma-down ] can't be used together."
}
error_mixed_brightness ()
{
echo "Error: [ --brightness-up ] and [ --brightness-down ] can't be used together."
}
if [ "$2" != "" ]; then
[ "$2" != "-bu" -a "$2" != "--brightness-up" -a "$2" != "-bd" -a "$2" != "--brightness-down" \
-a "$2" != "-gu" -a "$2" != "--gamma-up" -a "$2" != "-gd" -a "$2" != "--gamma-down" ] && usage && exit 1
fi
case $1 in
-gu|--gamma-up)
[ "$2" == "-gd" ] && error_mixed_gamma && exit 1
[ "$2" == "--gamma-down" ] && error_mixed_gamma && exit 1
gamma_up
;;
-gd|--gamma-down)
[ "$2" == "-gu" ] && error_mixed_gamma && exit 1
[ "$2" == "--gamma-up" ] && error_mixed_gamma && exit 1
gamma_down
;;
-bu|--brightness-up)
[ "$2" == "-bd" ] && error_mixed_brightness && exit 1
[ "$2" == "--brightness-down" ] && error_mixed_brightness && exit 1
brightness_up
;;
-bd|--brightness-down)
[ "$2" == "-bu" ] && error_mixed_brightness && exit 1
[ "$2" == "--brightness-up" ] && error_mixed_brightness && exit 1
brightness_down
;;
-h|--help)
usage
exit 0
;;
-i|--initialize)
if [ "$2" != "" ]; then usage; exit 1; fi
initialize_cfg
exit 0
;;
-l|--load-config)
if [ "$2" != "" ]; then usage; exit 1; fi
load_cfg
exit 0
;;
*)
usage
exit 1
esac
case $2 in
-gu|--gamma-up)
gamma_up
;;
-gd|--gamma-down)
gamma_down
;;
-bu|--brightness-up)
brightness_up
;;
-bd|--brightness-down)
brightness_down
;;
-h|--help)
usage
exit 0
;;
"")
;;
*)
usage
exit 1
esac
使用方法:
将文件保存在您的路径中的某个位置,例如
/usr/local/bin/nvidia-brightness.sh
不要忘记
chmod +x /usr/local/bin/nvidia-brightness.sh
nvidia-brightness.sh -i
nvidia-settings.sh --help
更多选项:
Usage:
nvidia-brightness.sh [ options ]
Options:
[ -gu ] or [ --gamma-up ] increase gamma by 0.1
[ -gd ] or [ --gamma-down ] decrease gamma by 0.1
[ -bu ] or [ --brightness-up ] increase brightness by 0.1
[ -bd ] or [ --brightness-down ] decrease brightness by 0.1
[ -i ] or [ --initialize ] Must be run once to create the settings file
(~/.nvidia-brightness.cfg).
Brightness settings from ~/.nvidia-settings-rc
will be used if file exists, otherwise
gamma will be set to 1.0 and brightness to 0.0
(NVIDIA Standard).
[ -l ] or [ --load-config ] Load current settings from ~/.nvidia-brightness.cfg
(e.g. as X11 autostart script)
Examples:
nvidia-brightness -gd this will decrease gamma by 0.1
nvidia-brightness -bu -gd this will increase brightness by 0.1 and decrease gamma by 0.1
有些电脑,比如我的Lenovo W520,没有Option "RegistryDwords" "EnableBrightnessControl=1"
这一行。如果你是其中不幸的一个,可以尝试使用nvidiabl
驱动程序(链接在此处)。
nvidiabl
驱动程序提供了一种正确的方法来改变屏幕亮度。在某些笔记本电脑上,Option "RegistryDwords" "EnableBrightnessControl=1"
的hack会导致背光控制器或GPU发出高频噪音。
只需从此处下载并安装最新的Deb文件:https://github.com/downloads/guillaumezin/nvidiabl/nvidiabl-dkms_0.72_all.deb
然后运行:
echo "nvidiabl" | sudo tee -a /etc/modules
### Code by forgottenrip@yahoo.com ###
my $find1 = "0/RedBrightness=";my $find2 = "0/RedGamma=";
open FILE, "<Nvidia-Settings.cfg";
my @lines = <FILE>;
for (@lines) {
if ($_ =~ /$find1/) { chomp $_;$value= substr($_,16,5); }
if ($_ =~ /$find2/) { chomp $_;$value2= substr($_,11,5);}
}
my @Lines;
if ( $value > 0.0) { $value = $value - 0.30 };
if ( $value2 > 1.1) { $value2 = $value2 - 0.08 };
$last_value = $value + 0.30;
$Lines[0] ="0/RedBrightness=".$last_value;
$Lines[1] ="0/GreenBrightness=".$last_value;;
$Lines[2] ="0/BlueBrightness=".$last_value;;
$last_value = $value + 0.30;
$Lines[3] ="0/RedContrast=".$last_value;;
$Lines[4] ="0/GreenContrast=".$last_value;;
$Lines[5] ="0/BlueContrast=".$last_value;;
$last_value = $value2 + 0.08;
$Lines[6] ="0/RedGamma=".$last_value;;
$Lines[7] ="0/GreenGamma=".$last_value;;
$Lines[8] ="0/BlueGamma=".$last_value;;
$filename = "Nvidia-Settings.cfg";
open fh2,'>',$filename or die ("can't open '$filename': $! \n");
foreach ( @Lines )
{ chomp;print "$_\n";print fh2 "$_\n"; };
close fh2;
`nvidia-settings -l --config=Nvidia-Settings.cfg`;
### Code by forgottenrip@yahoo.com ###
my $find1 = "0/RedBrightness=";my $find2 = "0/RedGamma=";
open FILE, "<Nvidia-Settings.cfg";
my @lines = <FILE>;
for (@lines) {
if ($_ =~ /$find1/) {chomp $_;$value= substr($_,16,5);}
if ($_ =~ /$find2/) {chomp $_;$value2= substr($_,11,5);}
}
my @Lines;
if ( $value < -0.80) { $value = $value + 0.30 };
if ( $value2 < 0.8) { $value2 = $value2 + 0.08 };
$last_value = $value - 0.30;
$Lines[0] ="0/RedBrightness=".$last_value;
$Lines[1] ="0/GreenBrightness=".$last_value;;
$Lines[2] ="0/BlueBrightness=".$last_value;;
$last_value = $value - 0.30;
$Lines[3] ="0/RedContrast=".$last_value;;
$Lines[4] ="0/GreenContrast=".$last_value;;
$Lines[5] ="0/BlueContrast=".$last_value;;
$last_value = $value2 - 0.08;
$Lines[6] ="0/RedGamma=".$last_value;;
$Lines[7] ="0/GreenGamma=".$last_value;;
$Lines[8] ="0/BlueGamma=".$last_value;;
$filename = "Nvidia-Settings.cfg";
open fh2,'>',$filename or die ("can't open '$filename': $! \n");
foreach ( @Lines )
{ chomp;print "$_\n";print fh2 "$_\n"; };
close fh2;
`nvidia-settings -l --config=Nvidia-Settings.cfg`;
0/RedBrightness=0.1
0/GreenBrightness=0.1
0/BlueBrightness=0.1
0/RedContrast=0.1
0/GreenContrast=0.1
0/BlueContrast=0.1
0/RedGamma=1.14
0/GreenGamma=1.14
0/BlueGamma=1.14
sudo apt-get install compizconfig-settings-manager
user$ perl Brightness/Brightness-Up.pl
user$ perl Brightness/Brightness-Down.pl
问题已解决!许多Linux上的NVIDIA视频驱动程序存在回归问题,导致后续驱动程序版本中断屏幕亮度控制,因此您应该首先安装最新的NVIDIA驱动程序,然后如果重新启动后您的屏幕亮度控制没有自动工作(在此页面上没有任何其他修复方法),则逐步从制造商直接安装旧的NVIDIA驱动程序版本,直到其中一个自然地与您的屏幕亮度控制功能按钮兼容为止。
在一台 Lenovo ThinkPad P15 Gen 2笔记本电脑上进行了测试,其配置详情如下:搭载NVIDIA RTX A2000 4GB GDDR6显卡和Intel Core i9-11950H处理器(8核心/16线程),运行Ubuntu 22.04。
/etc/default/grub
文件、/usr/share/X11/xorg.conf.d/10-nvidia-brightness.conf
文件和/etc/X11/xorg.conf
文件,以及通过echo 100 > /sys/class/backlight/nvidia_0/brightness
直接写入/sys/class/backlight/nvidia_0/brightness
文件。例如,我在使用X11视频服务器/窗口管理器和Wayland启动时都尝试了这些设置,但没有任何区别。这些所谓的“修复”都没有起作用。这篇来自@adrianer84的非常有帮助的帖子给了我一个想法,尝试使用越来越旧的驱动版本,直到找到一个可用的。他说:
我可以确认,在Ubuntu 22.04和GeForce RTX 3600移动版上,使用470.XX.XX驱动程序并设置
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1"
可以控制Legion 7 (2021) (16ACHg6)的背光 - 而在515.XX或520.56.06上则不行(使用520.56.06甚至还有一个更严重的问题:睡眠后背光完全关闭 - 因此显示器基本上是关闭的。由于无法控制它,您必须强制重新启动…)。
请在评论中报告您的笔记本电脑、显卡以及哪些驱动程序版本可以或不能通过功能按钮控制亮度。
我不建议只使用旧版本开始,因为一旦你掌握了它,安装新的驱动程序版本非常容易和快速(<5分钟),我们想要获取最新的驱动程序版本,以获取最新的功能和错误修复,而不会出现退步。
nvidia-driver-525
版本525.85.05
存在问题。我刚刚回滚到了nvidia-driver-515
,现在一切都正常运行。 - broomrider