在 KDE 桌面背后,暗藏着一系列强大的脚本技术,可以让高级用户自动地完成很多任务。在本文中,Martyn Honeyford 向我们介绍了这些技术,并解释了如何才能让它们发挥最大作用。
每 一个 KDE 桌面(从版本 2.0 起)都包含了一个鲜为人知但非常强大的部件,叫做“Desktop COmmunication Protocol”,或者简称为 DCOP。从开发者的角度来看,利用 DCOP 可以很方便地将强大的脚本功能添加到您的应用程序中。从用户的角度来看,利用 DCOP 可以容易地控制您的 KDE 应用程序,并可以将它们以有趣且强大的方式组合起来。
什么是 DCOP?
就 其本质而言,DCOP 是一个操作于套接字之上的轻量级进程间通信机制。DCOP 由一个服务器(即 dcopserver,它在 KDE 启动时会自动启动)和任意多个客户机(支持 DCOP 的应用程序)构成。DCOP 客户机之间可以互相发送消息(通过服务器)来请求信息,要求执行函数,等等。例如,Konqueror 可能会(确实是)向 KMail 发送 DCOP 消息,让它启动一个新窗口,新窗口的“To”域在点击“mailto& rdquo;链接时填好。
使用 DCOP
为帮助我们使用 DCOP,KDE 桌面附带了两个有用的工具:dcop 和 kdcop。
KDE DCOP 浏览器 -- kdcop
这是一个图形化的小工具,运行后可以列举出机器上正在运行的所有 DCOP 客户机,并以树状视图的形式显示出来。然后每个客户机都可以被展开,以显示出它支持哪些接口。
图 2. 输入 URL
 3. 弹出您喜爱的站点
 kdcop 是一个优秀的小工具,可以用来发现一个应用程序支持哪些接口,而第二个标准工具,简单地叫做“dcop”,可以更好地满足日常工作的需要。
KDE 控制台 DCOP 客户机 -- dcop 命令行工具“dcop”本质上与 kdcop 是相同的,但是它是在命令行中使用。因此,它对于编写脚本来说更为有用。
做一点说明,从现在起,小写的 dcop 表示命令行工具,大写的 DCOP 表示泛泛的 DCOP 体系结构。
让我们来举出一些例子,看看您可以用 dcop 工具来做哪些事情。
例 3. 加载 developerWorks 与前面一样,Konqueror 进程在 dcop 中显示为“konqueror-NNNNN”,其中 NNNNN 是 pid(进程 ID)。
幸好,dcop 支持通配符,因此下面的命令,
dcop konq*
将显示出所有以“konq”打头的活动的 dcop 客户机。
按 Unix 惯例,我们可以与 head 命令组合使用,只得到第一个结果,如下:
dcop konq* | head -1
这将只输出一个“konqueror-NNNNN”(或者如果没有 Konqueror 进程在运行则什么也不输出)。
最后我们希望将这个惟一的“konqueror-NNNNN”传递给 dcop,并调用适当的函数来打开一个 URL -- 在 bash 中我们只需要借助 ` 字符就可以做到这一点,如下:
dcop `dcop konq* | head -1` konqueror-mainwindow#1 openURL www.ibm.com/developerWorks
图 4. 甚至可以为调用您喜爱的 Web 站点的命令行起一个别名

如果您以前没有这样用过,那么告诉您,在 `字符间包括一些内容是表示先执行 `字符之间的命令,并用结果替换 ` 字符间的内容。因此命令
dcop `dcop konq* | head -1` konqueror-mainwindow#1 openURL www.ibm.com/developerWorks
将首先执行 `dcop konq* | head -1` 部分,我们得到的是
dcop konqueor-NNNNN konqueror-mainwindow#1 openURL www.ibm.com/developerWorks
接下来就可以正常执行,并给出我们期望的结果。
例 4. 使其全屏 在这个例子中,开始我们先启动一个新的 Konqueror 实例:
konqueror &
然后我们让它加载 developerWorks:
dcop konqueror-$! konqueror-mainwindow#1 openURL |