Per lo sfondo, sto usando Debian Lenny e ho provato questo con GNOME e Fluxbox.Perché X soffoca dopo che disegno nella finestra radice
In ogni caso, ho cercato a come disegnare sul desktop, e ho trovato e provato questo codice qui: http://blog.prashanthellina.com/2007/08/24/drawing-on-your-desktop/
Ha funzionato bene, se non dietro terminarlo (colpendo di controllo C), X perde la sua capacità di creare nuove finestre.
Avevo pensato che forse il problema è stato Pygame non rilasciando alcune risorse, così ho aggiunto in un blocco di codice per intrappolare il segnale kill, dandomi il seguente:
"""
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)
E così ho provato di nuovo. L'istruzione print nel gestore di interrupt mi dice che il gestore viene eseguito quando esco, ma ho ancora lo stesso problema. E ancora più interessante, X non ha problemi mentre è in esecuzione. È solo dopo averlo chiuso.
Qualcuno là fuori ha idea di cosa sta succedendo e cosa posso fare per correggere il codice in modo da non rovinare la mia sessione X? Grazie in anticipo.
In risposta alle domande: 1.) Posso ancora digitare il terminale, anche se cominciano a succedere cose strane. Ad esempio, mentre digito questo commento in Firefox, non ho un cursore. 2.) Sì, questo risolve il problema. 3.) Non sono sicuro di come dirlo. Ho provato ps ax | grep gtk e ps ax | sessione grep, ma non vedo nessuno dei due processi. E in realtà, in esecuzione in fluxbox, non sto usando nautilus, quindi le cose relative a gconftool sembrano irrilevanti. Ma in ogni caso, grazie per il consiglio. – BigBeagle
Bene, hai citato sia gnome che fluxbox. Avrei dovuto dire che tutti i miei commenti erano diretti verso gnome. Mi dispiace per quello Se stai eseguendo gnome, * sicuramente * dovresti vedere quei processi in esecuzione. Inoltre, nautilus gestisce il tuo desktop (gnome), oltre a funzionare come un browser di file. – DaveParillo