2009-08-19 5 views
5

Dla tła, pracuję nad Debian Lenny i próbowałem tego zarówno z GNOME, jak i Fluxboksem.Dlaczego X dławi się po tym, jak narysuję do głównego okna?

Zresztą, byłem patrząc jak rysować na pulpicie, a znalazłem i próbowałem ten kod tutaj: http://blog.prashanthellina.com/2007/08/24/drawing-on-your-desktop/

to działało dobrze, z wyjątkiem na kończące go (poprzez wciśnięcie sterującego C), X traci zdolność do tworzenia nowych okien.

myślałem, że może problem został pygame nie zwalniając jakiś zasób, więc dodałem w bloku kodu w celu wyłapania sygnału kill, dając mi następujące:

""" 
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) 

A więc jeszcze raz spróbował. Instrukcja print w procedurze obsługi przerwań informuje mnie, że program obsługi działa po zakończeniu, ale nadal mam ten sam problem. Co jeszcze ciekawsze, X nie ma problemów, gdy jest uruchomiony. To tylko po jego zakończeniu.

Czy ktokolwiek może wiedzieć, co się dzieje i co mogę zrobić, aby naprawić kod, aby nie zniszczył mojej sesji X? Z góry dziękuję.

Odpowiedz

1

pytania, pomysły & rzeczy spróbować:

  1. Jeśli masz terminal się zanim spróbujesz -C, nadal można wpisać w nim chodzi? Jeśli tak, prawdopodobnie istnieje problem w twojej sesji lub menedżerze okien, a nie w serwerze x.
  2. Czy wypróbowałeś Ctrl-Alt-Backspace? Czy to rozwiązuje twój problem?
  3. Czy program do dekorowania okien GTk i menedżer sesji x nadal działają?

Pygame jest zwykle wybierany z okna i zwykle próbuje sam się posprzątać. Dodałeś jednoznaczne wywołanie pygame.display.quit(), ale nie sądzę, żeby to zmieniło cokolwiek - pygame próbuje usunąć okno określone przez zmienną SDL_WINDOWID. Właściwie powodzenie w usunięciu okna głównego jest prawdopodobnie złe. Zgaduję, że ten facet, z którym to zrobiłeś, uruchamiający ubuntu, pygame nie usuwa okna, ponieważ nie ma pozwolenia. Możesz na swoim systemie operacyjnym.

Ponieważ zabicie okna głównego jest złe, a może przywrócicie kontrolę nad oknem głównym do nautilusa (gnoma)? coś w rodzaju gconftool-2 --type bool --set /apps/nautilus/preferences/show_desktop true?

+0

W odpowiedzi na pytania: 1.) Nadal mogę pisać w terminalu, chociaż zaczyna się dziać coś dziwnego. Na przykład, gdy wpisuję ten komentarz w przeglądarce Firefox, nie mam kursora. 2.) Tak, to rozwiązuje problem. 3.) Nie wiem, jak powiedzieć. Próbowałem ps ax | grep gtk i ps ax | grep sesja, ale nie widzę żadnego z tych procesów. I tak, działając w Fluxboksie, nie używam Nautilusa, więc rzeczy związane z gconftool wydają się nieistotne. Ale w każdym razie, dzięki za radę. – BigBeagle

+0

Cóż, wspomniałeś zarówno gnome & fluxbox. Powinienem wspomnieć, że wszystkie moje komentarze były skierowane do gnoma. Przepraszam za to. Jeśli używasz gnoma, * zdecydowanie * powinieneś zobaczyć te procesy. Poza tym nautilus zarządza Twoim komputerem (gnome), a dodatkowo działa jako przeglądarka plików. – DaveParillo

Powiązane problemy