2009-08-19 5 views
5

バックグラウンドでは、私は を実行しています。これはGNOMEとFluxboxの両方で試しました。ルートウィンドウに描画した後にXが鳴るのはなぜですか

とにかく、私はデスクトップ上に描画する方法を見てきた、と私が見つけたと、ここで、このコードを試してみました: http://blog.prashanthellina.com/2007/08/24/drawing-on-your-desktop/

それは(コントロールCを押すことで)それを終了する時に除いて、うまく働いた、X新しいウィンドウを作成する機能が失われます。

私は多分問題はpygameのいくつかのリソースを解放していなかったと思っていたので、私は私に次のことを与えて、トラップするコードのブロックにkillシグナルを追加しました:

""" 
Run the following command in the shell before executing this script 
export SDL_WINDOWID=`xwininfo -root|grep "id:"|sed 's/^.*id: //'|sed 's/ (.*$//'` 
""" 
import pygame 
import sys 
import random 
import time 
import signal 





pygame.init() 

window = pygame.display.set_mode((1280, 1024)) 
screen = pygame.display.get_surface() 


def handle_sigint(signum, frame): 
    """I want to ensure resources are released before bailing.""" 
    print("SIGINT received."); 
    pygame.display.quit() 
    pygame.quit() 
    sys.exit(0) 


# Set handler to catch C^C Interupts 
signal.signal(signal.SIGINT, handle_sigint) 


while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit(0) 

    x = random.choice(range(640)) 
    y = random.choice(range(480)) 
    radius = random.choice(range(100)) 
    col_r = random.choice(range(255)) 
    col_g = random.choice(range(255)) 
    col_b = random.choice(range(255)) 

    time.sleep(.03) 
    rect = pygame.draw.circle(screen, (col_r, col_g, col_b), (x,y), radius) 
    pygame.display.update(rect) 

そして私は再び試みました。割り込みハンドラのprintステートメントは、終了時にハンドラが実行されることを通知しますが、私はまだ同じ問題を抱えています。さらに興味深いことに、Xは実行中に問題はありません。それはそれを終了した後です。

誰もが何が起こっているか考えているかもしれませんし、私のXセッションを壊さないようにコードを修正するために何ができるのでしょうか?前もって感謝します。

答えて

1

質問、アイデアしようとする&の事:あなたは-cを試す前に、端末をお持ちの場合

  1. 、あなたはまだ後にそれを入力することができますか?はいの場合は、xサーバーではなくセッションまたはウィンドウマネージャーに問題がある可能性があります。
  2. Ctrl-Alt-Backspaceを試しましたか?これで問題は解決しますか?
  3. gtk-window-decoratorとx-session-managerはまだ動作していますか?

通常、pygameはウィンドウから使い果たされ、通常はそれ自身の後でクリーンアップを試みます。 pygame.display.quit()への明示的な呼び出しを追加しましたが、これは何も変わっていないと思います - pygameはSDL_WINDOWID変数で参照されるウィンドウを削除しようとします。実際にあなたのルートウィンドウを削除することに成功することはおそらく悪いことです。私はあなたが権限を持っていないので、ubuntuを実行している人から、pygameはウィンドウを削除できないと推測します。あなたはあなたのOS上にいるかもしれません。

ルートウィンドウを強制終了するのは悪いので、ルートウィンドウの制御をnautilus(gnome)に戻すだけですか? gconftool-2 --type bool --set /apps/nautilus/preferences/show_desktop trueのようなもの?

+0

質問への回答: 1.私はまだ端末に入力することができますが、奇妙なことが起こり始めます。たとえば、Firefoxでこのコメントを入力すると、カーソルがありません。 2.)はい、問題が修正されます。 3)私はどのように伝えるべきかわかりません。私はps axを試しました| grep gtkとps ax | grepセッションが表示されますが、どちらのプロセスも表示されません。 実際、フラックスボックスで走っていますが、ノーチラスを使用していないので、gconftoolに関するものは無関係です。しかし、いずれにしても、アドバイスをいただきありがとうございます。 – BigBeagle

+0

さて、あなたはgnomeとfluxboxの両方に言及しました。私はすべてのコメントがgnomeに向けられていると述べていたはずです。申し訳ありません。 gnomeを実行しているなら、間違いなく実行中のプロセスが見えるはずです。また、ファイルブラウザとして機能するだけでなく、(gnome)デスクトップを管理します。 – DaveParillo

関連する問題