OpenCPN-低功耗/屏幕管理
屏幕管理
屏幕消耗的能量对功耗有很大影响,如果您有笔记本电脑和小型电池,您可能已经注意到了这一点。
屏幕亮度
启动
在启动时,我们运行 此脚本。它强制所有显卡和 acpi 支持将亮度修改为 50%。这种方法可以在任何配置中使用(如果您至少在 /sys/class/backlight/ 中有一个文件夹),该脚本会更改亮度,而不管控制器类型(acpi 或显卡)。
故障排除
仅在分发启动时执行该脚本不会降低屏幕亮度。事实上,当您登录图形界面时,屏幕亮度会上升到 95%。为了应对这种情况,我们必须在登录后运行我们的脚本,但这涉及到触碰用户没有权限修改的文件。
我们找到了以下解决方案:
- 检测适应计算机的方式
- 为用户授予写入
/sys/class/backlight/*/brightness中文件的权限 - 在每次 LXDE 会话启动时运行我们的脚本
更改亮度配置文件的权限的算法:
for FILE in $(/bin/ls -d1 /sys/class/backlight/*/brightness); do
if [ $? -eq 0 ]; then
chown root:users $FILE
chmod g+w $FILE
fi
done
我们使用 /etc/xdg/lxsession/LXDE/autostart 文件在每次 LXDE 会话启动时运行我们的亮度修改脚本。
低亮度测量
以下测量是在我们的分发版的 0.1.6 版本上进行的:
这张图很好地展示了屏幕所需的能量。通过将屏幕亮度降低一半,我们可以节省 1 瓦特。我们可以进一步降低此参数,但请记住,如果我们将屏幕亮度降低太多,海面可能会阳光明媚,您可能无法再看到屏幕了!
在用户会话中更改亮度
更改屏幕亮度并不具有挑战性。要检测如何更改它,请执行以下操作:
如果您很幸运,笔记本电脑的“功能键”将被映射,并且您将能够轻松更改亮度。如果按键对您有效,请跳过其余段落。
您需要使用终端模拟器来执行此操作,默认情况下已安装
lxterminal。命令开头的#和$表示您分别需要以 root(特权用户)或普通用户身份运行此命令。如果您拥有我们分发版的 0.1.8 或更高版本,则不需要 root 权限即可修改/sys/class/backlight/*/brightness中的亮度配置文件。
让我们从这个输出开始:
$ xbacklight 100.000000
如果此命令的结果是一个值,则可以通过执行 $ xbacklight -set 40 来更改屏幕亮度,其中 40 是亮度的百分比。如果此解决方案对您有效,请跳过下一部分。
如果您收到此输出 No outputs have backlight property,这意味着您将不得不使用不同的方法。
在终端中尝试此命令:
# ls /proc/acpi/video/ 2> /dev/null |wc -l
如果此命令的输出不是 0,这意味着 acpi 支持屏幕。要更改屏幕亮度,您首先需要确定可以设置的最大值。可以通过 # cat /sys/class/backlight/acpi_video0/max_brightness 来完成(您可能需要稍微更改路径:video0 可能不适合您的笔记本电脑)。然后,您可以使用此命令设置新的亮度 # echo 5 > /sys/class/backlight/acpi_video0/brightness。再次,如果这适用于您,请跳过下一部分。
如果最后一个命令对您不起作用,这意味着您没有 acpi 视频支持,因此您将不得不修改更接近硬件的东西。首先,您需要知道视频驱动程序的实际名称,通过以下方式完成:
$ /bin/ls -d /sys/class/backlight/*_backlight/ /sys/class/backlight/intel_backlight/
请注意,我们使用了完整路径来访问 ls 以避免别名系统。
您可以看到我有一个 Intel 显卡。我将使用此路径作为下一个示例,请注意“复制粘贴”如果您在上面的命令输出中获得不同的输出。
最大亮度因设备而异,因此我建议您通过执行以下操作来了解最大值:
$ cat /sys/class/backlight/intel_backlight/max_brightness 4882
由于输出值很高,请小心不要设置过低的值,因为您将面临一片漆黑的屏幕。
然后,您可以执行以下操作来设置屏幕亮度:
# echo 1000 > /sys/class/backlight/intel_backlight/brightness
如果以上任何解决方案都不起作用,我很抱歉我没有解决方案。但是,如果您有其他解决方案,请告诉我们。
屏幕保护程序
我们进一步研究了屏幕并使用了一些屏幕保护程序“魔术”来进一步降低功耗。为了在屏幕保护程序开启时进一步降低功耗,我们启用了 dpms。如果您没有启用 dpms,xscreensaver(和 xset)只会显示一个黑色“图像”,dpms 会负责关闭屏幕。这是 ~/.xscreensaver 文件中感兴趣的部分:
timeout: 0:05:00 # 5 minutes cycle: 0:00:00 lock: False # don't ask for the password [.../...] dpmsEnabled: True dpmsQuickOff: True
您可以在 此处 找到整个文件。
但是,Dpms 有一个弱点,当屏幕保护程序从其黑色屏幕恢复时,它会更改我们的屏幕亮度。为了同时拥有(降低的亮度以及关闭的屏幕),我们首先查看是否在 xscreensaver 恢复时执行了脚本。没有成功,我们转向 cron 任务,每 2 分钟运行一次我们的亮度脚本。
这是 cron 任务:
*/2 * * * * /usr/bin/brightness nosleep
测量结果
以下测量是在“devel”版本上进行的,因此“base”的功耗较低是完全正常的:
您可以看到 dpms 选项对功耗有巨大影响。事实上,如果没有该选项,xscreensaver 仅显示黑色屏幕而不降低亮度。使用 dpms 选项,xscreensaver 会关闭屏幕。
您可以在 此处 找到原始数据和图表。
破解/调整
/etc/init.d/suse_studio_custom在计算机启动时运行的服务。/etc/xdg/lxsession/LXDE/autostart如果您想禁用该脚本。/usr/bin/brightness该脚本。~/.xscreensaver(以及/etc/skel/.xscreensaver供未来用户使用)屏幕保护程序属性。/var/spool/cron/crontabs/root安装后的 cron 文件。

