Существует ли достойный способ запретить экранные заставки в Linux?

Я ищу достойный, нехромой способ запретить xscreensaver, kscreensaver, или экранная заставка гнома, whichver мог бы работать, предпочтительно агностическим экранной заставкой способом, и это абсолютно положительно должно выполниться быстро.

Я считал xscreensaver FAQ (http://www.jwz.org/xscreensaver/faq.html).

У меня есть базирующаяся игровая программа gtk, это проворачивает 30 кадров/секунда при смешивании нескольких каналов аудио, и так как им управляет джойстик, иногда экранная заставка будет умирать. Я поместил в кавычки, потому что существует по крайней мере три различных популярных экранных заставки, xscreensaver, экранная заставка гнома, и kscreensaver, каждый с их собственными уникальными и неуклюжими методами, которыми приложение могло бы запретить их.

Кто-либо инкапсулировал код для запрещения всех их в быстрый блок кода? О, и это должно быть GPL совместимый.

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

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

Какие-либо идеи?

Спасибо,

- steve


Хм, unfortuanately, по крайней мере, на ядре Fedora 8, это, кажется, не работает.

Сценарий xdg-экранной-заставки там и, кажется, предназначается для работы, он просто на самом деле не работает.

После того как Вы делаете "xdg-экранную-заставку, приостанавливают идентификатор окна", где идентификатор окна получен из программы через

xwindow_id = GDK_WINDOW_XWINDOW (GTK_WIDGET (widget)->window);

Или ли идентификатор окна получен через xprop и xdg-экранную-заставку, выполненную вручную, два процесса создаются:

[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-экранной-заставки не возобновляет экранную заставку.

Чтобы повторно включить экранную заставку, я должен вручную уничтожить их и вручную удалить файлы, которые она разбрасывает в/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-экранной-заставки (который, кажется, сценарий оболочки, который в конечном счете просто делает "ожидание" моего процесса - прохладный) это, кажется, сделано сделать, что я хочу. Я знал, что не мог быть единственным или первым, который будет стоять перед этой проблемой.

Спасибо!

- steve

10
задан Bill the Lizard 26 August 2012 в 15:23
поделиться

2 ответа

Нет, но да...

Нет никакого хорошего очевидного способа, чтобы сделать это. По-моему, должен быть механизм, которым управляет X-сервер, который обе экранных заставки и заинтересованные приложения могут добровольно использовать для согласования подавления любой экранной заставки во время времени выполнения одной или нескольких программ. Но никакой такой механизм все же не существует к моему знанию. GNOME и KDE надеются реализовать подход DBUS к этой проблеме, но по-моему даже если это становится широко распространенным (это еще не достаточно широко распространено для доверия ему в стороннем коде) это не правильный подход.

Однако xdg-экранная-заставка является стандартизированным сценарием оболочки FreeDesktop, который можно выполнить как подпроцесс для управления экранной заставкой. Это управляет большинством популярных экранных заставок, и поставщик ОС был бы ответственен за обновление его/, поддерживающий его для работы с более новыми экранными заставками или лучшими способами сделать это в будущем. В отличие от многих других клуджей это автоматически повторно включит экранную заставку, если Ваши сбои приложения или выходы через некоторый маршрут, который забывает называть повторно разрешать код. См. страницу руководства для деталей в том, как использовать ее.

Как GTK + пользователь, вероятно, самые хитрые аспекты этого для Вас создали бы подпроцесс для выполнения сценария оболочки (если Вы не сделали этого, прежде чем Вы захотите найти учебное руководство об использовании ветвления + должностное лицо), и то, чтобы заставлять идентификатор XWindow главного окна Вашего приложения дать xdg-экранной-заставке.

Вы просите, чтобы код был "быстр". Это заставляет меня задаться вопросом, ожидаете ли Вы выполнять его, каждый кадр - не делает. Решение xdg-экранной-заставки позволяет Вам отключать или renable экранная заставка явно, вместо того, чтобы пытаться подавить его однажды на кадр или что-либо как этот.

8
ответ дан 3 December 2019 в 22:02
поделиться

Проигрыватели фильмов обычно отключают экранные заставки. Вы могли ввести по абсолютному адресу вокруг mplayer-кода, чтобы видеть, как они делают это.

Для регулярного X, они используют XScreenSaverSuspend, где поддерживается.

2
ответ дан 3 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: