Я ищу достойный, не отстойный способ запрета xscreensaver, kscreensaver или gnome-screensaver, который может быть запущен, предпочтительно не зависящим от скринсейвера, и он абсолютно положительно должен выполняться fast .
Я прочитал FAQ по xscreensaver (http://www.jwz.org/xscreensaver/faq.html).
У меня есть игровая программа на основе gtk, которая выдает 30 кадров в секунду, смешивая несколько каналов звука, и, поскольку она управляется джойстиком, иногда включается экранная заставка «я». Я помещаю «в» в кавычки, потому что Существует как минимум три разных популярных заставки: xscreensaver, gnome-screensaver и kscreensaver, каждая из которых имеет свои собственные уникальные и клунки методы, с помощью которых приложение может их запретить.
Кто-нибудь инкапсулировал код, чтобы запретить все это в быстрый кусок кода? О, и он должен быть совместим с GPL.
В настоящее время мой код просто жалко жалуется на неработающих разработчиков заставок, если обнаружена какая-либо заставка и используется джойстик, и на самом деле не пытается ничего сделать, кроме как советовать пользователю отключить заставку вручную, как единственное другое Я могу думать, что это настолько ужасно, что я просто отказываюсь это делать.
Просто интересно, сталкивался ли кто-то еще с этим, и что они сделали, и если они что-то сделали, если бы это было так безобразно, как мне кажется, это должно было бы быть, или было бы какое-то элегантное решение там? ... Похоже, что, возможно, синтезировать X-события так, чтобы обмануть заставку, заставив ее думать, что какая-то деятельность могла бы добиться цели универсальным способом, но я действительно не уверен, как это сделать (и надеюсь, что вам не нужно быть пользователем root). сделать это.)
Есть идеи?
Спасибо
- Стив
Хм, к сожалению, по крайней мере на Fedora Core 8, это не работает.
Сценарий xdg-screensaver уже есть и, кажется, предназначен для работы, он просто не работает.
Как только вы сделаете «xdg-screensaver suspend window-id», где идентификатор окна получается изнутри программы через
xwindow_id = GDK_WINDOW_XWINDOW (GTK_WIDGET (widget)->window);
Или, если идентификатор окна получен через xprop, и xdg-screensaver запускается вручную, создаются два процесса:
[scameron@zuul wordwarvi]$ ps -efa | grep xdg
scameron 4218 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004
scameron 4223 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004
scameron 4313 3151 0 20:15 pts/1 00:00:00 grep xdg
[scameron@zuul wordwarvi]$
И они никогда не умирают, даже после того, как программа, которую они якобы ожидают, умирает, и заставка никогда не включается снова.
[scameron@zuul wordwarvi]$ xdg-screensaver status
disabled
[scameron@zuul wordwarvi]$ ls -ltr /tmp | grep xdg
-rw------- 1 scameron scameron 15 2009-01-20 20:12 xdg-screensaver-scameron--0.0
[scameron@zuul wordwarvi]$
Запуск xdg-screensaver. Идентификатор окна возобновления не возобновляет работу заставки.
Чтобы снова включить скринсейвер, я должен вручную убить их и вручную удалить файлы, которые он оставляет в / tmp:
[scameron@zuul wordwarvi]$ kill 4218 4223
[scameron@zuul wordwarvi]$ rm /tmp/xdg-screensaver-scameron--0.0
[scameron@zuul wordwarvi]$ xdg-screensaver status
enabled
[scameron@zuul wordwarvi]$
Итак, благие намерения, но, похоже, на самом деле не работают.
Нет, конечно, не ожидая, что он будет запускаться каждый кадр, но не хочу, чтобы он вызывал икоты, когда он все-таки работает, и все. С моей мыслью о синтезе событий X я подумал, что этого будет достаточно часто, чтобы заставка заставляла думать, что активность есть.
Глядя на xdg-screensaver (который, похоже, является сценарием оболочки, который в конечном итоге просто «ждет» моего процесса - круто), кажется, он сделан именно для того, что я хочу. Я знал, что не могу быть единственным или первым, кто столкнется с этой проблемой.
Спасибо!
- Стив