libinput介绍与分析

一、背景

在PC(台式机或笔记本)中,⿏标和键盘的组合可以说是桌⾯环境最具特⾊的部分,使⽤键盘和⿏标可以使我们轻⽽易举地处理⽇常的⽣活学习和⼯作。而在手机中,另⼀种交互⽅式正在潜移默化地影响着现有pc端的交互⽅式,这就是触摸。触摸这种方式想必大家都不陌生,无论是手机中的触摸屏、还是PC的触摸板及触摸屏,基本上每天都在使用。

不知大家有没有思考过,在Linux下,是如何管理如此众多的输⼊设备的呢?从⽤户按下触摸设备,到桌⾯环境响应消息,又是怎样⼀个流程呢?带着这些问题,本文将从最基本的概念讲起,一步步帮助读者理解并使⽤libinput。

二、概念

1. libinput是什么

libinput是⼀个处理常⽤输⼊设备事件的函数库,包括⿏标、键盘、触摸板、触摸屏和PC机。对输⼊信号进⾏处理,并提供⼀个易于使⽤的API来检测和接收来⾃输⼊设备的事件。libinput设计初衷是⽤于处理系统上所有可⽤的输⼊设备,但可以限制libinput访问哪些设备。例如,在x11平台,xf86_input_libinput会根据xorg.conf配置⽂件灵活地处理系统上的输⼊设备。但是,libinput在处理所有的输⼊设备时,效果最好,因为libinput的内部机制可以更好地处理多个设备输⼊的情况。

在wayland平台,libinput是⼀个接收设备输⼊的函数库。

在x11平台,在X.Org上提供输⼊设备的驱动(xf86_input_libinput)。

xf86_input_libinput:是⼀个基于libinput的X驱动程序。它只是对libinput做了⼀个⾮常简单的 封装。因此,尽管它提供了libinput⽀持的所有特性,但是也就是仅此⽽已,并没有做其他的 扩展。

2. libinput不是什么

libinput的宗旨就是,提供稳定的接⼝和功能,不针对某⼀类或某⼀个设备进⾏兼容和适配,只会最⼤限度地进⾏找到所有设备的共通点,并为其提供相同的接⼝。顺着这个宗旨,我们来看看libinput不能⽤来做什么。libinput不会根据新设备的新特性、新⽅法,去改变接⼝独⽴地适配这些新设备。相反,libinput只是会提供稳定的接⼝和功能,新设备可以使⽤libinput来测试验证这些功能是否正常,并以此为基础优化新设备,⽽不是libinput去适配新设备。但是如果你想要得到 libinput的官⽅⽀持 ,必须等到该设备已经⼴泛使⽤。

不要将libinput想像成⼀堆积⽊,需要什么功能就在积⽊上搭建什么。libinput并不会针对某些设备提供额外的接⼝。libinput提供的很多功能都可以通过配置⽂件去灵活设置是否启⽤。有很多设备会有⼀些新的特性,但是,libinput并不是提供的地⽅,刚刚我们说过,libinput会极⼤限度地寻找所有设备的共通点,从⽽提供的是⼴泛兼容的接⼝,⽽不会针对某些设备增加某些功能。libinput的维护者认为每个特性都会增加维护⼯作量,任何提供了的但未使⽤的特性都会消耗已经很少了开发⼈员资源。

3. libinput在wayland、xorg中的使⽤

在wayland平台下,libinput的事件并不是由client直接使⽤的,⽽是经过kwin进⾏转发。

在x11平台下,也并不会直接使⽤libinput,x平台对libinput进⾏了⼀层封装,xf86_input_libinput就是针对libinput的⼀个封装好的驱动程序,使⽤此驱动程序,通过x协议,将libinput的事件分发给对应的客户端。

4. libinput⽀持的设备类型

libinput是⽤于处理所有与桌⾯环境交互的常⽤设备,例如⿏标、键盘、触摸屏、触摸板、⼿写笔、常⻅的PC机等等,需要注意的是,libinput并不会通过接⼝直接告诉调⽤者当前输⼊设备的设备类型,如果调⽤者需要明确当前输⼊设备的类 型,需要根据libinput提供的设备⽀持的特性进⾏判断。 ⽐如,libinput中⽀持的触控板设备提供了⿏标事件、⼿势事件和其他配置,那么调⽤者就要根据这些特性来⾃⾏甄别出设备类型,并反馈给⽤户呈现出来。

5. libinput不⽀持的设备类型

⽬前通过有限的资料,只是简单地理解到libinput⽬前不⽀持操纵杆,因为维护者认为,很难找到所有操纵杆的相同之处,即使他们拥有相同的功能(摇杆和⼀个或多个按钮组成),并认为操纵杆只是针对于与应⽤的交互,⽽不是整个桌⾯环境系统。所以,libinput并不会⽀持操纵杆。

6. libinput的安装

在wayland平台,libinput不需要额外安装,已经被集成到图形环境的依赖包⾥⾯,并且不需要额外的驱动。

在x11平台,需要使⽤xf86-input-libinput包,xf86-input-libinput是对libinput的⼀个简单封装 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝天居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值