При поиске вокруг я нашел эту тему , и, глядя на аватарку, я предполагаю, что это ваша тема;) Я еще раз опубликую код, указанный LemursDontExist есть все в одном.
Краткое объяснение: чтобы сделать программу заставкой в X Windows, программа проверяет, является ли она запущенной в качестве заставки , то есть она была вызвана оконной системой как таковой. Это делается путем проверки, установлена ли переменная окружения DISPLAY
на XSCREENSAVER_WINDOW
.
В этом случае программа должна перейти в полноэкранный режим и реагировать на определенные события. Это именно то, что делает код ниже. Установка этой переменной выполняется через приложение xscreensaver, вы сами этого не делаете.
Бит, который вам не хватает, это привязка clutter-gtk
python. В текущей Ubuntu имя пакета - gir1.2-clutter-gtk-0.10
. При этом вы можете использовать пользовательский класс окна вместе с API беспорядка.
class GsThemeWindow(gtk.Window):
__gtype_name__ = 'GsThemeWindow'
def __init__(self):
super(GsThemeWindow, self).__init__()
self.connect("destroy", gtk.main_quit)
def do_realize(self):
ident = os.environ.get('XSCREENSAVER_WINDOW')
if not ident is None:
self.window = gtk.gdk.window_foreign_new(int(ident, 16))
self.window.set_events(gtk.gdk.EXPOSURE_MASK |
gtk.gdk.STRUCTURE_MASK)
x, y, w, h, depth = self.window.get_geometry()
self.size_allocate(gtk.gdk.Rectangle(x, y, w, h))
self.set_default_size(w, h)
self.set_decorated(False)
else:
self.window = gtk.gdk.Window(
self.get_parent_window(),
width=self.allocation.width,
height=self.allocation.height,
window_type=gtk.gdk.WINDOW_TOPLEVEL,
wclass=gtk.gdk.INPUT_OUTPUT,
event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK)
self.window.set_user_data(self)
self.style.attach(self.window)
self.set_flags(self.flags() | gtk.REALIZED)
Краткий обзор того, как использовать беспорядок с python (он сильно изменился), см. в этом примере