今天花了一点时间,给自己的笔记本电脑,写了一个控制背光的命令行小工具,分享给大家。

https://github.com/wuweidong/backlight

我的笔记本电脑是 Ubuntu 系统,有时需要调整一下屏幕的背光。

由于我更喜欢命令行操作,所以就写了这个小程序来服务自己,就一个 C 文件,162 行代码。

用法

它的用法是这样的:

$ backlight -h
Usage: backlight [option] [command]

Options:
-h    Thishelptext-vShowprogramversionCommands:
valSetbrightness val%,rangeis0~100

# 查看背光百分比$backlight57# 设置背光百分比$backlight9090

代码实现

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 来描述背光设备:

structdevice{char*path;// 保存 backlight 文件节点, /sys/class/backlight/amdgpu_bl0/intmax;// max_brightnessintcurrent;// brightness};

驱动程序看多了,代码风格也会被影响。

程序主干逻辑:

intmain(intargc,char*argv[]){structdevicedev;intc;longval;// 参数解析[...]// 检查 backlight 设备是否存在if(!locate(&dev))
        err(1,"System has no backlight control");// 是否需要设置 backlightif(argc ==2&& is_digit_str(argv[1])) {
        brightness_set(&dev, strtol(argv[1],NULL,10));
    }// 打印当前背光值printf("%d\n", brightness_get(&dev));return0;
}

逻辑很简单的:

先用 locate() 去遍历 /sys/class/backlight 目录,同时根据找到的 backlight 节点去初始化 struct device;


如果用户要求设置背光,则调用 brightness_set();

最后,总是通过 brightness_get() 获取当前背光值;

brightness_get() / brightness_set() 其实就是读写 /sys/class/backlight/${your_backlight_device}/brightness。

forum.jpg


总结

今天分享的东西很简单,往往越是简单的东西,生命力越顽强。

如果你也有类似的开源项目,也欢迎推荐给我,





转载自:老吴嵌入式文章来源于一个控制背光的命令行小工具原文链接:https://mp.weixin.qq.com/s/7PkWjxJU_bWhPw4S03rOLA