在https://book.bsdcn.org/di-4-zhang-zhuo-mian-an-zhuang/di-4.19-jie-chu-mo-ban-de-she-zhi 中看到如何设置fn键调节笔记本亮度(我装了kde,加载了acpi_video、acpi_ibm,还不能直接调节)的链接https://www.davidschlachter.com/misc/freebsd-acpi_video-thinkpad-display-brightness 。很好用,人工智障翻译如下,各位可以参考一下。
@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋体";}@font-face{font-family:"Calibri";}@font-face{font-family:"微软雅黑";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0;margin-bottom:0;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:14px;mso-font-kerning:1px;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}div.Section0{page:Section0;}
在 FreeBSD 上调整 acpi_video 亮度增量
David Schlachter
## 在 FreeBSD 系统上使用 Intel 集成显卡时,`intel-backlight` 允许以良好的增量设置亮度,使用 `incr` 和 `decr` 参数。或者,`acpi_video` 内核模块也可以控制亮度,但每次按下亮度增/减 Fn 键时,亮度会按百分之一的增量变化。我的目标是配置 `acpi_video` 以遵循 `intel-backlight` 的行为。
在我的 ThinkPad T480(FreeBSD 12.1-RELEASE)上,我之前使用 `acpi_ibm` 和 `devd` 在按下相应的 Fn 键时调用 `intel-backlight`,而没有加载 `acpi_video`。这种方法的缺点是当插入交流适配器、从挂起状态恢复或从 X11 中的 DPMS 睡眠唤醒屏幕时,亮度会恢复到 100%。或者,简单地加载 `acpi_video` 模块可以解决这些问题,但亮度控制非常缓慢,因为调整增量太小。
`intel-backlight` 的源代码显示了工具使用的增量。我创建了一个简单的 shell 脚本来根据这些级别设置显示亮度。如果调用脚本时传递参数 “1”,亮度将增加;如果传递参数 “0”,亮度将减少:
```sh
#!/bin/sh
# /usr/local/bin/acpi_brightness_control.sh
CURRENT_LEVEL=$(/sbin/sysctl -n hw.acpi.video.lcd0.brightness)
UP="$1"
if [ "$UP" == 1 ]; then
for i in 1 2 4 6 9 12 16 20 25 30 36 43 51 60 70 80 90 100; do
if [ "$CURRENT_LEVEL" -lt "$i" ]; then
/sbin/sysctl "hw.acpi.video.lcd0.brightness=$i"
exit
fi
done
fi
if [ "$UP" == 0 ]; then
for i in 100 90 80 70 60 51 43 36 30 25 20 16 12 9 6 4 2 1; do
if [ "$CURRENT_LEVEL" -gt "$i" ]; then
/sbin/sysctl "hw.acpi.video.lcd0.brightness=$i"
exit
fi
done
fi
```
我在 `/boot/loader.conf` 中加载了 `acpi_ibm` 和 `acpi_video`。在我的机器上,亮度 Fn 键的事件代码是 0x10 和 0x11(可以通过 `sudo cat /var/run/devd.pipe` 查看)。为了使用 `devd` 处理这些按键,我在 `/etc/sysctl.conf` 中设置了 `dev.acpi_ibm.0.handlerevents=0x10 0x11`。
为了处理亮度键,我创建了 `/etc/devd/acpi_brightness.conf`:
```sh
# /etc/devd/acpi_brightness.conf
notify 20 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x10";
action "/usr/local/bin/acpi_brightness_control.sh 1";
};
notify 20 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x11";
action "/usr/local/bin/acpi_brightness_control.sh 0";
};
```
不同的机器上的按键可能有不同的匹配条件,可以通过在按下按键时查看 `sudo cat /var/run/devd.pipe` 的输出来确定。
最后,重启 `devd`(`sudo service devd restart`)以应用新的规则。
注意,还可以使用 `hw.acpi.video.lcd0.economy` 和 `hw.acpi.video.lcd0.fullpower` 这两个 `sysctl` 变量来设置电池供电和交流电源供电时的默认亮度。
这种方法提供了 `intel-backlight` 的所有优点,同时只使用内置的内核模块。
首次发布:2020-03-12
@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋体";}@font-face{font-family:"Calibri";}@font-face{font-family:"微软雅黑";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0;margin-bottom:0;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:14px;mso-font-kerning:1px;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}div.Section0{page:Section0;}
在 FreeBSD 上调整 acpi_video 亮度增量
David Schlachter
## 在 FreeBSD 系统上使用 Intel 集成显卡时,`intel-backlight` 允许以良好的增量设置亮度,使用 `incr` 和 `decr` 参数。或者,`acpi_video` 内核模块也可以控制亮度,但每次按下亮度增/减 Fn 键时,亮度会按百分之一的增量变化。我的目标是配置 `acpi_video` 以遵循 `intel-backlight` 的行为。
在我的 ThinkPad T480(FreeBSD 12.1-RELEASE)上,我之前使用 `acpi_ibm` 和 `devd` 在按下相应的 Fn 键时调用 `intel-backlight`,而没有加载 `acpi_video`。这种方法的缺点是当插入交流适配器、从挂起状态恢复或从 X11 中的 DPMS 睡眠唤醒屏幕时,亮度会恢复到 100%。或者,简单地加载 `acpi_video` 模块可以解决这些问题,但亮度控制非常缓慢,因为调整增量太小。
`intel-backlight` 的源代码显示了工具使用的增量。我创建了一个简单的 shell 脚本来根据这些级别设置显示亮度。如果调用脚本时传递参数 “1”,亮度将增加;如果传递参数 “0”,亮度将减少:
```sh
#!/bin/sh
# /usr/local/bin/acpi_brightness_control.sh
CURRENT_LEVEL=$(/sbin/sysctl -n hw.acpi.video.lcd0.brightness)
UP="$1"
if [ "$UP" == 1 ]; then
for i in 1 2 4 6 9 12 16 20 25 30 36 43 51 60 70 80 90 100; do
if [ "$CURRENT_LEVEL" -lt "$i" ]; then
/sbin/sysctl "hw.acpi.video.lcd0.brightness=$i"
exit
fi
done
fi
if [ "$UP" == 0 ]; then
for i in 100 90 80 70 60 51 43 36 30 25 20 16 12 9 6 4 2 1; do
if [ "$CURRENT_LEVEL" -gt "$i" ]; then
/sbin/sysctl "hw.acpi.video.lcd0.brightness=$i"
exit
fi
done
fi
```
我在 `/boot/loader.conf` 中加载了 `acpi_ibm` 和 `acpi_video`。在我的机器上,亮度 Fn 键的事件代码是 0x10 和 0x11(可以通过 `sudo cat /var/run/devd.pipe` 查看)。为了使用 `devd` 处理这些按键,我在 `/etc/sysctl.conf` 中设置了 `dev.acpi_ibm.0.handlerevents=0x10 0x11`。
为了处理亮度键,我创建了 `/etc/devd/acpi_brightness.conf`:
```sh
# /etc/devd/acpi_brightness.conf
notify 20 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x10";
action "/usr/local/bin/acpi_brightness_control.sh 1";
};
notify 20 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x11";
action "/usr/local/bin/acpi_brightness_control.sh 0";
};
```
不同的机器上的按键可能有不同的匹配条件,可以通过在按下按键时查看 `sudo cat /var/run/devd.pipe` 的输出来确定。
最后,重启 `devd`(`sudo service devd restart`)以应用新的规则。
注意,还可以使用 `hw.acpi.video.lcd0.economy` 和 `hw.acpi.video.lcd0.fullpower` 这两个 `sysctl` 变量来设置电池供电和交流电源供电时的默认亮度。
这种方法提供了 `intel-backlight` 的所有优点,同时只使用内置的内核模块。
首次发布:2020-03-12