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 文件。