Использование рабочего стола в качестве холста на Linux - PullRequest
4 голосов
/ 18 февраля 2010


Мне было интересно, если кто-нибудь может мне помочь. У меня есть план создания клона инструментов для гиков для Linux. Но я понятия не имею, можно ли каким-то образом использовать рабочий стол Linux в качестве холста для рисования текста и т. Д. Я пытался найти его в Google, но ничего не нашел. Что мне нужно сделать, так это уметь рисовать текст на определенных частях рабочего стола, чтобы казалось, что они являются частью обоев (из c ++). Либо так, либо вы сможете создавать прозрачные окна без полей, по которым можно щелкнуть и которые всегда находятся на заднем плане. Если кто-нибудь может дать мне какие-либо указания, с чего начать, я буду очень счастлив.
Заранее спасибо за помощь:]

Ответы [ 7 ]

5 голосов
/ 01 марта 2010

Вы уже приняли частичный ответ, но я надеюсь, что вы все равно прочтете его.

Это правда, что фон рабочего стола по соглашению является корневым окном.Однако на типичном современном рабочем столе действуют две важные механики:

  • настройка корневого изображения (обои), которая не рисуется на фоне корневого окна
  • обогащение фона рабочего стола (например, кликабельных значков) путем создания препятствия для корневого окна другим окном базового уровня

Если вы хотите нарисовать на фоне,только последнее имеет значение для вас.Однако если вы также хотите прочитать фон, например, для реальной прозрачности, то также играет роль первая точка.

Рисование на фоне:

Авторыпрограммы xsnow и xpenguins были первыми, кто решил эту проблему.Они написали умную функцию, которая может выводить окна рабочего стола KDE и Gnome, если они присутствуют.Поскольку другие оконные менеджеры, которые мешают корневому окну, как правило, подчиняются этим стандартам де-факто, они работают очень надежно.С их кодом вы мгновенно узнаете, в какое окно рисовать.

Чтение корневого фона (растровое изображение):

Это сложнее.Наивный запрос для оконных пикселей не удастся, потому что все передние окна также являются частью корневого окна;так что это облегчает создание скриншота, но не позволяет получить реальный фон.

Однако существует соглашение о глобальном имени корневого растрового изображения (которое используется любым подходящим установщиком растрового изображения фонового изображения).Растровое изображение можно найти, запросив это имя.Однако становится неприятно, если либо установщик фона отстой и не подчиняется этому правилу, либо фон не растровое изображение, а только шаблон или что-то в этом роде.

Второй вариант, который я нашел только недавно, это использовать расширение XDBE (двойной буфер), чтобы получить фон корневого окна.Это очень чисто, занимает всего две-три строки кода и работает в любом случае. Но Xorg считает XDBE устаревшим (или, точнее, скорее устаревшим).Так что я не знаю, является ли использование его только для этой цели все еще хорошей идеей.Но я могу дать вам код по запросу !

Наконец, реализация:

Да, есть реализация, доступная для обеих вещей.Проверьте http://fopref.meinungsverstaerker.de/xmms-rootvis/ В этом архиве, который является GPL, getroot.c взят из xpenguins, без зависимостей от другого кода xpenguins.Кроме того, начиная со строки 144 rootvis.c вы найдете код для захвата фонового растрового изображения.

Веселитесь!

3 голосов
/ 18 февраля 2010

Linux почти всегда использует X11 (Gnome / KDE - высокоуровневые API). На X11 «рабочий стол» известен как «корневое окно». Итак, нарисуйте это.

2 голосов
/ 18 февраля 2010

Если вы хотите настроить таргетинг на определенную среду рабочего стола, взгляните на gdesklets для GNOME или плазменные виджеты для KDE. Или вы можете использовать «голый металл», как говорят MSalters, и рисовать прямо в корневом окне (посмотрите, например, этот урок )

0 голосов
/ 19 февраля 2010

KDE Plasma-Desktop поддерживает так называемые действия, которые являются модулями для различных типов рабочих столов (C ++). Я думаю, что это хороший момент, чтобы иметь простую и интегрированную базу для подобных действий.

0 голосов
/ 18 февраля 2010

Гаджеты Google Desktop или gdesklets могут помочь, а не начинать с нуля.

0 голосов
/ 18 февраля 2010

Я видел решения compiz, которые способны достичь чего-то подобного.Вне всяких сомнений, compiz не очень документ AFAIK, но этот урок может помочь вам начать

0 голосов
/ 18 февраля 2010

Просто держите его, чтобы никто не написал то же самое, что не правильно.

Не существует такого понятия, как "рабочий стол linux" или "обои linux".Ты больше не в мире Windows.Графическая среда в Linux управляется различными системами: GNOME, KDE, xfce и т. Д. * Каждая из них (и каждая их основная версия) имеет свой собственный способ доступа к рабочему столу.

* "и т. Д."это не графическая среда, это фраза" и так далее ".

...