加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux下键盘事件处理的内部工作原理

发布时间:2020-12-13 18:51:04 所属栏目:Linux 来源:网络整理
导读:当我在 Linux下的某些GTK应用程序上按下键盘的键时,究竟发生了什么?如何接收密钥(从哪个设备),解释,传递给程序,然后处理? 解决方法 这实际上是一个复杂的过程…… 键盘具有2D矩阵键连接和自己的微处理器或包含微处理器的门阵列.它不断扫描矩阵以查明是否按
当我在 Linux下的某些GTK应用程序上按下键盘的键时,究竟发生了什么?如何接收密钥(从哪个设备),解释,传递给程序,然后处理?

解决方法

这实际上是一个复杂的过程……

>键盘具有2D矩阵键连接和自己的微处理器或包含微处理器的门阵列.它不断扫描矩阵以查明是否按下任何键. (为了节省引脚,键不会单独测试.)键盘微控制器与CPU中的键盘控制器说出协议,并发送指示按键的消息.
>键盘控制器记录代码并中断CPU.
>键盘驱动程序接收中断,从控制器寄存器中读取键代码,并将键代码放在缓冲区中,该缓冲区将内核的中断端链接到每个进程的线程.它将等待键盘输入的线程标记为“可运行”
>这个线程醒来了.事实证明,这是X服务器. X服务器从内核中读取密钥代码.
>服务器将检查哪个窗口具有键盘焦点.该窗口将连接到各种客户端之一.
>服务器向显示该特定窗口的客户端发送事件. (请注意,对于服务器,每个文本框等都是“窗口”,而不仅仅是整个应用程序.)
>客户端中的事件循环正在等待下一个服务器事件消息.这种连接可以通过TCP连接,也可以是本地Unix功能.它使用read(2)或socket op来实际获取下一个事件消息.
>低级xlib例程将keypress传递给更高级别的小部件,最终获得某种类型的GTK功能.
> GTK API元素将角色交给您的程序.

我掩盖了语言映射,控制台多路复用以及其他一些事情……

更新:所以,/ dev / input / *实际上所有的/ dev / *都是称为块或字符特殊文件的东西.重要的是它们在文件系统中没有存储的数据,只是一个主要和次要的设备号,用于在表中查找内核中的驱动程序.这几乎就是这么简单.如果您使用-l / dev / input,您将看到主设备号和次设备号,而不是文件大小.主要编号标识设备驱动程序,次编号是一种实例编号,作为驱动程序的参数传递(在内核中).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读