首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在‘/sys/class/backlight`’中的选项之间切换以解决亮度问题?

如何在‘/sys/class/backlight`’中的选项之间切换以解决亮度问题?
EN

Ask Ubuntu用户
提问于 2018-06-11 13:44:28
回答 1查看 4.4K关注 0票数 3

操作系统: Ubuntu - 18.04 LTS

我在/sys/class/backlight/目录中有两个符号链接。

代码语言:javascript
复制
acpi_video0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/backlight/acpi_video0/
nv_backlight -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-LVDS-1/nv_backlight/

亮度热键会改变acpi_video0/brightness的值。但这并没有改变显示器的亮度。

但是,手动更改nv_backlight/brightness的值实际上会改变显示器的亮度。

因此,将热键链接到nv_backlight而不是acpi_video0将解决我的问题,但我不知道如何做。

编辑:弹出滑块进度条出现在屏幕上的Fn键的操作亮度(热键)。

编辑:

  1. 输入: cat /sys/class/backlight/nv_backlight/max_brightness输出: 100
  2. 输入: cat /sys/class/backlight/nv_backlight/actual_brightness输出(此值自动更改为相同的值,手动输入到/sys/class/backlight/nv_backlight/brightness):10
  3. 输入: cat /sys/class/backlight/acpi_video0/max_brightness输出: 15
EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2018-06-12 00:19:10

Bash脚本redirect-brightness

您的问题是要增加/降低亮度的函数键正在更新/sys/class/backlight/acpi_video0/brightness而不是/sys/class/backlight/nv_backlight/brightness

最初的请求是拦截函数键并使用它们来控制nv_backlight驱动程序。这方面的问题是:

  • 棘手的udev脚本
  • 没有弹出通知滑块显示亮度,没有复杂的Python脚本。

解决方案是使用inotify来监视对acpi_video0的更改。然后计算亮度百分比并将该百分比应用于nv_backlight

在下面的bash脚本中,您需要设置:

代码语言:javascript
复制
WatchDriver="/sys/class/backlight/acpi_video0/brightness"
PatchDriver="/sys/class/backlight/nv_backlight/brightness"

将脚本放置在/usr/local/bin中,并使用以下方法使其可执行:

代码语言:javascript
复制
chmod a+x /usr/local/bin/redirect-brightness

首先从命令行运行脚本,使用

代码语言:javascript
复制
redirect-brightness -l

如果出现问题,请使用以下方法检查日志文件:

代码语言:javascript
复制
cat /tmp/redirect-brightness.log

如果一切正常,那么将redirect-brightness添加到启动应用程序中。

redirect-brightness bash脚本

代码语言:javascript
复制
#!/bin/bash

# NAME: redirect-brightness
# PATH: /usr/local/bin
# DESC: Redirect to correct driver when Ubuntu is adjusting the wrong
#       /sys/class/DRIVER_NAME/brightness

# DATE: June 13, 2018. Modified June 14, 2018.

# NOTE: Written for Ubuntu question:
#       https://askubuntu.com/q/1045624/307523

WatchDriver="/sys/class/backlight/intel_backlight"
PatchDriver="/sys/class/backlight/intel_backlight"

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    echo >&2 "Root access required. Use: 'sudo redirect-brightness'"
    exit 1
fi

# inotifywait required
type inotifywait >/dev/null 2>&1 || \
    { echo >&2 "'inotifywait' required but it's not installed.  Aborting."; \
      echo >&2 "Use 'sudo apt install inotify-tools' to install it.'"; \
      exit 1; }

# Was right watch driver directory name setup correctly?
if [[ ! -d $WatchDriver ]]; then
    echo >&2 "Watch directory: '$WatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Was right patch driver directory name setup correctly?
if [[ ! -d $PatchDriver ]]; then
    echo >&2 "Redirect to directory: '$PatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Get maximum brightness values
WatchMax=$(cat $WatchDriver/max_brightness)
PatchMax=$(cat $PatchDriver/max_brightness)

# PARM: 1="-l" or "--log-file" then write each step to log file.
fLogFile=false
if [[ $1 == "-l" ]] || [[ $1 == "--log-file" ]]; then
    fLogFile=true
    LogFile=/tmp/redirect-brightness.log
    echo redirect-brightness LOG FILE > $LogFile
    echo WatchMax: $WatchMax PatchMax: $PatchMax >> $LogFile
fi

SetBrightness () {
    # Calculate watch current percentage
    WatchAct=$(cat $WatchDriver/actual_brightness)
    WatchPer=$(( WatchAct * 100 / WatchMax ))
    [[ $fLogFile == true ]] && echo WatchAct: $WatchAct WatchPer: $WatchPer >> $LogFile
    # Reverse engineer patch brightness to set
    PatchAct=$(( PatchMax * WatchPer / 100 ))
    echo $PatchAct | sudo tee $PatchDriver/brightness
    [[ $fLogFile == true ]] && echo PatchAct: $PatchAct >> $LogFile
}

# When machine boots, set brightness to last saved value
SetBrightness

# Wait forever for user to press Fn keys adjusting brightness up/down.
while (true); do
    inotifywait --event modify $WatchDriver/actual_brightness
    [[ $fLogFile == true ]] && \
        echo "Processing modify event in $WatchDriver/actual_brightness" >> $LogFile
    SetBrightness
done

原始答案2018年6月11日.

工作正在进行中回答

在Ubuntu18.04中有许多类似问题的nVidia用户:

编写脚本之前的

(

)

我可以编写一个脚本来模拟对/acpi_video的更改并填充/nv_backlight,但在尝试之前:

  • 编辑/etc/default/grub
  • 寻找quiet splash
  • 添加背后的飞溅:acpi_backlight=vendor
  • 保存文件
  • 运行sudo update-grub

根据这个答案,它应该适用于您:Xubuntu18.04:使Fn亮度键与/sys/class/backlight/nv一起工作_背光/

Wayland

亮度在Wayland下是不起作用的。确保你没有使用它。请参阅:笔记本电脑屏幕的亮度不能用按钮或滑块来调整。编辑

票数 5
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1045624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档