Для фона я бегу
Debian Lenny, и попробовал это с GNOME и Fluxbox.
Во всяком случае, я смотрел на то, как рисовать на рабочем столе, и я нашел и попробовал этот код здесь:
http://blog.prashanthellina.com/2007/08/24/drawing-on-your-desktop/
Это работало нормально, за исключением того, что после его завершения (нажатием клавиши C) X теряет способность создавать новые окна.
Я думал, что, возможно, проблема в том, что pygame не высвобождает какой-либо ресурс, поэтому я добавил блок кода для перехвата сигнала уничтожения, давая мне следующее:
"""
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? Заранее спасибо.