1个稳定版本
4.4.0 | 2024年7月14日 |
---|
#131 in GUI
96KB
2.5K SLoC
wluma
wluma是一个基于wlroots的合成器工具,可以根据屏幕内容和周围环境光自动调整屏幕亮度。
想法
当您查看一个暗的窗口(例如全屏终端)时,应用程序会自动提高屏幕亮度;当您查看一个亮的窗口(例如网页浏览器)时,应用程序会降低屏幕亮度。该算法会考虑您周围的环境光量,因此相同的窗口在白天比在晚上更亮。
在Lumen作者的许可下(该项目启发我创建此应用程序),我正在重用演示GIF
使用方法
只需启动wluma
并继续像平时一样调整屏幕亮度——应用程序将学习您的偏好。
wluma
在第一次启动时不会做任何事情!您需要手动调整亮度几次,在不同的环境和/或不同的屏幕内容中,这样wluma
才能学习您的偏好,然后它才会开始自动为您更改屏幕亮度。
性能
尽管应用程序可以每秒几次监控屏幕内容,但它对系统资源和电池寿命的影响最小。这是通过使用export-dmabuf Wayland协议来获取屏幕内容,并使用Vulkan API在GPU上完全进行计算来实现的。
安装
使用以下提供的包和方法之一
- Alpine Linux: wluma(来自Alpine Edge;自Alpine v3.16的稳定分支中可用)
- Arch Linux: wluma 或 wluma-git
- NixOS: wluma
- 预编译的GitHub发布工件(它链接到Vulkan ICD加载器,您必须安装,以及最新可用的
glibc
,如果您的版本太旧,它可能无法在您的机器上运行) - 使用以下说明自行构建应用程序,并通过
sudo make install
安装它
构建
如果您想自己构建应用程序,请确保使用最新的稳定版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
组,并重新启动(最快) - 在运行
elogind
或systemd-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预测亮度)。
提示: 使用wluma
和RUST_LOG=debug
运行,以查看您的输出是如何被识别的,以便您可以选择适当的name
配置值。
运行
要运行应用程序,只需启动wluma
或使用提供的systemd用户服务。
调试
要启用日志记录,将环境变量RUST_LOG
设置为以下值之一:error
、warn
、info
、debug
、trace
。
对于更复杂的选择器,请参阅env_logger的文档。
已知问题(需要帮助!)
需要帮助,并非常感激!如果您想实现其中的一些功能,请随时提出问题,我会提供更多详细信息,并在过程中尽力帮助您。
- 目前尚未实现支持自定义DRM修饰符的帧(例如,多平面帧)。这最近在mesa中实现,并最终可以添加到
wluma
中。在此期间,一个解决方案是在启动基于wlroots的合成器之前导出WLR_DRM_NO_MODIFIERS=1
。 - 在
wluma
运行时更改屏幕分辨率尚不支持,并且可能导致应用程序崩溃。解决方案:在更改分辨率后重新启动wluma
。 - 在
wluma
运行时插入屏幕。解决方案:重新启动wluma
。
相关项目
- lumen:启发我创建此应用程序的项目
依赖关系
~20–31MB
~534K SLoC