三 文章首页 实时留言 网络邻居 开往 虫洞
返回

i3wm | 自制一个极简的屏幕亮度调节器

在不需要额外软件包的情况下
2024-03-01 17:20:43
分类: Linux 标签: node.js,桌面美化

i3wm 是一个轻量级的平铺窗口管理器,它比 gnome 和 kde 这些桌面环境功能要单一,只显示 x 窗口程序,然后搭配快捷键去 打开/关闭/切换窗口。默认情况下不支持屏幕亮度调节。这需要安装额外的软件去支持,不过我们也可以去自制一个简单的。

在 ~/.config/i3/config 文件可以配置 i3wm 以及快捷键功能,

i3 给我们提供了两个叫 XF86MonBrightnessUp 以及 XF86MonBrightnessDown 的变量,分别对应的是笔记本电脑 亮度调节的"递增"和"减少"键

在其文件中编辑

bindsym XF86MonBrightnessUp exec "这里执行亮度递增的程序路径"
bindsym XF86MonBrightnessDown exec "这里执行亮度减少的程序路径"

我使用的是 amd 的笔记本电脑,在驱动完善的情况下,/sys/class/backlight/amdgpu_bl1/brightness 是有关亮度阈值的一个接口文件,只需要编辑它的数字大小即可(0-255)。

此时目标很明确了,我们只需要写两个脚本分别对应那两个快捷键来增加和减少阈值即可。 这里我使用的是 node.js 为案例 (当然也可以使用 python 或 shell)

add.js

#!/usr/bin/env node
const fs = require('fs')
const filePath = '/sys/class/backlight/amdgpu_bl1/brightness'
let number = Number(fs.readFileSync(filePath,'utf-8'))
number += 5
fs.writeFileSync(filePath,`${number}`,'utf-8')

sub.js

#!/usr/bin/env node
const fs = require('fs')
const filePath = '/sys/class/backlight/amdgpu_bl1/brightness'
let number = Number(fs.readFileSync(filePath,'utf-8'))
number -= 5
fs.writeFileSync(filePath,`${number}`,'utf-8')

给这两个脚本一定的可执行权限 chmod +x add.js路径 && chmod +x sub.js路径

最后我们需要将 /sys/class/backlight/amdgpu_bl1/brightness 这个文件给以一定的权限,一个开始我尝试了 chmod 的方式去给以。但发现这个接口文件会随着机器重启而重新挂载因此丢失权限设置。

我想到了一种通过 udev 规则的方式去持久化它,让其重新开机后权限设置依然生效。

编辑该文件并写入以下内容

sudo vim /etc/udev/rules.d/99-amdgpu.rules
KERNEL=="amdgpu_bl1", SUBSYSTEM=="backlight", RUN+="/bin/chmod 777 /sys/class/backlight/%k/brightness"

这条规则将会在amdgpu_bl1设备初始化时设置 brightness 文件的权限为可读写

重新加载一下 udev 规则

sudo udevadm control --reload-rules

然后就可以通过快捷键去调节亮度大小了,即使重启电脑也依然OK。一个极简的 i3wm 屏幕亮度调节器完成。