分类: LINUX
2008-05-27 16:28:44
在众多的KDE 4新技术中,其中有一个经常被提到,但鲜见有详细说明的东西,它就是硬件编程接口Solid。在Linux和其它类Unix操作系统中,对硬件元素的应用开发很容易让人产生困惑,但力图要为KDE 4解决这个问题。在很多时候,Solid和类似,它可以在较低层面上对既有元件如freedesktop.org的进行Qt/KDE风格接口包装。现在Solid的后端的功能已经相当强大了,对用户可见的KDE组件也已开始产生实质的影响。下面是详细内容……
Solid是用于访问如磁盘或网络设备一类硬件的内部信息的编程接口,它不涉足设备驱动的工作,那些是应该由操作系统本身提供的,它也并不直接处理底层设备信息,这些会留交给既存的出色工具如HAL或其它子系统来操作。 我们曾经在aKademy峰会上向KDE业界大力推介过Solid这一概念,而的建立也意味着项目正式运作的开始。自那以后,它就常常会出现在众人的视野中,不只本系列的文章会不时提到它,还要感谢Danny Allen的,还有博客联合上的文章也会不时提到它。不过若您访问irc.kde.org(freenode)上的#solid频道,会发现这里一般都人丁稀落发言寥寥,但表面现象常常是具有欺骗性的…… Solid的代码基础在过去的一年半中不断而稳定的增长,其大多数部件已经相当稳定并实用了。其实,像Dolphin还有文件打开对话框这些程序已经正在使用它来处理可移动设备。 在内部机理上,Solid将作为操作对象的硬件分解成多种元件域来看待,它的各个元件域的操作都是相对独立的,例如: 在Unix领域,对可移动设备的访问存在一些由来已久的问题,近期也涌现出了许多解决方案,包括基于内核的自动挂载器(几年前Mandrake的成果)等,最新的相关项目是HAL,它是一套用于装卸移动设备的工具,其效果也相当出色,但有些发行版由于考虑到HAL会带来大的变动而尚未采用。KDE正试图为可移动设备构建一套通用的编程接口,目的是让上层应用程序不必去关心后端做了什么,请注意这里的可移动设备并不仅仅是指存储设备,Solid现在也已经可以和可移动音频设备、笔记本电池等更多产品协同工作…… 目前Solid唯一支持的后端是HAL,因此在KDE 4中对可移动设备的管理会依赖于HAL,其它针对别的操作系统的后端也已经正在开发当中,毕竟不是每种平台上都会有HAL,但它已经可应用于大多数常见的类Unix平台。不过若是您真的想要,也可以自己写一个能直接访问内核的后端接口。 这里我们还要说明一些并不和可移动硬件设备直接有关,但和您的系统内部息息相关的事情。Phonon会通过Solid来检测您系统中的可用音频设备,还可以藉此在不同的输出设备间无缝切换,包括可插拔音频设备,您可以根据几周前的一篇里出现的那个音频设备切换程序的截图。其实您所看到的并不只是Phonon,截图中那张有效设备列表就是Solid提供的。 还有许多元件域还在开发中,例如Solid对网络设备的支持。Solid从原先的网络管理器中合并了一些代码,这样很多KDE程序都可以利用到这类的接口。我们将要完成的工作会以一个后端守护进程来体现,它可以管理以太网和无线网连接、判断是否有可用的底层驱动、探查集中无线网加密算法是否被支持等。在本周末,对VPN和拨号也应该支持了。我们会观察KPPP一类程序以后的发展会怎么样,不过这类软件还是可以立足于某种意义继续存在。Solid在网络工作方面的目标是为KDE程序带来一套真正的离线模式,这样您就可以在阅读邮件时不再接到程序关于网络故障的提示,Will Stephenson还建议在程序加入当没有程序正在使用网络时可以适当地断开蜂窝式连接的机制。总之,还会有很多其它有价值的程序会在KDE 4的开发中逐渐浮出水面。 还有一个额外的元件域是关于电源管理方面,在这问题上每个发行版都有自己的处理方略,我们期望配备KDE 4的发行版都将能获得一个统一的电源管理接口。这个元件域所呈现的是一个供开发者调节配置电源和耗电元件的编程接口,它也同样要借助于HAL的强大功能。 就在最近几天,Solid加入了对蓝牙的支持,不过它还相当初步。据闻它已经能进行设备的探测和连接,不过由于我没有蓝牙设备,所以还无法测试:)。 现在我们还有一个非常棒的命令行工具,如果您想要对自己的硬件实施一些手动控制,这个以脚本形式继承Solid编程接口所提供的种种元件的东西会有用的。此程序的名字是“solidshell”,它和作为kdelibs一部分的Solid类库一同发布,这里有个命令行应用示例:solidshell network set wireless disabled或者:
solidshell hardware list details上面这条命令会向HAL查询并返回一组所有兼容硬件的信息清单,您需要安装KDE 4环境来测试此特性。
solidshell --comands总结:这条命令对您会大有助益。 回到正题,在Solid框架中支持更多设备的确是可行的。我正设想能用它来支持一些目前还无法工作的附加输入设备,或是通过Solid来探测显示设备的变化(例如接入新显示器这种状况),用这种办法即时处理X显示设定会更加容易。不过这些元件域目前还不属于Solid,但已经在架构之内了,相信它们会逐步被纳入主干。 如何提供帮助: Solid的首席开发者Kevin Ottens(又名“ervin”)对希望加入Solid帮助行列的人们有一些建议。第一条是尽量运用编程接口──这也是大多应用程序能利用到的Solid特性,更全面的接口将会在后续完成。对开发者也同样,如果您想为Solid扩展其它元件域,或是添加一个HAL所不不支持的系统的后端,任何帮助都是欢迎的。 还有些其它可以帮助我们的途径,包括测试硬件还有报告问题等,特别是那些可以在KDE 3.x中工作,但却在KDE 4的Solid/HAL环境下失效的硬件。如果您发现了这样的例子,相信Solid开发者一定很希望能看到您的报告。 旁注: 现在有些发行版内置了HAL,这是一个freedesktop.org的硬件探测(当然还有其它功能)项目。通常,过去每个发行版都有自己的硬件配置和控制接口实现。以前KDE采取的策略是将硬件问题丢给发行版自身去解决,所以这种现状部分也是我们的原因造成的。藉由即将问世的HAL和全新的Solid组合,我们希望能提供一种更加统一的硬件配置和控制机制。因此,KDE开发者也正在将自己的KDE 4提供给发行版维护商供其审阅,以此促使他们将自己的硬件控制解决方案迁移到Solid体系上,这对所有KDE用户都有益,而且用户也能更加方便地获取社区技术支持。发行版的进步会让用户能更舒适地使用自己的硬件──希望KDE的新技术能够达成这一合作。 下次再见……