xscreensaver、kscreensaver、または gnome-screensaver のうち、実行されている可能性のあるものを、できればスクリーンセーバーにとらわれない方法で抑制するための適切でラメのない方法を探しています。
xscreensaver FAQを読みました。
私は gtk ベースのゲーム プログラムを持っており、複数のオーディオ チャネルをミキシングしながら毎秒 30 フレームをクランクアウトしています。それはジョイスティックで制御されているため、「the」スクリーンセーバーが作動することがあります。 xscreensaver、gnome-screensaver、および kscreensaver の少なくとも 3 つの異なる一般的なスクリーンセーバーであり、それぞれに独自のユニークで扱いにくい方法があり、アプリケーションがそれらを禁止する可能性があります。
コードをカプセル化して、これらすべてを高速なコードの塊にまとめた人はいますか? ああ、それは GPL 互換でなければなりません。
現在、私のコードは、スクリーンセーバーが検出され、ジョイスティックが使用されている場合、非協力的なスクリーンセーバー開発者について哀れに泣き言を言うだけであり、実際にはスクリーンセーバーを手動で無効にするようにユーザーにアドバイスする以外に何もしようとしません。やろうと思うことは信じられないほど醜いので、私はそれをすることを単に拒否します.
他の誰かがこれに遭遇したかどうか、彼らが何をしたか、そして彼らが何かをしたかどうか、それが私に思われるほど醜いものであったかどうか、またはエレガントな解決策があるかどうか... X イベントを何らかの形で合成して、何らかのアクティビティがあるとスクリーンセーバーに思い込ませることで、普遍的な方法でトリックを実行できるように思われますが、それを行う方法が本当にわかりません (そして、それを行うために root になる必要がないことを願っています)。 .)
何か案は?
残念ながら、少なくとも Fedora コア 8 では、これは機能していないようです。
xdg-screensaver スクリプトがあり、動作するように意図されているようですが、実際には動作しません。
「xdg-screensaver suspend window-id」を実行すると、ウィンドウIDがプログラム内から取得されます
xwindow_id = GDK_WINDOW_XWINDOW (GTK_WIDGET (widget)->window);
または、ウィンドウ ID が xprop を介して取得され、xdg-screensaver が手動で実行されるかどうかにかかわらず、2 つのプロセスが作成されます。
[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 resume window-id を実行しても、スクリーンセーバーは再開されません。
スクリーンセーバーを再度有効にするには、手動でそれらを強制終了し、/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 (これは、最終的にプロセスを「待機」するだけのシェル スクリプトのようです。クールです) を見ると、私がやりたいことだけを行うように作られているようです。この問題に直面したのは、私だけではない、または最初の人ではないことはわかっていました。