Buscar este blog

junio 29, 2011

pyglet

pyglet

Revisar camino interesante

[Python] KeyCagator 0.5

[Python] KeyCagator 0.5

Revisar se ve interesante

Icarus 0.1.6a va por buen camino

Se anade un lanzado de cuatro botones con iconos, se mejora el reloj y el capturador de pantalla y correcciones menores, ahora todo si es widgets en pantalla

tomar capturas de pantalla con python - parte 2

Se anadio la captura por recuadro, esto quiere decir que se puede tomar solo un area de la pantalla sin tener que tomar la captura de toda la pantalla dando clic en la hoja que tiene la ventana.

import pygtk; pygtk.require('2.0')
import gtk
import os, datetime
import sys

version="0.2"

data = [
"16 16 3 1",
"       c None",
".      c #000000",
"X      c #FFFFFF",
"                ",
"   ......       ",
"   .XXX.X.      ",
"   .XXX.XX.     ",
"   .XXX.XXX.    ",
"   .XXX.....    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .........    ",
"                ",
"                "
]

class icarus_pantallazo:
    def main(self):
        root = gtk.gdk.get_default_root_window();
        rootwidth, rootheight = root.get_size();
        current_dt=datetime.datetime.now()
        dia_numero= "%02d" % current_dt.day
        meses_numero="%02d" % current_dt.month
        anio=str(current_dt.year)
        hora_24="%02d" % current_dt.hour
        minuto="%02d" % current_dt.minute
        segundo="%02d" % current_dt.second
        self.fecha="_"+dia_numero+"-"+meses_numero+"-"+anio+"_"+hora_24+":"+minuto+":"+segundo
        #
        self.pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 1, 8, rootwidth, rootheight);
        self.pix.get_from_drawable(root, root.get_colormap(), 0, 0, 0, 0, rootwidth, rootheight);
       
    def guardar(self,modo):
        if modo==1:
            #crear ventana para tomar el recuadro
            self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
            self.window.set_decorated(True)
            self.window.connect("delete_event", self.close_application)
            self.window.set_events(self.window.get_events() | gtk.gdk.BUTTON_PRESS_MASK)
            self.window.connect("button_press_event", self.press_aplication)
            self.window.show()
           
            pixmap, mask = gtk.gdk.pixmap_create_from_xpm_d(self.window.window, None, data)
            self.image = gtk.Image()
            self.image.set_from_pixmap(pixmap, mask)
            self.image.show()

            # To display the image, we use a fixed widget to place the image
            self.fixed = gtk.Fixed()
            self.fixed.set_size_request(50,50) #16,16
            self.fixed.put(self.image, 0, 0)
            self.window.add(self.fixed)
            self.fixed.show()
            self.window.shape_combine_mask(mask, 0, 0)
            gtk.main()
            #
        if self.pix!=None:
            home = os.environ['HOME']
            self.pix.save(home+"/pantallazo"+self.fecha+".png", "png")
            print "Tomo foto"
            return 0
        return 1
    def press_aplication(self, widget, event):
        #print event
        if event.x<=16 and event.y<=16 and event.button==1:
            dimension=self.window.get_size()
            posicion=self.window.get_position()
            pix_aux = self.pix.subpixbuf(posicion[0],posicion[1], dimension[0], dimension[1])
            self.pix=pix_aux
            self.window.hide()
            gtk.main_quit()
            #self.pix=None
        return 0
       
    def close_application(self, widget, event, data=None):
        gtk.main_quit()
        self.pix=None
        #del self.window
        return gtk.FALSE

if __name__ == '__main__':
    a=icarus_pantallazo()
    a.main()
    if sys.argv[1].lower()=="completa":
        a.guardar(0)
    elif sys.argv[1].lower()=="recuadro":
        a.guardar(1)
    else:
        print "parametro incorrecto"

$python archivo.py recuadro "toma la captura del area marcada por la ventana"



o
$python archivo.py completa "Toma la captura completa"


Descargar despues de descargar anadir la extension py

junio 25, 2011

Icarus 0.1.5b

Mejorado Icarus ya dispone de una interfaz grafica para realizar las acciones 
  • Activar 
  • Desactivar
  • Seleccionar demonio
  • Pantallazo
  • Salir
Para poder usarlo es necesario dar click derecho en el tray en el icono de Icarus que tiene la siguiente forma

Demonios anadidos:
  • Pantallazo
  • Aviso de bataria baja
  • wallv2 - Widgets Pasivo
 Solo es necesario correrlo una vez y listo queda funcionando asi se cierre Icarus

 Aca una imagen del about del programa.



Como instalar

se lo instala descomprimiendo la archivo y ejecutando el archivo setup.py de la siguiente manera:

$sudo python setup install

para desintalar

$sudo python setup.py uninstall

todo el codigo esta bajo gplv2

Descargar
link

junio 20, 2011

Pasar de pdf a Html por consola

Primero se tiene que instalar el siguiente paquete (realizado en ubuntu 11.04 server)

$ sudo apt-get install poppler-utils

esto nos instalara las siguientes herramientas

{pdftoabw   pdftohtml  pdftoppm   pdftops    pdftotext }

de la cual vamos a usar "pdftohtml"de la siguiente manera

$ pdftohtml -c test.pdf test.html

se pone el parametro -c porque el pdf tiene imágenes en test.html se encuentran todos los enlaces a las paguinas generadas

junio 19, 2011

SMF MELI


Como crear un foro de una manera simple con la explicacion de metacortex de http://www.forosdelweb.com/ el articulo de el lo encuentras en AQUI al final del articulo encontraran una implementacion del mismo perdon la tardanza pero me olvide de hacer el articulo después de terminar el foro pero que son mas de 100 días de retraso por ese motivo utilizo el articulo de metacortex la pereza e grande...


Aquí un ejemplo ya instalado en nuestro servidor
http://www.softwarelibrespe.org/foro/index.php


Cifrado de Vigenere - parte 2

se añadieron diccionarios del tipo siguiente tipo

>>diccionario={"hola":"que fue",0:"cero""A":"letra A"}
>>print diccionario["A"]
"letra A"
>>print diccionario[0]
"cero"

para el abecedario y la palabra clave teniendo mas  de una que puede ser escogida aleatoriamente o segun su clave en el diccionario


import random

letras_diccionario={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I',9:'J',10:'K',11:'L',12:'M',13:'N',14:'O',15:'P',16:'Q',17:'R',18:'S',19:'T',20:'U',21:'V',22:'W',23:'X',24:'Y',25:'Z',26:'1', 27:'2', 28:'3', 29:'4', 30:'5', 31:'6', 32:'7', 33:'8', 34:'9', 35:'0',36:' '}
palabra_clave={"facebook":"nadie es perfecto y yo soy nadie","correo":"la unica lucha que verdaderamente se pierde es la que se abandona","notas":"la casa es de todos","programas":"qwerty ytrewq danny ynnad"}

def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo

def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=letras_diccionario.values() #genera la lista de valores
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1

def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=letras_diccionario.values() #genera la lista de valores
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo

#ord de numero a letra son comandos
#chr de letra a numero son comandos

def letra_numero(letra):
clave=letras_diccionario.values()
return clave.index(letra)

def numero_letra(numero):
return letras_diccionario[numero]

def ciclo_pista (valor_a_probar,numero):
pista="36A81"
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
if aux==numero:
pista=valor_a_probar
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista

def generar_pista(numero):
#buscar una manera de generar un numera de 5 digitos que sumandos
#todos sus digitos hasta tener un digito sea igual a la variable numero
#sin contar el cero
pista="36A81"
if numero==0:
pista="36A81"
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista

def verificar_pista(valor_a_probar):
if valor_a_probar!="36A81":
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
else:
aux=0
return aux

def ingreso_mensaje():
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].lstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje_alter[i]=mensaje_alter[i].rstrip(")")
mensaje_alter[i]=mensaje_alter[i].lstrip(")")
mensaje_alter[i]=mensaje_alter[i].rstrip("(")
mensaje_alter[i]=mensaje_alter[i].lstrip("(")
mensaje+=mensaje_alter[i]+" "
mensaje=mensaje.lstrip()
mensaje=mensaje.rstrip()
return mensaje

def main():
clave=palabra_clave.values()
mensaje=ingreso_mensaje()
valor_tabla=random.randint(0,len(clave)-1) # genera aleatoriamente cualquiera de las llaves privadas
#valor_tabla=clave.index(palabra_clave["facebook"]) #una escoje alguna de las llaves privadas segun su clave de diccionario
pista=generar_pista(valor_tabla)
#el primer par dice que clave utilizo
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(clave[valor_tabla],mensaje)
resultado=resultado.lstrip()
resultado1=pista+" "+resultado
print "resultado: ", resultado1
#recuperacion
valor_tabla=verificar_pista(resultado1[:5])
mensaje_original=recuperar_virgerene(clave[valor_tabla],resultado1[6:])
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0

if __name__ == '__main__':
main()


Descargar codigo

junio 13, 2011

Cifrado de Vigenere

"

Cifrado de Vigenère



El cifrado Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado César formando 

estos caracteres una tabla, llamada tabla de Vigenère, que se usa como clave. El cifrado de Vigenère es un
cifrado polialfabético y de sustitución.
El cifrado Vigenère se ha reinventado muchas veces. El método original fue descrito por Giovan Batista Belaso 

en su libro de 1553 La cifra del Sig. Giovan Batista Belaso. Sin embargo, fue incorrectamente atribuido más tarde
 a Blaise de Vigenère, concretamente en el siglo XIX, y por ello aún se le conoce como el "cifrado Vigenère".

Este cifrado es conocido porque es fácil de entender e implementar, además parece irresoluble; esto le hizo 
valedor del apodo el código indescifrable (le chiffre indéchiffrable, en francés)." wikipedia

aqui el codigo


def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo

def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1

def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo

def letra_numero(letra):
return ord(letra)-65

def numero_letra(numero):
return chr(numero+65)
def main():
palabra_clave="meliespe"
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje+=mensaje_alter[i]
mensaje=mensaje.lstrip()
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(palabra_clave,mensaje)
resultado=resultado.lstrip()
print "resultado: ", resultado
#recuperacion
mensaje_original=recuperar_virgerene(palabra_clave,resultado)
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0

if __name__ == '__main__':
main()

No esta implementado con la forma matemática sino de una forma manual por así decirlo
la tabla de transformación

tomar capturas de pantalla con python

Acabas de instalar tu entorno gráfico no tienes como tomar capturas de pantalla bueno la solucion es python. Como?


import gtk
import os, datetime

class icarus_pantallazo:
def main(self):
root = gtk.gdk.get_default_root_window();
rootwidth, rootheight = root.get_size();
#lo comentado creo que va para cambiar la imagen
#gc = gtk.gdk.GC( root )
#
current_dt=datetime.datetime.now()
dia_numero= "%02d" % current_dt.day
meses_numero="%02d" % current_dt.month
anio=str(current_dt.year)
hora_24="%02d" % current_dt.hour
minuto="%02d" % current_dt.minute
segundo="%02d" % current_dt.second
fecha="_"+dia_numero+"-"+meses_numero+"-"+anio+"_"+hora_24+":"+minuto+":"+segundo
#
pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 1, 8, rootwidth, rootheight);
pix.get_from_drawable(root, root.get_colormap(), 0, 0, 0, 0, rootwidth, rootheight);
home = os.environ['HOME']
pix.save(home+"/pantallazo"+fecha+".png", "png")
#root.draw_image(gc,"test.png")
return 0

if __name__ == '__main__':
a=icarus_pantallazo()
a.main()

Entonces este script lo relacionas con alguna combinacion de teclas y listo a tomar capturas de pantalla como esta.

Python: Módulos y paquetes

Python: Módulos y paquetes


Muy interesante para poder realizar modulos y paquetes en python

modulo

import ergus

paquetes

imports ergus.lo_que_sea

junio 07, 2011

Ready for the future of the Internet?

Ready for the future of the Internet?

Icarus - Widgets pasivos


Reloj wallpaper con svg y nitrogen

 
Esta fue la entrada anterior, ahora cambio de tal modo que se gano un nombre le llame icarus por que tarde o temprano va a caer en alguna maquina ^_^ 

Los cambios realizados son:
  1. ninguna dependencia de cron para funcionar
  2. trabaja por hilos para hacer las actualizaciones mediando la libreria ergus hecha para el proyecto
  3. se maneja por opciones start,stop e imagen  

La primera es para los widgets pasivos como reloj y sensores (todavía no esta hecho), solo funciona por el momento con gnome o escritorio que tengan gconftool-2 para el resto para openbox con esetroot y Xcfe4 con su nativo, pero estos solo el ultimo no eh probado para ver si funciona con svg, si no funciona toca modificar demonio_wallv2 en la funcion generador toca añadir el comando pasar_svg_png(el archivo svg,carpeta a donde va).  y agregarlo por icarus imagen  con un os.popen  dentro del mismo metodo y despues se va a icarus a comentar la verificacion del start.

se lo instala descomprimiendo la archivo y ejecutando el archivo setup.py de la siguiente manera:

$sudo python setup install

para desintalar

$sudo python setup.py uninstall

todo el codigo esta bajo gplv2


junio 05, 2011

Reloj wallpaper con svg y nitrogen


la diferencia con el articulo anterior es que el código cambio completamente ya que se puede modificar los valores del svg directamente desde código ahorrando y mejorando completamente la escritura y implementacion para cualquier diseño, el proyecto cuanta con la clase ergus que es la tiene todos los comandos para realizarlo, por el momento esta diseñado para funcionar con nitrogen esto se puede cambiar tranquilamente también lo que es de la transformacion de svg a png si tu setter walllpaper soporta ese formato.

para que se vea la diferencia asi quedo:

dia_numero, dia_letra, meses_numero,mes,anio,hora_24,hora_12,minuto,ampm,hora=valores_reloj()
doc=abrir_archivo(archivo)
doc,a=cambiar_texto(doc,"tspan","hora1",hora)
doc,a=cambiar_texto(doc,"tspan","ampm1",ampm)
doc,a=cambiar_texto(doc,"tspan","mes1",mes)
doc,a=cambiar_texto(doc,"tspan","dia_numero1",dia_numero)
doc,a=cambiar_texto(doc,"tspan","dia_nombre1",dia_letra)
doc,a=cambiar_texto(doc,"tspan","ano_monbre1",anio)
cerrar_archivo(doc,archivo)

Nota: el "tspan" es la etiqueta que contiene el texto y el siguiente parámetro es el id de esta etiqueta. 

Y esto cambia los valores del svg del reloj y después toca realizar estos comandos para aplicarlo a nitrogen ya que este no acepta svg.


pasar_svg_png("protector.svg","/home/badanni/wallpapers/")
poner_fondo_pantalla()

igual que el anterior el programa esta atado a cron para que lo repita cada minuto para actualizar la hora de pantalla. pero por utilizar una clase exterior toca utilizar un script en bash para que lo ejecute cron este quedo así:


#! /usr/bin/bash
cd /home/badanni/wallpapers
python reloj_wallv2.py



se le pone cd a la carpeta donde esta todo ya que el archivo librería esta en este lugar y cron al ejecutar lo hace desde la ubicación home(esto creo que pasa por la configuración de mi cron).

El link para descargar el programa.

Ergus-reloj_wall

junio 04, 2011

Configurando Cron

Primeramente se puede decir que cron es como una agenda para la computadora diciendole cuando hacer algo, para instalar toca poner:

$sudo apt-get install cron

ya instalado toca revisar si existen los archivos "cron.allow" y "cron.deny" el primero dice quien puede usarlo y el segun quien no, cuando instalas estos archivos no existen y solo tiene permiso el root de usarlo.
Para crearlos solo pon lo en /etc/ y ya el contenido de cron.allow debe ser tu nombre de usuario y uno por linea y el de cron.deny igual pero para los usuario que no pueden usarlo.

Ya hecho esto se tipea lo siguiente

$crontab -e

Y nos preguntara por un editor de texto para comenzar a planificar las actividades de la maquina ya hecho esto toca comenzar a escribir, el modo de ejecución se especifica de la siguiente manera:

  • Minutos: (0-59)
  • Horas: (0-23)
  • Días: (1-31)
  • Mes: (1-12)
  • Día de la semana: (0-6), siendo 1=lunes, 2=martes,... 6=sábado y 0=domingo (a veces también 7=domingo)
  • comando

Un ejemplo para esto seria

30 10 * * * /usr/bin/who>> /home//quien

entonces que hara esto todos los dias a las 10:30 almacena el resultado de who en el archivo quien en la direccion puesta, ahora supongamos que lo queremos hacer solo para los lunes

30 10 * * 1 /usr/bin/who>> /home//quien

Y si se necesita que se realize cada cierto intervalo de tiempo.

*/15 * * 1  /usr/bin/who>> /home//quien

Este lo que hace es todos los lunes cada 15 minutos almacena el resultado de who en el archivo quien

Tener en cuenta que esto sirve solo para aplicaciones sin interfaz gráfica, para las que tiene interfaz gráfica toca anidar antes del comando DISPLAY=:0 como se ve en el siguiente ejemplo

*/1 * * * * DISPLAY=:0 python /home/badanni/wallpapers/reloj_wall.py

eso es todo con esto ya pueden comenzar a utilizar cron.
Nota: una buena pagina para mas informacion es en Linuxesmas

Haciendo un reloj de pantalla (descontinuado)

Después del fiasco que tuve con ubuntu 11.04 y su unity que no pude instalar por compatibilidad en la maquina me decidi a levantar de apoco un entorno gráfico a mi gusto apenas acabe eso subo algo, por el momento queria instalar gdesklets funciona bien pero al refrescarse (ejemplo un reloj) se queda en negro entonces a hacer el mio propio y asusnto sanjado despues de tontear un rato con svg para el reloj no pude mismo modificarlo desde python para cambiarle la hora entonces con cada corrida se genera una nueva imagen con la hora actual me queda algo así.


como el script es de una corrida (se ejecuta y finaliza) decidí probar cron para que se encargue de correrlo cada minuto y el resultado es como yo quería(bueno a medias ya que depende de inkspace y nitrogen el uno para realizar imágenes vectorial y el otro para  poner imagenes de fondo de pantalla respectivamente, apenas los pueda remplazar con un código de python doy por sanjado el asunto.

El principal problema del script es que el reloj no se mueve es decir se le puede decir que cambie la imagen de fondo pero no el reloj y se debe fijar la imagen manualmente la primera vez después el escript restaura solo (esto es del nitrogen).

la configuracion del cron usada es:

*/1 * * * * DISPLAY=:0 python /home/badanni/wallpapers/reloj_wall.py

todo el script hace referencia a la direccion /home/badanni/wallpapers/ por problemas de ejecución en cron al ubicar los archivos, como nitrogen necesita de entorno gráfico para funcionar se le debe decir a cron que utilice un display en mi caso 0 para todos a menos que tengas mas de un monitor según lo que entendí sin mas lata el codigo para descargar con la imagen

Actualización:
toca separar la linea6 como linea6a hasta llegar a la etiqueta <g ........
desde esta etiqueta va otra linea como por ejemplo linea6b pero al final se le quita el ">" del final;
linea6_mover=' transform="translate(%f,%f)"' % (x_nueva,y_nueva)
quedando de la siguiente forma:

linea6=linea6a+linea6b+linea6_mover+'>'

Los valores de x_nueva e y_nueva pueden ser positivo o negativos en negativo x llega hasta -160 e y llega a -200 creo es por que la posicion origina del reloj no esta en (0,0) error mio.

script en Python para mostrar reloj en fondo de pantalla(antiguo)

Ir a este post para ver los cambios