#screen #brightness #automatic #content #ambient #light #adjustment

app wluma

基于屏幕内容和ALS的自动亮度调整

1个稳定版本

4.4.0 2024年7月14日

#131 in GUI

ISC 许可证

96KB
2.5K SLoC

wluma

wluma是一个基于wlroots的合成器工具,可以根据屏幕内容和周围环境光自动调整屏幕亮度。

想法

当您查看一个暗的窗口(例如全屏终端)时,应用程序会自动提高屏幕亮度;当您查看一个亮的窗口(例如网页浏览器)时,应用程序会降低屏幕亮度。该算法会考虑您周围的环境光量,因此相同的窗口在白天比在晚上更亮。

Lumen作者的许可下(该项目启发我创建此应用程序),我正在重用演示GIF

demo

使用方法

只需启动wluma并继续像平时一样调整屏幕亮度——应用程序将学习您的偏好。

wluma在第一次启动时不会做任何事情!您需要手动调整亮度几次,在不同的环境和/或不同的屏幕内容中,这样wluma才能学习您的偏好,然后它才会开始自动为您更改屏幕亮度。

性能

尽管应用程序可以每秒几次监控屏幕内容,但它对系统资源和电池寿命的影响最小。这是通过使用export-dmabuf Wayland协议来获取屏幕内容,并使用Vulkan API在GPU上完全进行计算来实现的。

安装

Packaging status

使用以下提供的包和方法之一

  • Alpine Linux: wluma(来自Alpine Edge;自Alpine v3.16的稳定分支中可用)
  • Arch Linux: wlumawluma-git
  • NixOS: wluma
  • 预编译的GitHub发布工件(它链接到Vulkan ICD加载器,您必须安装,以及最新可用的glibc,如果您的版本太旧,它可能无法在您的机器上运行)
  • 使用以下说明自行构建应用程序,并通过sudo make install安装它

构建

CI

如果您想自己构建应用程序,请确保使用最新的稳定版Rust,否则可能会遇到编译错误!使用 rustup 可能是最简单的。Ubuntu需要以下依赖项:sudo apt-get -y install v4l-utils libv4l-dev libudev-dev libvulkan-dev libdbus-1-dev

然后简单地运行 make build

权限

为了访问背光设备,wluma 必须具有以下之一:

  • 直接驱动程序访问:安装提供的 90-wluma-backlight.rules udev规则,将您的用户添加到 video 组,并重新启动(最快)
  • 在运行 elogindsystemd-logind 的系统上(它们为无权限用户提供了通过 dbus 控制设备亮度的安全接口,无需配置)
  • root 身份运行(不推荐)

配置

仓库中的 config.toml 代表默认配置值。要更改它们,将文件复制到 $XDG_CONFIG_HOME/wluma/config.toml 并按需调整。

ALS

选择是否使用基于IIO的真实环境光传感器([als.iio])、基于摄像头的模拟([als.webcam])、基于时间的模拟([als.time])或完全禁用([als.none])。

每个配置项都包含一个 thresholds 字段,它具有良好的默认值。它在那里将一般指数勒克斯值转换为线性比例,以改进 wluma 中的预测算法。键是环境光传感器的原始值(最大值取决于实现),值是任意的“配置文件”。wluma 将根据同一 ALS 配置文件中学习到的数据进行预测,以确定最佳屏幕亮度。

显示

支持多个输出,使用 backlight(通常用于内部笔记本电脑屏幕)和 ddcutil(用于外部屏幕)。

每个输出都由合成器使用型号、制造商和序列号进行标识(例如eDP-1 'Sharp Corporation 0x14A8 0x00000000' (eDP-1))。

输出配置中的 name 字段将作为子字符串进行匹配,因此您可以使用简单的 eDP-1,或者序列号(如果您有两个相同的外部屏幕)。您负责确保您使用的值仅对应于一个输出。

capturer》字段将确定屏幕内容如何被捕获。当前支持值为wlroots(仅在基于wlroots的Wayland合成器上工作)和none(忽略屏幕内容,仅基于ALS预测亮度)。

提示: 使用wlumaRUST_LOG=debug运行,以查看您的输出是如何被识别的,以便您可以选择适当的name配置值。

运行

要运行应用程序,只需启动wluma或使用提供的systemd用户服务。

调试

要启用日志记录,将环境变量RUST_LOG设置为以下值之一:errorwarninfodebugtrace

对于更复杂的选择器,请参阅env_logger的文档

已知问题(需要帮助!)

需要帮助,并非常感激!如果您想实现其中的一些功能,请随时提出问题,我会提供更多详细信息,并在过程中尽力帮助您。

  • 目前尚未实现支持自定义DRM修饰符的帧(例如,多平面帧)。这最近在mesa中实现,并最终可以添加到wluma中。在此期间,一个解决方案是在启动基于wlroots的合成器之前导出WLR_DRM_NO_MODIFIERS=1
  • wluma运行时更改屏幕分辨率尚不支持,并且可能导致应用程序崩溃。解决方案:在更改分辨率后重新启动wluma
  • wluma运行时插入屏幕。解决方案:重新启动wluma

相关项目

  • lumen:启发我创建此应用程序的项目

依赖关系

~20–31MB
~534K SLoC