今天花了一点时间,给自己的笔记本电脑,写了一个控制背光的命令行小工具,分享给大家。
https://github.com/wuweidong/backlight
我的笔记本电脑是 Ubuntu 系统,有时需要调整一下屏幕的背光。
由于我更喜欢命令行操作,所以就写了这个小程序来服务自己,就一个 C 文件,162 行代码。
它的用法是这样的:
$ backlight -h
Usage: backlight [option] [command]
Options:
-h This help text
-v Show program version
Commands:
val Set brightness val%, range is 0~100
# 查看背光百分比
$ backlight
57
# 设置背光百分比
$ backlight 90
90
Linux 系统的背光控制节点为 /sys/class/backlight,我们只要读写这个目录下的文件节点,就能达到控制屏幕背光的目的了。
$ ls /sys/class/backlight/amdgpu_bl0/
actual_brightness bl_power brightness device max_brightness power scale subsystem type uevent
用 struct device 来描述背光设备:
struct device {
char *path; // 保存 backlight 文件节点, /sys/class/backlight/amdgpu_bl0/
int max; // max_brightness
int current; // brightness
};
驱动程序看多了,代码风格也会被影响。
程序主干逻辑:
int main(int argc, char *argv[])
{
struct device dev;
int c;
long val;
// 参数解析
[...]
// 检查 backlight 设备是否存在
if (!locate(&dev))
err(1, "System has no backlight control");
// 是否需要设置 backlight
if (argc == 2 && is_digit_str(argv[1])) {
brightness_set(&dev, strtol(argv[1], NULL, 10));
}
// 打印当前背光值
printf("%d\n", brightness_get(&dev));
return 0;
}
逻辑很简单的:
先用 locate() 去遍历 /sys/class/backlight 目录,同时根据找到的 backlight 节点去初始化 struct device;
如果用户要求设置背光,则调用 brightness_set();
最后,总是通过 brightness_get() 获取当前背光值;
brightness_get() / brightness_set() 其实就是读写 /sys/class/backlight/${your_backlight_device}/brightness。
END
→点关注,不迷路←