Buscar este blog

julio 08, 2011

Icarus 0.1.6a-RC1

Ya esta lista la versión 0.1.6a-RC1 de Icarus teniendo algunos cambios en su gui como el cambio del menú del clic derecho del tray a:

  • Añadir fondo de pantalla (icarus_fondo v0.1-alfa siempre en modo scale)
  • Seleccionar demonio (integra a "activar/desactivar demonio")
  • Tonar captura de pantalla (icarus_pantallazo v0.2)
  • Acerca de
  • Salir
En este punto no se va a tener mucho cambios en la interfaz gráfica, ni ningún demonio; la versión final sale el 15 julio de este anio. Se va a comenzar a trabajar en las librerías para poder dar el salto a la versión 0.1.7a 

Como instalar: 
Después de descargar se descomprime y se dirige a la carpeta desde un terminal y se tipea las siguientes ordenes.
sudo python setup.py install
bash ./icarus_data.sh

Como desintalar:
Para desinstalar se debe dirigir a la carpeta descomprimida y tipear el siguiente comando
sudo python setup.py uninstall

julio 07, 2011

Desacivar la respuesta del ping de nuestra maquina

pagina del post original

Este es un pequeño truco que tenía anotado en la libreta y comparto con todos. Es muy sencillo y con cierta utilidad, por ejemplo si queremos pasar desapercibidos en una red. Muchas veces el primer paso para un ataque es buscar la presencia de host vulnerables en la red usando ping y un rango de direcciones. Este truco no te hace mas segura la conexión, pero con un poco de suerte puede que pasen de largo y no intenten otros métodos.

Para desactivar la respuesta a un Ping:
echo 1 >> /proc/sys/net/ipv4/icmp_echo_ignore_all


Para volver a activarlo:
echo 0 >> /proc/sys/net/ipv4/icmp_echo_ignore_all

Si queremos hacerlo permanente debemos editar /etc/sysctl.conf y añadir:
net.ipv4.conf.icmp_echo_ignore_all = 1




Fuente: http://www.ubuntucommand.com/

julio 05, 2011

Zeya - streaming de musica

Zeya
"Zeya is a media player that lets you bring your music to any computer with a web browser.
The client runs in any browser that supports the HTML 5 draft standard technologies— no Flash needed. No Silverlight, no applets, no plugins, no external players.
Zeya is free software. You may use it under the terms of the GNU Affero GPL, v.3 or (at your option) any later version." Tomado de la pagina del proyecto


Dependencias:
  • Python 2.5+ (2.6+ recommended)
  • oggenc
  • mpg123 (optional— for decoding MP3 files)
  • flac (optional— for decoding FLAC files)

Para instalarlo se tipea en un terminal lo siguiente:

sudo apt-get  install zeya


ya instalado se ejecuta de la siguiente manera:

zeya --path=/home/badanni/Music/ --port=8888 --bitrate=128


Aca una imagen ya funcionando: 

julio 04, 2011

-censurado-

Me cargue el openbox y las X en mi maquina de nuevo voy a volver a instalar todo desde cero respaldando todos los programas y libros, trabajo largo


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