最近一直在发关于ideapad-laptop.c(位于<内核源码根目录>/drivers/platform/x86/下)的系列文章,究其原因,是因为工作中遇到了一个问题,描述如下:

在笔者的联想笔记本上,通过Fn+Space可以控制笔记本键盘按键的背光(点亮/熄灭/增加亮度),但在图形界面中并没有相应的图标显示出来。举个例子,按亮度+或亮度-键,屏幕的亮度可以增加或减少,同时桌面图形环境中出现相应的图标,如下所示:

对于音量+和音量-也是一样,调节音量大小的同时出现以下图标::

而键盘按键背光控制和上边不一样,只能控制背光,却无法在桌面图形环境下出现类似上边的图标。

于是开始针对这一问题进行分析,当然希望在解决这一问题的过程中,能够顺带多涉及一些ideapad-laptop.c文件中的内容,尽可能地多学习一些相关知识,这才有了围绕ideapad-laptop.c展开的一系列文章。

抛开其它知识点不谈,单就这个问题而言,通过内核日志(/var/log/kern.log)发现每次按Fn+Space的时候,内核日志中都会出现一次如下打印(时间及时间戳会有所不同):

Dec  5 23:10:33 ph-ThinkBook-14-G2-ITL kernel: [95710.506261] ideapad_acpi VPC2004:00: Unknown event: 12

搜索关键字"Unknown event",最终定位到其出自于ideapad-laptop.c,具体所在函数如下:

static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
{struct ideapad_private *priv = data;unsigned long vpc1, vpc2, bit;if (read_ec_data(handle, VPCCMD_R_VPC1, &vpc1))return;if (read_ec_data(handle, VPCCMD_R_VPC2, &vpc2))return;vpc1 = (vpc2 << 8) | vpc1;for_each_set_bit (bit, &vpc1, 16) {switch (bit) {case 13:case 11:case 8:case 7:case 6:ideapad_input_report(priv, bit);break;case 10:/** This event gets send on a Yoga 300-11IBR when the EC* believes that the device has changed between laptop/* tent/stand/tablet mode. The EC relies on getting* angle info from 2 accelerometers through a special* windows service calling a DSM on the DUAL250E ACPI-* device. Linux does not do this, making the laptop/* tent/stand/tablet mode info unreliable, so we simply* ignore these events.*/break;case 9:ideapad_sync_rfk_state(priv);break;case 5:ideapad_sync_touchpad_state(priv);break;case 4:ideapad_backlight_notify_brightness(priv);break;case 3:ideapad_input_novokey(priv);break;case 2:ideapad_backlight_notify_power(priv);break;case 1:/** Some IdeaPads report event 1 every ~20* seconds while on battery power; some* report this when changing to/from tablet* mode; some report this when the keyboard* backlight has changed.*/ideapad_kbd_bl_notify(priv);break;case 0:ideapad_check_special_buttons(priv);break;default:dev_info(&priv->platform_device->dev,"Unknown event: %lu\n", bit);}}
}

笔者曾经一度认为到这里问题的根因就已经找到了,就是因为没有对bit为12的处理,加入处理后问题就能解决。于是在case 1的上一行加入了"case 12:",之后重新编译内核并烧录。满心以为问题能够解决,但没想到问题依旧,仍然是无法出现图标。看来问题并非想象中那样简单,有更深层次的原因。这更深层次的原因是什么,又应该如何探索才能揭开谜团?且看下回分解。

Linux系统中键盘按键背光变化无法反映到图形界面问题的深入分析1 —— 问题现象及初步定位相关推荐

  1. linux系统下键盘按键的重新映射——xmodmap工具和xev工具

    虽然linux下小键盘还是不能用,但是找到一篇好文章 linux系统下键盘按键的重新映射--xmodmap工具和xev工具 文章目录 1. xev工具: 2. xmodmap工具 大家会不会有时候,感 ...

  2. 机械键盘插入linux系统中,机械键盘背光灯不亮,并且键盘快捷键无作用

    Linux问题解决专栏 第四篇:机械键盘插入linux系统中,机械键盘背光灯不亮,并且键盘快捷键无作用. 一.问题描述:在笔记本或者台式机中使用外接键盘的时候,键盘的LED灯总是不亮,不论是虚拟机或者 ...

  3. 管理Linux系统中的进程

    1.什么是进程? (1)进程与程序     在Linux系统当中,触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个ID,称为PID,同时依据启发这个进程的用户与相关属性关系,给予 ...

  4. linux下编写sql脚本,在Linux系统中编写简易shell脚本,向PLSQL表中插入数据

    案例环境: SecureCRT.PLSQLDeveloper 登入现有的linux服务器以及数据库账号.要求linux系统支持sqlplus #1.在PLSQL中创建一个简单的表: create ta ...

  5. linux虚拟环境tmux,关于在Linux系统中如何把tmux和vim打造成IDE的讲解

    不经意间我们又来到了Linux系统文章的学习,在众多学习中,我们的文章也许不起眼,但是想必大家都有很多问题吧,所以重要的下面我们就来讲解一下,大家一定要认真看奥!! 在Linux系统中tmux 和 v ...

  6. Linux系统中VI或VIM输入时小键盘无法使用

    Linux系统中VI或VIM输入时小键盘无法使用 问题描述 在使用Xshell.Webshell或者PuTTY连接Linux服务器时经常会用到VIM对文件进行编辑.这是就会发现,小键盘无法使用.想输入 ...

  7. 条件测试 linux,linux系统中条件测试语句

    linux系统中条件测试语句 linux系统中条件测试语句分为4类: 1.文件测试语句 2.逻辑测试语句 3.整数值比较语句 4.字符串比较语句 一.文件测试语句 -e :是否存在 -f :是否为文件 ...

  8. Linux系统中top命令详解

    在Linux系统中top命令是常用的分析性能的工具,能够实时监控系统中各个进程资源占用的情况,这和windows中任务管理器有点类似. top参数详解 第一行,任务队列信息,同 uptime 命令的执 ...

  9. mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法

    在命令行中输入命令并不是一个好主意,会造成安全问题.但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?, ...

最新文章

  1. visudo使用-怎样将mount权限给普通用户
  2. protobuf前后端解析_Go语言微服务架构实战:第七节 Protobuf协议语法及原理
  3. JQuery EasyUI datagrid 复杂表头处理
  4. linux 内核参数 max_map_count 进程可拥有的虚拟内存区域数量 简介
  5. 价格的格式化 php,价格格式化问题。
  6. php gbk字符串 存utf8 html,php utf8 gbk 数组 互转(示例代码)
  7. Linux程序选择boy糊者girl,linux脚本程序练习-Go语言中文社区
  8. Exchange 2013 SP1部署系列7:发送连接器的配置
  9. java怎么区分变量和方法_如何测试Java的变量和方法
  10. linux建模工具有哪些,linux uml 免费 建模工具
  11. 如何使用Vegas Pro制作遮罩转场效果?
  12. 包邮送72本R语言和Python的书籍
  13. 罗技Lua脚本-CF神圣爆裂者自动开枪
  14. Python数据挖掘实战——贝叶斯分类算法
  15. 地理图例大全整理初中
  16. python课程设计汽车销售管理系统_汽车销售管理系统--课程设计
  17. lg相乘公式_ln公式(lg公式大全)
  18. 使用Canal ClientAdapter实现Mysql的DDL、DML同步到PostgreSQL
  19. 在线阅读-阿里Java开发手册最强版本【泰山版】
  20. 图形学学习笔记2——点阵图形光栅化

热门文章

  1. 鸿蒙系统核心架构,对标 Apple Watch!魅族推首款智能手表,官宣接入华为鸿蒙系统...
  2. 用友nc65 uap开发参照多选三种显示情况总结
  3. NOIP大纲整理:(十六)反转问题与弹性碰撞
  4. Linux的网卡配置
  5. Out of the box 意思详解
  6. webshell提权教程小结
  7. Shell编程之字符串
  8. 3.B1019数字黑洞
  9. 值得学习与推荐的c/c++框架和函数库
  10. springboot+mysql二手书交易平台-计算机毕业设计源码17782