安装NVIDIA驱动程序后亮度无法调节。

我最近在我的Mac Book Pro 7,1上安装了Ubuntu 11.10。我安装了NVIDIA驱动程序(285)。亮度调节键(F1和F2)可以使用,也会显示亮度调节框,但是却没有任何效果。我可以在NVIDIA X Server Settings应用程序中改变亮度。请问有什么方法可以在不卸载驱动程序的情况下使亮度调节正常工作吗?提前感谢您的帮助。

同样的事情也发生在我的MacBook Pro 5,5上。 - Cerin
1只是一个跟进,我尝试了所有记录的解决方案,但没有一个有效,包括使用最新的Nvidia驱动程序。然而,当我清除了Nvidia驱动并使用开源的Nouveau驱动时,屏幕调暗立即开始工作。 - Cerin
@Cerin 为什么不把这个写成一个答案,包括所有的步骤,这样初学者也能够跟着做呢?完成后给我留个评论,如果是一个好答案,我会给它点赞,而且它可能也会帮到其他人。 - Elder Geek
1@ElderGeek,很遗憾,Nouveau不支持挂起/恢复功能,这使得它对于笔记本电脑来说毫无用处,这真是可惜,因为除此之外它比Nvidia驱动更好。我升级到了14.04版本并安装了Nvidia 340驱动,现在屏幕亮度调节正常工作了。 - Cerin
20个回答

我成功地在我的Lenovo W530上的Ubuntu 12.04系统中使亮度调节键正常工作。
现在的X自动配置,所以创建一个xorg.conf文件可能会使您的系统变得不灵活。相反,您可以在/usr/share/X11/xorg.conf.d/目录下的文件中添加一个部分,X会将该部分包含在它自动生成的配置中。
因此,要使屏幕亮度调节键与您的Nvidia显卡正常工作,请在xorg.conf.d目录中创建一个文件,例如:
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

注销然后重新登录,或者重启,然后你的亮度按键应该就能正常使用了!
(我在这里写了一篇博文here

谢谢,这对我在联想W530上使用Ubuntu 14.04和官方NVIDIA驱动(从NVIDIA官网下载)非常有效。 - Saeed Zarinfam
我有一台装有Linux Mint 17.3的W530机器,这个解决方案直接适用(对我来说,只需注销并重新登录即可,无需重启)。 - user22363
完美地工作了,这应该被标记为正确答案。 - OKAN
在重新启动系统后,Lubuntu 16.04 对我有效。 - Andritchi Alexei
在Mint 18、GT 330M和16.04上工作过;注销就足够了。 - Aubergine
1在MacBook 5.1上与GeForce 9400M不适用。在grub之后启动后出现黑屏。不得不使用来自USB驱动器的live镜像来删除文件。我正在使用全新安装的Ubuntu Gnome 16.04。 - mace
3如何找到BoardName?听起来可能很愚蠢,但这可能是我无法让它工作的原因。 - davidbaumann
这对我也起作用了,Ubuntu 16.04 Nvidia gf108glm Quadro 1000m,使用NVIDIA二进制驱动程序,版本375.66。谢谢! - JAT2007
不管BoardName是什么,对我来说似乎都“奏效”... - rogerdpack
谢谢。即使我使用一台旧的Macbook Pro 5.5和Ubuntu 20.04,这个方法对我也很有效。 - Cerin
这个答案和其他答案都对我没用,但是安装一个稍旧的驱动版本(在我的情况下是515.86.01而不是525.60.11)确实有效。这里是我的详细说明。 - Gabriel Staples

我在笔记本电脑上遇到了类似的问题,您需要在您的 /etc/X11/xorg.conf 中添加一个选项。
运行命令: sudo nano /etc/X11/xorg.conf
找到"Device"部分的行,并添加以下内容: Option "RegistryDwords" "EnableBrightnessControl=1"

这也适用于Ubuntu 12.04。 - shaneonabike
Xubuntu 12.04也能正常运行。 - Stasik
这在12.04版本对我来说不起作用。 - Cerin
这在18.04版本对我来说不起作用。 - Hany Alsamman
118.04没有这个文件,但是创建一个新的.conf文件就像Chris Pearce的答案一样有效。 - rogerdpack

你需要启用亮度控制。 打开终端并输入sudo gedit /etc/x11/xorg.conf 然后在设备部分内添加Option "RegistryDwords" "EnableBrightnessControl=1",将其粘贴到新的一行中。 然后重新启动你的电脑,一切应该正常。

2不要在Ubuntu 18上这样做。路径x11应该是X11,并且应该放在Section内,但即使如此也无法正常工作。 - Shital Shah

谢谢您提供了优秀的脚本 qgj。很遗憾这个 bug 仍然存在,需要使用解决方法。我和 James 遇到了同样的问题,由于 nvidia-settings 不再支持我们特定的显示类型选项导致出错。幸运的是,有一个更好的设置可用于背光亮度。我已经修改了 bash 脚本以使用该设置。
#!/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亮度bash脚本
上述的Perl脚本对我来说不起作用,所以我写了自己的脚本作为一个bash脚本(因为我不懂Perl)。它有点长,但它可以自己创建设置文件,并且可以使用命令行选项同时调整亮度或伽马值,非常方便。我在XFCE4中使用--brightness-up和--brightness-down开关来控制键盘上的亮度按键。在KDE / GNOME中也可以轻松分配。

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

这看起来正是我想要的,但是我遇到了一个错误:错误:解析赋值'/Gamma='时出错(未指定属性值)。 - James

有些电脑,比如我的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

确保在计算机启动时加载模块。

我个人正在使用Vaio VPCCW21FX(Nvidia显卡)和Ubuntu Studio 11.10.. 我尝试了很多解决方案,但都无法解决我的LCD亮度问题! 最后,我编写了这两个Perl文件,手动设置Nvidia驱动配置文件中的亮度/对比度和伽马函数。
只有在您能够在Nvidia X Server Settings中更改亮度的情况下,才会有帮助。
步骤1:创建此文件并将其命名为"Brightness-Up.pl" (您可以使用任何文本编辑工具,如:gedit,nano,vi等复制并粘贴)
    ### 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`;

第二步:然后创建另一个文件,命名为"Brightness-Down.pl",并填入以下代码:
    ### 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`;

步骤3:你需要创建另一个文件,其中包含Nvidia设置。将其命名为“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

那就是!现在将这些文件放在一个唯一的文件夹中... 你必须绑定功能键到这两个 Perl 文件。你可以使用Compiz>commands来完成这个操作。 运行下面的命令来安装 compizconfig-settings-manager。
sudo apt-get install compizconfig-settings-manager

或者你可以在终端中分别运行这两个命令。
user$ perl Brightness/Brightness-Up.pl
user$ perl Brightness/Brightness-Down.pl

亮度是我放这些文件的文件夹。

FYI,我刚在一台Lenovo W520上解决了这个问题,只需在xorg.conf中添加以下简单的一行代码: Option "RegistryDwords" "EnableBrightnessControl=1"
不需要其他任何虚假信息,使用当前的NVidia版本(具体来说是346.35),一切都正常工作。

其他的答案都是尝试的好方法,但要注意某些Ubuntu/Linux内核和Nvidia驱动程序的组合可能无法正常工作。我用了12.04版本很多年,即使我尝试了以上所有的解决办法,我的Macbook Pro 5,5上也无法得到任何Nvidia驱动程序来支持屏幕调暗。
当我最终升级到14.04版本时,我尝试了Nouveau驱动程序,它支持屏幕调暗,而且速度更快、更可靠,比Nvidia好。不幸的是,它不支持挂起/恢复功能,在笔记本电脑上毫无用处。我又切换回了Nvidia,但有几个驱动程序导致X/lightdm崩溃,甚至无法登录。最后,我发现Nvidia 340驱动程序在我的Macbook Pro 5,5和Ubuntu 14.04上是稳定的,并且还支持调暗功能。

如何找到与您的亮度功能按钮兼容的NVIDIA驱动程序

问题已解决!许多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启动时都尝试了这些设置,但没有任何区别。这些所谓的“修复”都没有起作用。
我还尝试了其他网站和论坛上的解决方案。对于我的笔记本电脑和NVIDIA 525.60.11 Linux图形驱动程序,那些其他解决方案一个也没起作用!
总之,无论是Wayland还是X,我得到的结果都是一样的。

这篇来自@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甚至还有一个更严重的问题:睡眠后背光完全关闭 - 因此显示器基本上是关闭的。由于无法控制它,您必须强制重新启动…)。

虽然可以工作,但我不建议你这样做的原因

你的BIOS/UEFI可能支持(应该支持)在“混合图形”和“独立图形”之间设置图形模式。NVIDIA表示,您必须使用“独立图形”模式才能与其驱动程序兼容。然而,如果您将模式设置为“混合图形”,那么您的亮度按钮将再次起作用,因为此时内置于CPU中的集成显卡将处理该功能,但是您可能会遇到NVIDIA图形驱动程序的故障和问题,NVIDIA建议使用“独立”模式。
所以,请进入您的BIOS/UEFI并将设置更改为“独立图形”模式:

enter image description here

我的UEFI告诉我的意思是(重点添加):
离散图形模式将实现更高的图形性能。 混合图形模式以集成图形模式运行,以实现更长的电池续航时间,并根据需要启用离散图形。
这告诉我,内部集成在CPU芯片中的集成显卡更高效,而NVIDIA显卡则是外部的“离散图形”显卡。

enter image description here

NVIDIA建议仅使用"独立显卡",但在其下载链接的"附加信息"选项卡中(例如,515.86.01的链接),如此处所示:https://www.nvidia.com/download/driverResults.aspx/194662/en-us/(已添加强调):
一些支持的GPU的设计可能与NVIDIA Linux驱动程序不兼容:特别是带有可切换(混合)或Optimus图形的笔记本和一体式台式机设计,如果没有硬件上禁用集成图形的方法,则无法工作。
在我的情况下,安装稍旧的驱动程序版本(515.86.01而非525.60.11)确实有效!
然而,确实有效的是安装了NVIDIA 515.86.01驱动程序,这是“500”版本系列中的先前版本在列表中显示如下,使用以下搜索参数:https://www.nvidia.com/Download/Find.aspx?lang=en-us:

enter image description here

所以,解决方案是按照我在这里详细介绍的NVIDIA显卡驱动安装说明中的第二个选项:如何安装适当的NVIDIA显卡驱动以防止冻结
首先,安装您显卡的最新 NVIDIA驱动程序。然后,重新启动,登录,并尝试亮度功能键。如果它们正常工作,那就完成了!如果不行,请转到NVIDIA "高级驱动程序搜索"页面,并安装列表中下一个较旧的驱动程序版本,可能跳过“Beta”和“NFB”(不知道是什么意思)版本,直到找到一个可用的。
因此,为了明确顺序并展示我会尝试驱动程序的顺序,如果我基于上面图片中的驱动程序列表进行操作,我会按照以下顺序尝试驱动程序版本(除非所有500系列版本都无法正常工作):
  1. 525.60.11 - 亮度按钮对我不起作用!
  2. [可选择跳过470.161.03,因为它是旧版本系列]
  3. 515.86.01 - 亮度按钮对我有用!
  4. 510.108.03
  5. [可选择跳过525.53,因为它是Beta版本]
  6. [可选择跳过520.56.06,因为它是NFB版本--不知道是什么意思]
  7. 515.76
  8. [可选择跳过470.141.03,因为它是旧版本系列]
  9. 515.65.01
  10. 等等。

请在评论中报告您的笔记本电脑、显卡以及哪些驱动程序版本可以或不能通过功能按钮控制亮度。

不建议只使用旧版本开始,因为一旦你掌握了它,安装新的驱动程序版本非常容易和快速(<5分钟),我们想要获取最新的驱动程序版本,以获取最新的功能和错误修复,而不会出现退步。


1联想X1 Extreme,搭载GTX 1050 Ti移动版显卡。nvidia-driver-525版本525.85.05存在问题。我刚刚回滚到了nvidia-driver-515,现在一切都正常运行。 - broomrider