GUÍA PRÁCTICA DE PROGRAMACIÓN CON C Y GTK+ EN ENTORNOS ENTORNOS GNU/LINUX
Por: Ricardo Ar!ro G!"#$% Torr&'
((()*!a%ao,)co#
INTRODUCCIÓN El inclinarnos hacia un lenguaje de programación para hacer una tarea determinada es una tarea algo complicada, con tantas opciones que hay. Sin embargo, al trabajar en Linux veo muy poderoso el utilizar como lenguaje el C. Con el tenemos un amplio repertorio de posibilidades. El problema es cuando queremos realizar programas con interaz gr!ica, hacerlo con C es un proceso bastante di"cil, pero podemos optar por #$%& '#()* tool+it como nuestro tool+it gr!ico para realizar esta tarea. La documentación para trabajar con #$%& y C, en mi opinión es muy escasa y m!s para los hispanohablantes. Es por eso que he decidido crear este documento, intentando apoyar un poco a la comunidad con lo que espero pueda ser una interesante gu"a de reerencia. - lo largo de este libro, trataremos de cubrir con ejemplos cada cap"tulo. eco miendo que tengas en mente un proyecto en espec"ico, en el cual puedas ir aplicando todos los conocimientos que vayamos aprendiendo a lo largo del libro, para que al inal tengas un buen programa con su interaz gr!ica que puedas compartir con la comunidad Linuxera / . 0o quise empezar a desarrollar este libro, por que quiero darle una interaz gr!ica a varios programas que tengo en mente, uno es un generador de diccionarios para an!lisis de seguridad, el cual compartir1 con ustedes y mostrar1 el procedimiento mediante el cual le gener1 su interaz gr!ica.
SO-RE EL AUTOR 2o hay mucho que decir sobre mi, solo soy un programador mexicano que 3ltimamente tiene mucho tiempo libre. Es por eso que quiero invertir este tiempo en algo productivo y si puedo ayudar a alguien m!s con este libro considerar1 que la misión ue todo un 1xito. 4*or qu15 0o he aprendido mucho de los art"culos que he encontrado en (nternet y se de lo importante que es el que siempre se est1n generando nuevas uentes de inormación. -parte que como ya coment1, veo muy escasa la documentación en mi idioma y para las personas que no hablan ingl1s esto puede ser un gran obst!culo. 6uiero aprovechar mi tiempo ayudando, por que a mi me sirve como programador para reairmar y mejorar mis conocimientos y habilidades. En mis tiempos libres me gusta mucho programar en C, sin embargo llevo algo de tiempo que no he podido realizar un programa por el simple hecho de 7amor al arte8. )e he dedicado m!s al desarrollo 9eb, p!ginas en *:* y -;-<. ;unto con unos amigos orm1 una empresa de desarrollo de sot9are, nos ubicamos en León, #uanajuato, )1xico, pueden visitar nuestra p!gina en/ 999.quanaxot.com 6uisiera estar al pendiente de los comentarios que pudieran salir de las personas que vayan leyendo este libro, si encuentras alg3n error o simplemente quieres platicar sobre alg3n tema de programación te agradecer"a me dejaras un mensaje en mi blog/ http/==999.quanaxot.com=blog , abrir1 un *ost donde vaya d!ndole seguimiento al libro y a los comentarios de los usuarios.
ANTES DE EMPE.AR Co%oci#i&%o' r&0io' – Es importante tener una base de programación en C – Estar acostumbrado a trabajar en Linux a trav1s de la terminal
R&*!&ri#i&%o' Este libro est! orientado a la comunidad linuxera. 2ecesitamos tener #2>=Linux instalado, en mi caso yo estoy trabajando con >buntu ?.@A '%armic %oala. 2ecesitaremos tener instalado/
– >n compilador/ >tilizaremos #CC a lo largo del libro – >n editor de textos/ *uedes utilizar el que gustes, como el B() ... yo utilizar1 uno que me parece muy bueno que se llama lueish – >n emulador de terminal/ Siempre est! incluido en las distros #2>=Linux la terminal / – Las librer"as #$%& – 0 la aplicación p+gDconig
CAPITULO 1 Sobre GTK+ y X Window System Instalación de componentes
-ntes de empezar, es importante que sepamos que es #$%&. :ago nota que en este libro no hablar1 sobre conceptos b!sicos de programación en C, este libro est! orientado a gente que ya tenga un ondo de conocimiento del lenguaje, trataremos de ir directamente hacia el uso del tool+it gr!ico.
ACERCA DE GTK+ #$%& o $he #()* $ool+it es un conjunto de bibliotecas multiplataorma para desarrollar interaces gr!icas de usuario '#>(, principalmente para los entornos gr!icos #2)E,
=Linux. ;unto a 6t es una de las bibliotecas m!s populares para < Gindo9 System. #$%& se ha diseHado para permitir programar con lenguajes como C, C&&, CI, ;ava, uby, *erl, *:* o *ython. Licenciado bajo los t1rminos de L#*L, #$%& es sot9are libre y es parte del proyecto #2>. Entornos que utilizan #$%& J #2)E est! basado en #$%&, lo que signiica que los programas de #2)E usan #$%& J <ce est! basado en #$%& J L( de (SC S J #*E *almtop Environment J )aemo '2o+iaMs (nternetDtablet rame9or+ J -ccess Linux *latorm 'sucesor de la plataorma *alm S *K- J ne Laptop *er Child usa #$%& y *y#$% Los entornos de escritorio no son necesarios para ejecutar los programas #$%&. Si las bibliotecas que requiere el programa est!n instaladas, un programa #$%& puede ser ejecutado por encima de otros entornos basadas en <@@ como %KE o cualquier otro entorno, lo que incluye )ac S <, si <@@.app est! instalado. #$%& tambi1n puede ejecutarse en )icrosot Gindo9s, es utilizado por algunas aplicaciones populares multiplataorma como *idgin y el #()*. 9xGidgets, un tool+it gr!ico multiplataorma usa #$%& en sistemas tipo >nix.N@O -lgunos de los ports m!s inusuales incluyen directb y ncurses. -plicaciones -lgunas aplicaciones que usan #$%& como 9idget incluyen/ J -biGord D *rocesador de textos. J Cine*aint 'ex Film#imp D Editor de gr!icos animados en :K. J E+iga 'ex #nome)eeting D Sot9are teleónico Bo(* :.PQP=S(*. J Evolution D Cliente de correo electrónico. J Fireox D 2avegador 9eb. J #()* D Editor de gr!icos.
J #numeric D *rograma de hoja de c!lculo. J Chromium D 2avegador Geb basado en Geb%it y desarrollado en gran medida por #oogle. J #-)*S D Sot9are de genealog"a. J (n+scape D Editor de gr!icos vectoriales SB#. J %PK D *rograma de modelado PK libre. J )arionnet D >n simulador de red interactivo. J )idori D 2avegador Geb portable. J 2ero Linux D >n programa para la edición de discos. J *idgin D Cliente de mensajer"a instant!nea. J B)9are *layer D )aquina virtual. J Gireshar+ D Capturador y analizador de paquetes de red inal!mbrica. )!s inormación en/ http/==es.9i+ipedia.org=9i+i=#$%RQ
ACERCA DEL X 2INDO2 SYSTEM < Gindo9 System 'en espaHol sistema de ventanas < es un sot9are que ue desarrollado a mediados de los aHos @?A en el )($ para dotar de una interaz gr!ica a los sistemas >nix. Este protocolo permite la interacción gr!ica en red entre un usuario y una o m!s computadoras haciendo transparente la red para 1ste. #eneralmente se reiere a la versión @@ de este protocolo, <@@, el que est! en uso actualmente. < es el encargado de mostrar la inormación gr!ica de orma totalmente independiente del sistema operativo. < ue diseHado primariamente para implementar clientes ligeros, donde mucha gente usaba simult!neamente la capacidad de procesamiento de un mismo computador trabajando en tiempo compartido. Cada persona usaba un terminal en red que ten"a capacidades limitadas para dibujar la pantalla y aceptar la entrada del usuario. Kebido a la ubicuidad del soporte para el sot9are < en >nix, es usado en los computadores personales incluso cuando no hay necesidad del tiempo compartido. El sistema de ventanas < distribuye el procesamiento de aplicaciones especiicando enlaces clienteD servidor. El servidor provee servicios para acceder a la pantalla, teclado y ratón, mientras que los clientes son las aplicaciones que utilizan estos recursos para interacción con el usuario. Ke este modo mientras el servidor se ejecuta de manera local, las aplicaciones pueden ejecutarse remotamente desde otras m!quinas, proporcionando as" el concepto de transparencia de red. Kebido a este esquema clienteDservidor, se puede decir que < se comporta como una terminal gr!ica virtual. )!s inormación en/ http/==es.9i+ipedia.org=9i+i=
INSTALANDO GTK+ ueno, mostrar1 en este cap"tulo el m1todo para instalar las aplicaciones y librer"as que necesitamos. Estoy trabajando en >buntu ?.@A pero la orma de instalación creo que puede ser aplicable de igual manera a otras distribuciones. 2ecesitamos instalar #$%& y sus dependencias, la ventaja de trabajar con distribuciones derivadas de Kebian es que podemos utilizar el pac+age manager y acilitarnos las cosas. 2ecesitaremos tambi1n los paquetes de desarrollo, los podemos reconocer por que tienen terminación Ddev, o Ddevel para distribuciones como Fedora Core '*). *ara instalar #$%& necesitaremos #lib, *ango y algunos paquetes #$%&. *odemos descargarlos de la p!gina oicial de gt+/ http/==999.gt+.org=do9nloadDlinux.html Las versiones pueden cambiar con el paso del tiempo, pero en mi caso estos son los archivos que descargu1/ gt+&DQ.QQ.A.tar.gz *odemos instalar las dependencias de una manera r!pida aprovechando que estamos en >buntu/ $ sudo aptitude install gnome-core-devel build-essential
Ke preerencia crearemos una nueva carpeta donde guardaremos el archivo de gt+ que descargamos. Los pasos a seguir son ejecutar los siguientes comandos desde la terminal, vamos a descomprimir el archivo que bajamos/ U tar Dxvz gt+&DQ.QQ.A.tar.gz Se nos crear! una nueva carpeta/ gt+&DQ.QQ.A U cd gt+&DQ.QQ.A= En esta carpeta tenemos un shell script llamado co%,i3!r& , el cual debemos correr para que se vayan creando los )a+eiles necesarios para instalar el programa. El script co%,i3!r& puede recibir varios par!metros, pero solo le indicaremos que instale gt+ en la ruta =opt=gt+ y coniaremos en las opciones por deault, ejecutamos entonces/ U .=conigure DDpreixV=opt=gt+ -l hacerlo a mi me marca el siguiente error/ equested Mat+ WV @.Q?.QM but version o -t+ is @.Q.A equested Mgd+DpixbuDQ.A WV [email protected] but version o #d+*ixbu is Q.@.P Eso quiere decir que en el primer paso si se instaló at+ y gd+Dpixbu pero la versión que tenemos es inerior a la que necesita gt+ para uncionar. Entonces tenemos que bajar una versión de at+ m!s reciente, la podemos encontrar buscando en
google, yo la encontr1 en/ http/==999.ice9al+ers.com=Linux=Sot9are=X@YPPA=-$%.html La descargamos y hacemos los pasos/ U tar Dxvz [email protected]?.Y.tar.gz U cd [email protected]?.Y U .=conigure U ma+e U sudo ma+e install +, ahora buscamos para gd+Dpixbu una versión mas reciente, la podemos encontrar en/ http/==tp.gnome.org=pub=#2)E=sources=gd+Dpixbu=Q.Q@= Kescomprimimos/ U tar Dxvz gd+Dpixbu[email protected] U cd gd+Dpixbu[email protected]= == *aso opcional, gd+Dpixbu requiere de la libreria libti, si no la tenemos hacemos/ U sudo aptitude install libtiDdev Continuando con la instalación/ U .=conigure U ma+e U sudo ma+e install +, entonces ya solucionamos el problema de las dependencias altantes, nos altar"a nadamas ir otra vez a la carpeta donde descomprimimos el gt+ y volvemos al paso en que nos quedamos/ U .=conigure DDpreixV=opt=gt+ + esta vez no marcó problemas asi que podemos proceder/ U ma+e U sudo ma+e install
>na vez teniendo lista la instalación podemos proceder a lo divertido, programarZ
*odemos encontrar m!s inormación del proceso de instalación en/ http/==library.gnome.org=devel=gt+=stable=gt+Dbuilding.html Si tienes algun problema al instalar comentalo en el oro/ http/==999.quanaxot.com=blog si no puedo ayudarte yo a lo mejor algun otro visitante si podr!.
CAPITULO 4 Nuestra primera aplicación Conceptos básicos sobre GTK+
ueno, ya tenemos preparado el terreno, 0a est! instalado #$%&, tenemos nuestro compilador y un coniable editor de textos. Solo nos alta empezar a programar. En este cap"tulo iremos cubriendo los aspectos b!sicos que giran en torno a la programación de interaces gr!icas en C con #$%&. Empezaremos creando una ventana sencilla, la cual estar! a la espera del evento donde la cerremos. El código es el siguiente/ /************************************/ /* MI PRIMER PROGRAMA CON GTK+ */ /************************************/ #include int !in "int !gc$ ch! *!g%&'( ) Gtkidget *ind,gtkinit "!gc$ !g%(ind, 0 gtkind,ne "GTKIN1OTOP2E3E2(gtkind,4ettitle "GTKIN1O "ind,($ 5Mi 6ie 6,g!!5(gtkidget4h, "ind,(gtk!in "(etun 78
Empezar1 a hablar a detalle sobre cada l"nea respectiva al código, pero primero veremos como compilar este código 'sirve que veriicamos que realmente hayamos instalado bien #$%&. #uardaremos el archivo como prueba.c, abriremos una terminal y ejecutaremos en el directorio donde tengamos a prueba.c/ U gcc DGall Dg prueba.c Do prueba [p+gDconig DDclags DDlibs gt+&DQ.A[ Se nos generar! el ejecutable con el nombre de prueba, lo corremos en la terminal a trav1s de/ U .=prueba