Una vez detectado el intruso en nuestra red ¿ahora que hacemos?. Lo lógico es cambiar la contraseña y tomar mas medidas de seguridad en cuanto a nuestra red wifi. Pero para darle un aviso a nuestro instruso podemos hacer lo siguiente:
Usar ettercap para hacer primero un dns_spoof, y así teniendo un servidor web en nuestra maquina, mostrarle algún mensaje a nuestro visitante.
1º.- Lanzar el servidor web con algun aviso en la pagina index.
2º.- Configurar el archivo etter.dns que se encuentra en:
/usr/share/ettercap/etter.dns o bien en
/usr/local/share/ettercap/etter.dns sino #find / -name etter.dns
Para esto comentamos las lineas (#) y dejamos una sola entrada, por ejemplo
* A DIR_IP
en DIR_IP ponemos nuestra dirección ip donde corremos el servidor dentro de la red local. Para ver nuestra ip podemos usar el comando ifconfig,
3º.- Lanzamos ettercap con el plugin de dns_spof de la siguiente forma:
# ettercap -T -q -i wlan0 -P dns_spoof -M arp:remote /IP_Intruso/ /IP_Router/
De esta forma hacemos el dns_spoof y nos mostrará que páginas estará visitando, pero en realidad será dirigido a nuestro servidor web.
-i wlan0 suponiendo que lo hagamos desde un adaptador wifi
miércoles, 31 de diciembre de 2014
jueves, 18 de diciembre de 2014
Detectar intrusos en red wifi
A partir de algunos scripts que he visto, he compuesto el siguiente para perl y para python.
Hay que tener en cuenta que en la linea numero 5 en perl, hay que mirar si la salida del comando ifconfig tiene las cadenas "Direc. inet:", si son otras habría que modificar la linea para sacar nuestra ip. Y también configurar las mac de nuestros dispositivos o bien anular esas lineas si se sabe algo de perl :). Hay que mirar que configuración tenemos de red, en mi caso 192.168.0.0 y sustituir 192.168.0.1 por la nuestra. Y para afinar mas, poner el path completo del archivo hosts-ip.txt
Para el de python (que es mas simple) mirar "Direc. inet" y nada más.
Y el de python
Hay que tener en cuenta que en la linea numero 5 en perl, hay que mirar si la salida del comando ifconfig tiene las cadenas "Direc. inet:", si son otras habría que modificar la linea para sacar nuestra ip. Y también configurar las mac de nuestros dispositivos o bien anular esas lineas si se sabe algo de perl :). Hay que mirar que configuración tenemos de red, en mi caso 192.168.0.0 y sustituir 192.168.0.1 por la nuestra. Y para afinar mas, poner el path completo del archivo hosts-ip.txt
Para el de python (que es mas simple) mirar "Direc. inet" y nada más.
#!/usr/bin/perl
$archivos="hosts-ip.txt";
$scaneo= `nmap -sP 192.168.0.1/24 > $archivos`;
$ip= `/sbin/ifconfig wlan0 |grep 'Direc. inet:'|awk '{print \$2}'|cut -c 6-`;
chomp($ip);
open INFILE,$archivos;
my $linea;
my $conmutador=0;
while ( $linea = ) {
chomp($linea);
$linea =~ m/^Nmap scan report for\s(.+?)$/;
if($1 =~ m=(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})=){
$comp = "$1.$2.$3.$4";
if($comp ne "192.168.0.1"){
if($comp eq $ip){$texto.="Mi D IP = $ip\n"}
else{
$mac=`arp $comp`;
$mac =~ m/(..:..:..:..:..:..)/;
if($1 eq "xx:xx:xx:xx:xx:xx"){$valor="Mi Móvil"}
elsif($1 eq "xx:xx:xx:xx:xx:xx"){$valor="Mi Tablet"}
else{$valor=$1;}
$texto.="Intruso = $comp $valor\n";
$conmutador = 1;
}
}
}
}
close INFILE;
print $texto
$salido =`notify-send -t 0 -i wicd-gtk "Escaneo de la Red" "$texto"`;
Y el de python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import commands
import re
import subprocess
ip = commands.getoutput("/sbin/ifconfig wlan0 |grep 'Direc. inet:'|awk '{print $2}'|cut -c 6-")
scaneo=commands.getoutput("nmap -sP 192.168.0.1/24 > hosts-ippy.txt")
infile = open('hosts-ippy.txt', 'r')
texto = ''
for linea in infile:
linea.rstrip()
m = re.match(r"(.+)\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", linea)
if m:
if m.group(2) != '192.168.0.1':
if ip == m.group(2):
texto+='Mi D IP = '+ip+'\n'
else:
texto+='Intruso = '+m.group(2)+'\n'
infile.close()
print texto
exitCode = subprocess.call(["notify-send",'-t','0','Escaneo de la Red',texto])
Monitorizar lectura, modificación, etc de archivos
Buscaba una aplicación similar al filemon en windows para ver que archivos son "tocados" por una aplicación o el sistema, y por suerte, lo he encontrado.
El proyecto se encuentra en esta página pyinotify
Se descomprime el archivo, se entra en el directorio y se ejecuta:
$ sudo python setup.py install
Mirar la documentación para ver el uso, aunque yo he probado con este script y me va muy bien:
Se ejecuta en terminal y queda como demonio informando de la actividad en los archivos. Al definir mask = pyinotify.ALL_EVENTS se verán todos lo eventos sucedidos en los archivos dentro del directorio /home/user.
Para mas información mirar el tutorial
El proyecto se encuentra en esta página pyinotify
Se descomprime el archivo, se entra en el directorio y se ejecuta:
$ sudo python setup.py install
Mirar la documentación para ver el uso, aunque yo he probado con este script y me va muy bien:
# -*- coding: utf-8 -*-
# Archivo example1.py
import pyinotify
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event):
print "Creacion del archivo :", event.pathname
wm = pyinotify.WatchManager()
mask = pyinotify.ALL_EVENTS
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch('/home/user', mask, rec=True)
notifier.loop()
Se ejecuta en terminal y queda como demonio informando de la actividad en los archivos. Al definir mask = pyinotify.ALL_EVENTS se verán todos lo eventos sucedidos en los archivos dentro del directorio /home/user.
Para mas información mirar el tutorial
domingo, 12 de octubre de 2014
Gnome clásico en Ubuntu 14.04 LTS
Instalar lo siguiente:
sudo apt-get install gnome-panel
A continuación al reiniciar elegir el gnome-clasic como escritorio.
sudo apt-get install gnome-panel
A continuación al reiniciar elegir el gnome-clasic como escritorio.
jueves, 9 de octubre de 2014
Instalar Chrome en Ubuntu 12.04 LTS
Entramos a la consola y escribimos:
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
Luego volvemos a escribir en la consola:
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
Ahora actualizamos los repositorios. Escribimos en la consola:
sudo apt-get update
Y por último, descargamos e instalamos el Google Chrome en su versión estable. Escribimos en la consola:
sudo apt-get install google-chrome-stable
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
Luego volvemos a escribir en la consola:
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
Ahora actualizamos los repositorios. Escribimos en la consola:
sudo apt-get update
Y por último, descargamos e instalamos el Google Chrome en su versión estable. Escribimos en la consola:
sudo apt-get install google-chrome-stable
viernes, 14 de febrero de 2014
Uso de screen en o bajo Linux (y algo más)
Estos son mis apuntes para ojearlos de vez en cuando, y si le sirve a alguien mas de ayuda, pues tanto mejor.
Utilizare el programa gdb para depurar programas escritos en C, para ello usare un sistema tipo Unix, en este caso un FreeBSD instalado en http://m-net.arbornet.org, para ello usare una de sus shells gratuitas, en bash concretamente. Para usar esta shell, la configuro en el archivo .bashrc con estas pocas lineas
export FIGNORE=".o" # "Extensiones" a ignorar por el ESC-ESC
# Por seguridad, elegimos por defecto que al copiar, se nos pregunte si
# queremos sobreescribir el fichero destino. Lo mismo hacemos con mv y rm
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
#Los comentarios van hechos con el caracter #
Como editor de textos o de codigo usare el Vim, el cual esta en la mayoria de sistemas Unix/Linux aqui van algunas lineas para mi configuracon en el archivo .vimrc.
set number
syntax on
set dictionary=/home/eb7bmo/diccionario
set nocompatible
set ruler
" Para redactar facilmente
iab _miweb http://cwmorse.eu5.org/
iab _miweb2 http://m-net.arbornet.org/~eb7bmo
iab _salu Muchas gracias y saludos.
iab _mail eb7bmo@hotmail.com
iab _lineac /*=============================*/
"Aqui los comentarios van con el caracter "(doble comilla)
Usare tambien el programa screen, para hacer la depuracion y la edicion de codigo mas facil.
Todo lo expuesto aqui, tambien lo trabajo desde mi sistema Linux/Ubuntu 10.10 (maverick), pero teniendo la shell gratuita no nos hace falta tener un linux instalado.
Para empezar nos conectaremos con un telnet m-net.arbornet.org y cuando nos pida login introducimos "newuser", sin las comillas claro esta. A partir de ahi, seguir los pasos hasta obetener la cuenta shell.
Ya tenemos todo lo que nos hace falta, un sistema, una shell, el depurador gdb, el editor vim, el programa screen y como no el compilador gcc. Al grano, editamos un codigo en lenguaje C para probar todo esto, y seria por ejemplo este:
#include <stdio.h>
main()
{
int Numero1;
int Numero2;
int resultado;
Numero1 = 20;
Numero2 = 100;
resultado = Numero2 + Numero2;
printf("Su Multiplicacion es %d", resultado);
printf("\n\n");
}
Una vez que estamos en el prompt de la shell escribimos "screen", lo que hace que entremos en este programa, nos sale una pantalla de presentacion y pulsamos enter, ya estamos en el, observamos que es una shell corriente, pero no es asi, para salir podemos usar el comando "exit". Una vez que estamos dentro, vamos a crear una divisin de pantalla, que es para lo que yo lo utilizo, pulsamos CONTROL + a, que nos pone en modo comando y despues pulsamos S mayuscula, premio, ya tenemos las dos pantallas para trabajar. Pero si observamos bien, en la pantalla de abajo no tenemos nada, tranquilos, vamos a por ella. El cursor esta en la de arriba, pulsamos de nuevo CONTROL+a, y despues la tela de tabulacion, si esa, la de las dos flechitas. Ahora estamos enla ventana de abajo, pero solo esta el cursor parpadeando enla parte de arriba pues no hay nada en ella. Vamos a crear otra shell, para ello pasamos al modo comando, si eso, CONTROL+a, y a continuacion pulsamos la letra c, de crear :). Ya tenemos las dos shell abiertas y listas para trabajar en ellas. Para cambiar de una a otro solo tienes que pasar a modo comando y pulsar la tecla de tabulacion
Vamos a crear el codigo en C de arriba, para ello abrimos el vim con el nombre del archivo, por ejemplo
"vim prueba.c", a mi me gusta hacerlo en la shell superior. Ahora copiamos el codigo en este archivo y una vez hecho, lo compilamos desde el vim, ya sabeis, ESC y
:!gcc % -o prueba -g
el caracter % indica el nombre del archivo en uso, prueba.c, el -o seguido del nombre del ejecutable que deseamos crear, y por ultimo y mas importante el argumento -g que hace que el ejecutable tenga lo necesario para poderlo depugar con el potentisimo gdb.
Probamos el ejecutable, con ESC y
:!./prueba
Claro que esto sera si no se tenido fallos al escribir el codigo, pues en otro caso nos dara un aviso del error con linea en la que se ha producido en el tiempo de compilacion. Si son programas cortos, se mira la linea y se accede a ella, pero si es un programa bien largo, la cosa sera mejor automatizarla, para ello usamos el comando :make desde el vim, pero antes creamos un simple makefile para este programa, y seria algo asi..
prueba: prueba.c
gcc -o program prueba.c -g
Ahora, ya podemos compilarlo tambien desde vim pero con el comando:
:make
Si el codigo tiene errores nos lleva hasta la linea automaticamentre, cosa que se agradece...
Una vez que se ha compilado sin errores nos vamos a la de abajo, CONTROL+a y tabulacion, y ejecutamos el gdb con el parametro "prueba", una cosas asi
gdb prueba
Ya podemos depurarlo si tiene errores en tiempo de ejecucion, y tambien editar y volver a compilar y volverlo a correr, eso si, si la edicion que hagamos en el codigo hace que las lineas aumenten o disminuyan, habra que tener cuidado con los breakpoints que hayamos puesto, pues ahora quedan en otras lineas de programa.
Y eso es todo por el momento, en otra ocasion vere si hago alguna chuletilla sobre como usar los comandos del gdb con el programa anterior y otros.
Muchas gracias y saludos.
Utilizare el programa gdb para depurar programas escritos en C, para ello usare un sistema tipo Unix, en este caso un FreeBSD instalado en http://m-net.arbornet.org, para ello usare una de sus shells gratuitas, en bash concretamente. Para usar esta shell, la configuro en el archivo .bashrc con estas pocas lineas
export FIGNORE=".o" # "Extensiones" a ignorar por el ESC-ESC
# Por seguridad, elegimos por defecto que al copiar, se nos pregunte si
# queremos sobreescribir el fichero destino. Lo mismo hacemos con mv y rm
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
#Los comentarios van hechos con el caracter #
Como editor de textos o de codigo usare el Vim, el cual esta en la mayoria de sistemas Unix/Linux aqui van algunas lineas para mi configuracon en el archivo .vimrc.
set number
syntax on
set dictionary=/home/eb7bmo/diccionario
set nocompatible
set ruler
" Para redactar facilmente
iab _miweb http://cwmorse.eu5.org/
iab _miweb2 http://m-net.arbornet.org/~eb7bmo
iab _salu Muchas gracias y saludos.
iab _mail eb7bmo@hotmail.com
iab _lineac /*=============================*/
"Aqui los comentarios van con el caracter "(doble comilla)
Usare tambien el programa screen, para hacer la depuracion y la edicion de codigo mas facil.
Todo lo expuesto aqui, tambien lo trabajo desde mi sistema Linux/Ubuntu 10.10 (maverick), pero teniendo la shell gratuita no nos hace falta tener un linux instalado.
Para empezar nos conectaremos con un telnet m-net.arbornet.org y cuando nos pida login introducimos "newuser", sin las comillas claro esta. A partir de ahi, seguir los pasos hasta obetener la cuenta shell.
Ya tenemos todo lo que nos hace falta, un sistema, una shell, el depurador gdb, el editor vim, el programa screen y como no el compilador gcc. Al grano, editamos un codigo en lenguaje C para probar todo esto, y seria por ejemplo este:
#include <stdio.h>
main()
{
int Numero1;
int Numero2;
int resultado;
Numero1 = 20;
Numero2 = 100;
resultado = Numero2 + Numero2;
printf("Su Multiplicacion es %d", resultado);
printf("\n\n");
}
Una vez que estamos en el prompt de la shell escribimos "screen", lo que hace que entremos en este programa, nos sale una pantalla de presentacion y pulsamos enter, ya estamos en el, observamos que es una shell corriente, pero no es asi, para salir podemos usar el comando "exit". Una vez que estamos dentro, vamos a crear una divisin de pantalla, que es para lo que yo lo utilizo, pulsamos CONTROL + a, que nos pone en modo comando y despues pulsamos S mayuscula, premio, ya tenemos las dos pantallas para trabajar. Pero si observamos bien, en la pantalla de abajo no tenemos nada, tranquilos, vamos a por ella. El cursor esta en la de arriba, pulsamos de nuevo CONTROL+a, y despues la tela de tabulacion, si esa, la de las dos flechitas. Ahora estamos enla ventana de abajo, pero solo esta el cursor parpadeando enla parte de arriba pues no hay nada en ella. Vamos a crear otra shell, para ello pasamos al modo comando, si eso, CONTROL+a, y a continuacion pulsamos la letra c, de crear :). Ya tenemos las dos shell abiertas y listas para trabajar en ellas. Para cambiar de una a otro solo tienes que pasar a modo comando y pulsar la tecla de tabulacion
Vamos a crear el codigo en C de arriba, para ello abrimos el vim con el nombre del archivo, por ejemplo
"vim prueba.c", a mi me gusta hacerlo en la shell superior. Ahora copiamos el codigo en este archivo y una vez hecho, lo compilamos desde el vim, ya sabeis, ESC y
:!gcc % -o prueba -g
el caracter % indica el nombre del archivo en uso, prueba.c, el -o seguido del nombre del ejecutable que deseamos crear, y por ultimo y mas importante el argumento -g que hace que el ejecutable tenga lo necesario para poderlo depugar con el potentisimo gdb.
Probamos el ejecutable, con ESC y
:!./prueba
Claro que esto sera si no se tenido fallos al escribir el codigo, pues en otro caso nos dara un aviso del error con linea en la que se ha producido en el tiempo de compilacion. Si son programas cortos, se mira la linea y se accede a ella, pero si es un programa bien largo, la cosa sera mejor automatizarla, para ello usamos el comando :make desde el vim, pero antes creamos un simple makefile para este programa, y seria algo asi..
prueba: prueba.c
gcc -o program prueba.c -g
Ahora, ya podemos compilarlo tambien desde vim pero con el comando:
:make
Si el codigo tiene errores nos lleva hasta la linea automaticamentre, cosa que se agradece...
Una vez que se ha compilado sin errores nos vamos a la de abajo, CONTROL+a y tabulacion, y ejecutamos el gdb con el parametro "prueba", una cosas asi
gdb prueba
Ya podemos depurarlo si tiene errores en tiempo de ejecucion, y tambien editar y volver a compilar y volverlo a correr, eso si, si la edicion que hagamos en el codigo hace que las lineas aumenten o disminuyan, habra que tener cuidado con los breakpoints que hayamos puesto, pues ahora quedan en otras lineas de programa.
Y eso es todo por el momento, en otra ocasion vere si hago alguna chuletilla sobre como usar los comandos del gdb con el programa anterior y otros.
Muchas gracias y saludos.
jueves, 13 de febrero de 2014
django en Ubuntu 12.04 (y con mod_python)
Para empezar instalo django desde la terminal
:~$ sudo apt-get install python-django
ejeucto django-admin.py y no esta en el path del sistema, asi que creo un enlace simbólico a /usr/bin
:~$ sudo ln -s /usr/share/pyshared/django/bin/django-admin.py /usr/bin/django-admin.py
para poder ser ejecutado por cualquier usuario modifico el archivo asi:
:~$ sudo chmod +x /usr/share/pyshared/django/bin/django-admin.py
compruebo que ahora si se puede ejecutar
:~$ django-admin.py
Usage: django-admin.py subcommand [options] [args]
Options:
-v VERBOSITY, --verbosity=VERBOSITY
bla bla bla............
ahora desde el directorio elegido para crear proyectos y aplicaciones ejecuto el comando
:~$ django-admin.py startproject misitio
retocar los archivos y ejecutar el servidor de desarrollo asi...
:~$ python manage.py runserver
desde el directorio creado del proyecto claro, que tendrá el archivo manage.py
y a partir de ahí a consultar tutos y/o manuales :)
Configurar apache para correr aplicaciones django
Primero instalar mod_python
:~$ sudo apt-get install libapache2-mod-python
Yo ya tenia instalado apache2 y corriendo con php y mysql instalados, asi que ahora solo configurar apache para correr django
en el archivo /etc/hosts pongo estas lineas
127.0.0.1 localhost
127.0.1.1 eb7bmo
en eb7bmo es donde quiero correr con django, asi que ahora toco la configuración de apache en /etc/apache2/sites-available/default, edito este archivo y añado lo siguiente:
<VirtualHost *:80>
DocumentRoot /home/sierra21/django/misitio
ServerName eb7bmo
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE misitio.settings
PythonDebug On
PythonPath "['/home/sierra21/django','/home/sierra21/django/misitio']+sys.path"
</Location>
</VirtualHost>
hay un VirtualHost configurado antes, a eso solo le añado la clave
ServerName localhost #donde corresponde
reiniciamos apache
:~$ sudo /etc/init.d/apache2 restart
y a correr php o python, listo ;))
Salu2
:~$ sudo apt-get install python-django
ejeucto django-admin.py y no esta en el path del sistema, asi que creo un enlace simbólico a /usr/bin
:~$ sudo ln -s /usr/share/pyshared/django/bin/django-admin.py /usr/bin/django-admin.py
para poder ser ejecutado por cualquier usuario modifico el archivo asi:
:~$ sudo chmod +x /usr/share/pyshared/django/bin/django-admin.py
compruebo que ahora si se puede ejecutar
:~$ django-admin.py
Usage: django-admin.py subcommand [options] [args]
Options:
-v VERBOSITY, --verbosity=VERBOSITY
bla bla bla............
ahora desde el directorio elegido para crear proyectos y aplicaciones ejecuto el comando
:~$ django-admin.py startproject misitio
retocar los archivos y ejecutar el servidor de desarrollo asi...
:~$ python manage.py runserver
desde el directorio creado del proyecto claro, que tendrá el archivo manage.py
y a partir de ahí a consultar tutos y/o manuales :)
Configurar apache para correr aplicaciones django
Primero instalar mod_python
:~$ sudo apt-get install libapache2-mod-python
Yo ya tenia instalado apache2 y corriendo con php y mysql instalados, asi que ahora solo configurar apache para correr django
en el archivo /etc/hosts pongo estas lineas
127.0.0.1 localhost
127.0.1.1 eb7bmo
en eb7bmo es donde quiero correr con django, asi que ahora toco la configuración de apache en /etc/apache2/sites-available/default, edito este archivo y añado lo siguiente:
<VirtualHost *:80>
DocumentRoot /home/sierra21/django/misitio
ServerName eb7bmo
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE misitio.settings
PythonDebug On
PythonPath "['/home/sierra21/django','/home/sierra21/django/misitio']+sys.path"
</Location>
</VirtualHost>
hay un VirtualHost configurado antes, a eso solo le añado la clave
ServerName localhost #donde corresponde
reiniciamos apache
:~$ sudo /etc/init.d/apache2 restart
y a correr php o python, listo ;))
Salu2
viernes, 31 de enero de 2014
Convertir imagenes a otro formato
Quiero usar archivos .py como módulos donde lo que tenga almacenado sean imágenes en formato xpm para añadirlas a futuras aplicaciones GtkBuilder con python. Este formato de imagen se puede abrir con editores de textos para ver realmente como está formado.
Así que me he puesto a buscar un script en bash para hacer la conversión mas fácil, ya que tengo la herramienta "convert" instalada que es:
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
He visto varios scripts, y el que me ha convencido es el ofrecido en esta página:
TuxyLinux
El codigo es el siguiente:
Lo copio a un archivo que llamo imgcon, le doy permisos de ejecucion
chomod +x imgconv
y luego lo meto en /usr/bin para poder ejecutarlo desde cualquier directorio.
Hecho esto, solo hay que ejecutarlo pasando el formato origen y el destino, así yo creo todos los png a xpm de esta forma
imgcon pcg xpm
y el archivo me crea un subdirectorio desde donde lo ejecute con el nombre de la extensión de los nuevos archivos creados, mas fácil imposible :).
Así que me he puesto a buscar un script en bash para hacer la conversión mas fácil, ya que tengo la herramienta "convert" instalada que es:
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
He visto varios scripts, y el que me ha convencido es el ofrecido en esta página:
TuxyLinux
El codigo es el siguiente:
#!/bin/bash
if [[ -z $@ ]] ; then
echo -e "Convierte todas las imágenes de la carpeta.
Uso:
sh $0 extension-original extension-nueva
Ejemplo:
sh $0 tga png"
exit 1
fi
ORIGINAL=$1 #extension original
FORMATO=$2 #nueva extension
mkdir ${FORMATO}
for A in `ls *.${ORIGINAL}` ; do
convert ${A} ${A}.${FORMATO}
done
for A in `ls *.${ORIGINAL}.${FORMATO}` ; do
NAME=`echo ${A} |cut -d '.' -f1`
mv ${A} ${FORMATO}/${NAME}.${FORMATO}
done
Lo copio a un archivo que llamo imgcon, le doy permisos de ejecucion
chomod +x imgconv
y luego lo meto en /usr/bin para poder ejecutarlo desde cualquier directorio.
Hecho esto, solo hay que ejecutarlo pasando el formato origen y el destino, así yo creo todos los png a xpm de esta forma
imgcon pcg xpm
y el archivo me crea un subdirectorio desde donde lo ejecute con el nombre de la extensión de los nuevos archivos creados, mas fácil imposible :).
jueves, 30 de enero de 2014
Uso de GTK3 con python y Glade
Estaba haciendo unas pruebas de edición en el glade, cuando me ha dado el siguiente error:
Eso ha sucedido una vez que he añadido el control gtknotebook, y pensando que podría ser problema de versión del gtk he decidido probar GTK3, para ello lo único que he tenido que cambiar en el código de prueba es lo siguiente:
import gtk
sustituirlo por
from gi.repository import Gtk
y mas abajo en el codigo, sustituir el encabezado de los metodos por Gtk en vez de gtk, ejemplo:
gtk.main_quit()
builder = gtk.Builder()
gtk.main()
por estos
Gtk.main_quit()
builder = Gtk.Builder()
Gtk.main()
Como se ve, la diferencia es mínima, lo he corrido y Ohhhhhhh!
como ven, el problema no era por la versión utilizada, así que al seguir mirando y como no, gracias a goolge, la solución era mas fácil de lo que pensaba, solo hay que añadir algo a alguna de las paginas del notebook, con eso ya no da ese feo Gtk:ERROR
Salu2 Sierra21
** Gtk:ERROR:/build/buildd/gtk+2.0-2.24.10/gtk/gtknotebook.c:1167:gtk_notebook_buildable_add_child: assertion failed: (page != NULL) Abortado (`core' generado)
Eso ha sucedido una vez que he añadido el control gtknotebook, y pensando que podría ser problema de versión del gtk he decidido probar GTK3, para ello lo único que he tenido que cambiar en el código de prueba es lo siguiente:
import gtk
sustituirlo por
from gi.repository import Gtk
y mas abajo en el codigo, sustituir el encabezado de los metodos por Gtk en vez de gtk, ejemplo:
gtk.main_quit()
builder = gtk.Builder()
gtk.main()
por estos
Gtk.main_quit()
builder = Gtk.Builder()
Gtk.main()
Como se ve, la diferencia es mínima, lo he corrido y Ohhhhhhh!
** Gtk:ERROR:/build/buildd/gtk+3.0-3.4.2/./gtk/gtknotebook.c:1234:gtk_notebook_buildable_add_child: assertion failed: (page != NULL) Abortado (`core' generado)
como ven, el problema no era por la versión utilizada, así que al seguir mirando y como no, gracias a goolge, la solución era mas fácil de lo que pensaba, solo hay que añadir algo a alguna de las paginas del notebook, con eso ya no da ese feo Gtk:ERROR
Salu2 Sierra21
GtkBuilder + Glade sin libglade
Hola, empiezo aquí a dejar mis apuntes, recetas o como quiera llamarse, y empiezo por describir como hacer un ejemplo muy simple de programa en python, usando GTK mas Glade, vamos a ello.
La versión que uso de Glade es la 3.8.0, aunque tengo también instalada la 3.12.1 que es para GTK3 pero da algunos problemas, como las cajas creadas con GtkVBox o GtkHBox, pues crea GtkBox, también pasa lo mismo con los controles GtkHButtonBox y GtkVButtonBox, crando GtkButtonBox. Dicho esto vamos al lío.
Uso el editor geany, que ha sido una grata sorpresa por lo liviano y rápido que es, además de tener para mi lo necesario. Eclipse esta bien, pero desde que tengo genay, casi no lo uso.
Para empezar, creo el código fuente del programa, algo básico como esto:
A continuación creo la parte gráfica con glade. A tener en cuenta que hay que configurar la salida del formato para GtkBuilder y no para libglade. Y también que cuando creemos la ventana principal, ir a las propiedades comunes para hacer visible la ventana, ya que sin esto el programa se ejecuta pero no mostraría la ventana.
Creo la ventana principal, en sus propiedades, en señales busco la opcion destroy y la asocio con el método destroy, y en comunes, la hago visible. A continuación creo un caja vertical de dos porciones, una para cada botón. Los creo y les pongo nombre en la propiedad etiqueta, busco la señal clicked y la asocio con el botón llamado Salir en su señal destroy, al otro lo asocio su señal clicked con hola, para mostrar el Hola!!! por consola.
Así de fácil, crear los métodos o funciones para cada evento o acción realizada por el usuario y conectarlas por su nombre en glade en la sección señales de los controles usados.
En cuanto al uso de Glade 3.12.1, lo intercambio con 3.8.0 , pues no puedo crear cajas en el, o bien si se crean después hay que ir a editar el archivo en cuestión y añadirles la V o la H que corresponda.
Salu2 Sierra21
La versión que uso de Glade es la 3.8.0, aunque tengo también instalada la 3.12.1 que es para GTK3 pero da algunos problemas, como las cajas creadas con GtkVBox o GtkHBox, pues crea GtkBox, también pasa lo mismo con los controles GtkHButtonBox y GtkVButtonBox, crando GtkButtonBox. Dicho esto vamos al lío.
Uso el editor geany, que ha sido una grata sorpresa por lo liviano y rápido que es, además de tener para mi lo necesario. Eclipse esta bien, pero desde que tengo genay, casi no lo uso.
Para empezar, creo el código fuente del programa, algo básico como esto:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import gtk
class gui:
#
# METODOS DE RETROLLAMADA
#------------------------------------
def hola(self, widget):
print "Hola!!!"
def destroy(self, widget):
gtk.main_quit()
def __init__(self):
#
# CDIGO DE CONSTRUCCION DE GUI
#-----------------------------------------------
filename = "foo.glade"
builder = gtk.Builder()
builder.add_from_file(filename)
builder.connect_signals(self)
#
# En espea de eventos y acciones usuario
#
def main(self):
gtk.main()
if __name__ == "__main__":
gui_instance = gui() # crea un objeto gu
gui_instance.main() # llama al mtodo principal
A continuación creo la parte gráfica con glade. A tener en cuenta que hay que configurar la salida del formato para GtkBuilder y no para libglade. Y también que cuando creemos la ventana principal, ir a las propiedades comunes para hacer visible la ventana, ya que sin esto el programa se ejecuta pero no mostraría la ventana.
Creo la ventana principal, en sus propiedades, en señales busco la opcion destroy y la asocio con el método destroy, y en comunes, la hago visible. A continuación creo un caja vertical de dos porciones, una para cada botón. Los creo y les pongo nombre en la propiedad etiqueta, busco la señal clicked y la asocio con el botón llamado Salir en su señal destroy, al otro lo asocio su señal clicked con hola, para mostrar el Hola!!! por consola.
Así de fácil, crear los métodos o funciones para cada evento o acción realizada por el usuario y conectarlas por su nombre en glade en la sección señales de los controles usados.
En cuanto al uso de Glade 3.12.1, lo intercambio con 3.8.0 , pues no puedo crear cajas en el, o bien si se crean después hay que ir a editar el archivo en cuestión y añadirles la V o la H que corresponda.
Salu2 Sierra21
Suscribirse a:
Comentarios (Atom)