在linux上使用桌面作为画布

时间:2010-02-18 12:14:20

标签: c++ linux user-interface desktop x11


我想知道是否有人可以帮助我。我有一个克隆linux的极客工具的计划。但我不知道你是否可以某种方式使用Linux桌面作为画布来绘制文本等。我​​试着谷歌但我什么都没发现。我需要做的是基本上能够在桌面的某些部分上绘制文本,使它看起来像是壁纸的一部分(来自c ++)。无论是那个还是能够创建无边框,透明的窗口,可以点击并始终在背景上。如果有人能给我任何指示从哪里开始,我将非常高兴。
感谢您提前的帮助:]

7 个答案:

答案 0 :(得分:5)

您已经接受了部分答复,但我希望您仍然可以阅读此内容。

按惯例,桌面背景确实是根窗口。但是,在典型的现代桌面上有两个重要的机制:

  • 根像素图设置(壁纸),在根窗口的背景上绘制
  • 通过用另一个基本窗口阻碍根窗口来丰富桌面背景(例如可点击的图标)

如果您只想在背景上绘制,只有后者对您很重要。如果您还想阅读背景,例如真实透明度,那么第一点也起作用。

绘制背景:

xsnow和xpenguins程序的作者是第一个处理这个问题的人。他们编写了一个聪明的函数,如果它们存在,可以派生出KDE和Gnome桌面窗口。由于阻碍根窗口的其他窗口管理器倾向于遵守这些事实上的标准,因此它非常可靠地工作。使用他们的代码,您可以立即知道要绘制到哪个窗口。

阅读根背景(pixmap):

这更难。窗口像素的朴素查询将失败,因为所有前景窗口也是根窗口的一部分;所以这样可以很容易地做截图,但不能获得真实的背景。

然而,在根像素图的全局名称上有一个约定(由任何体面的背景像素图设置器使用)。可以通过查询该名称找到pixmap。然而,如果背景设置器糟透了并且不遵守该规则,或者背景不是像素图,而只是模式或其他什么,那就太讨厌了。

我最近才发现的第二个选项是使用XDBE(双缓冲区)扩展来获取根窗口的背景。这非常干净,只需要两到三行代码,无论如何都可以使用。 但是 Xorg认为XDBE已被弃用(或者更确切地说,很快就会被弃用)。所以我不知道是否仅为此目的使用它仍然是一个好主意。但我可以根据要求提供代码

最后执行:

是的,这两件事都有可用的实现。查看http://fopref.meinungsverstaerker.de/xmms-rootvis/ 在该归档文件中,即GPL,getroot.c取自xpenguins,不依赖于其他xpenguins代码。 此外,从rootvis.c的第144行开始,您将找到获取背景像素图的代码。

玩得开心!

答案 1 :(得分:3)

Linux几乎总是使用X11(Gnome / KDE是更高级别的API)。在X11上,“桌面”被称为“根窗口”。所以,画上它。

答案 2 :(得分:2)

如果您想定位特定的桌面环境,请查看适用于KDE的GNOME或等离子小部件的gdesklets。或者你可以像MSalters说的那样去“裸机”并直接绘制到根窗口(例如检查this tutorial

答案 3 :(得分:0)

我见过能够实现类似功能的compiz解决方案。 Unfotunatly compiz不是AFAIK文件,但this tutorial可能会让你开始

答案 4 :(得分:0)

Google Desktop Gadgetsgdesklets可以提供帮助,而不是从头开始。

答案 5 :(得分:0)

KDE Plasma-Desktop支持所谓的活动,这些活动是针对不同桌面类型(C ++)的模块。我认为这是一个很好的一点,有一个简单和集成的基础来做这样的事情。

答案 6 :(得分:-2)

只是保持它,所以没有其他人写同样的东西,这是不正确的。

没有“linux desktop”或“linux wallpaper”这样的概念。你不再在Windows世界了。 Linux中的图形环境由各种系统驱动:GNOME,KDE,xfce等。*它们中的每一个(以及它们的每个主要版本)都有自己的方式来访问桌面。

<罢工>

*“etc”不是图形环境,它是一个“等等”的短语。