Mar
2

ubuntu logo

Tal y como algunos de vosotros ya sabréis, la nueva versión de Ubuntu 11.04 Natty Narwhal realiza un cambio radical en lo que a interfaz de usuario se refiere, y es que pasaremos de utilizar el ya conocido por muchos entorno de escritorio llamado Gnome al no tan conocido Unity. Este sistema de gestión de escritorios ya está implementado en la versión actual 10.10 para netbooks.

Hasta este momento, las versiones alpha de este sistema operativo estaban bastante verdes, ya que, entre otras cosas, no funcionaba correctamente la combinación de teclas Alt+Tab,… pero recientemente se han realizado una serie de mejoras muy importantes, entre las que nos encontramos un buen funcionamiento de dicha combinación de teclas y otras mejoras en la experiencia del usuario a la hora de interactuar con el equipo.

Algunas de las grandes mejoras introducidas en esta versión de Ubuntu son:

Aumento del espacio de trabajo

Ubuntu Unity

Se elimina la barra de tareas inferior para integrarlo todo en el dock lateral, además de en la barra superior, lugar en el que aparecerá tanto el menú de la aplicación como la cabecera de la ventana que tiene el foco (esto último solo en caso de que la aplicación esté maximizada).

Selección de ventana

Además de poder cambiar presionando Alt+Tab, si tenemos la misma aplicación abierta varias veces, esta estará agrupada en el dock, y al hacer click sobre su correspondiente icono se nos mostrarán todas las ventanas en ejecución al más puro estilo OS X, de manera que podremos saber con facilidad cual de estas pantallas es la que deseamos traer al frente.

Posiciones predefinidas de ventana

Ubuntu Unity windows 7 resize

Una de las novedades que más me gustaron de las que vinieron de la mano de Windows 7, si no la que más, es que en función de la posición del escritorio a la que arrastremos la ventana, esta se maximizará o tomará una forma determinada, de modo que nos evita tener que redimensionar manualmente las ventanas si, por ejemplo, deseamos tener dos medias ventanas activas.

Tags: ,
Categoría Linux | Sé el primero en comentar!
Dec
22

Una de las características que viene habilitada por defecto en las instalaciones de Debian Squeeze, es el pitido de consola cuando intentamos hacer algo que no se puede, como por ejemplo: tabular cuando no hay opción de auto rellenado o simplemente hay más de una y no sabe cual elegir; borrar caracteres cuando el prompt está vacío,… Esta característica, en algunos casos viene muy bien, pero en otros no hace más que molestar, por ejemplo en un equipo portátil que va a estar ejecutándose en sitios en los que dicho pitido puede resultar, cuanto menos, irritante.

Una de las soluciones pasa por deshabilitar el altavoz interno desde la bios, lo cual puede no ser bueno en según qué circunstancias, de hecho eso lo elimina para todos los sistemas operativos entre otras cosas.

La solución que proponemos hoy aquí es la encontrada en debian-administration y que toca únicamente archivos de configuración del propio sistema operativo.

Por ejemplo, si queremos deshabilitar el pitido en la bash, deberemos ejecutar el siguiente comando (afecta a todos los programas que utilizan la linea de comandos):

echo ‘set bell-style none’ >> ~/.inputrc

Por desgracia este comando no silencia todos los sonidos: los provenientes del entorno gráfico GNU a pantalla completa siguen produciéndolos.

Para arreglar este pequeño embrollo con los sistemas de ventanas X11 nos basta con ejecutar el siguiente comando, el cual silenciará todos los programas dependientes del mismo:

xset b off

Finalmente si deseamos silenciar todos los pitidos del sistema podemos ejecutar:

setterm -blength 0

Este comando lo que hace es establecer una nueva duración para los pitidos, siendo esta de 0.

Categoría Linux, Manuales | 1 Comentario »
Nov
25

Es posible que, como yo hayas actualizado a Ubuntu 10.10 reciente mente tu sistema operativo, o bien que lo hayas instalado de 0, si a esto le sumamos la tarjeta wifi (ejecutar el comando lspci para ver nuestra tarjeta wifi):

05:00.0 Network controller: RaLink RT3092 Wireless 802.11n 2T/2R PCIe

Es bastante probable que estemos sufriendo una serie de errores al intentar usar la tarjeta, en mi caso los errores observados son los siguientes:

  • No se cargan para nada los módulos y en ningún momento se levanta el interfaz correspondiente, es más no nos deja ni levantarlo desde consola.
  • El interfaz se levanta “correctamente” pero no detecta ninguna red wifi y nos dice, si ejecutamos el comando iwlist wlan0 scan, que el interfaz no soporta el escaneo de redes.
  • Las redes disponibles son detectadas pero al intentar conectar no conecta, es decir, no se nos asigna ninguna IP.

Estos errores es bastante probable que se deban, en su mayoría se deban a que los drivers que se están cargando por defecto en el sistema operativo estén entrando en conflicto, en este caso concreto el problema es que se están cargando dos módulos que se creen capaces de controlar el sistema. Para evitar que se nos de esta colisión de módulos, vamos a bloquear una serie de los mismos, para ello nos dirigimos a una terminal y, con permisos de super-usuario, abrimos el archivo de blacklist:

~$ sudo gedit /etc/modprobe.d/blacklist.conf

Tras esto, añadimos al final del fichero escribimos las siguientes lineas:

#wifi
blacklist rt2800usb
blacklist rt2800lib
blacklist rt2x00usb
blacklist rt2x00lib
blacklist rt2800pci
blacklist rt2x00pci
Tras esto cargamos el módulo que deseamos utilizar, en nuestro caso el rt2860sta mediante el comando:

~$ sudo modprobe rt2860sta

Finalmente reiniciamos el equipo y ya debería funcionar nuestra tarjeta wifi.
Fuente: UbuntuForums
Tags:
Categoría Linux, Manuales | Sé el primero en comentar!
Nov
16

El hardware de mi equipo nuevo es tan moderno, que las distribuciones de Debian, Ubuntu,… no son capaces de reconocer entre otras cosas una serie de interfaces, entre las que en mi caso se encontraban la interfaz wifi y la de ethernet. En este caso concreto, mi tarjeta wifi es una Broadcom dBCM4313 802.11b/g LP-PHYt. Vamos a proceder a configurarla correctamente en nuestro sistema:

Antes de nada, vamos a asegurarnos de estar hablando de la misma tarjeta, para ello podemos ejecutar el comando lshw y buscar una sección parecida a la siguiente:

*-network
description: Wireless interface
product: BCM4313 802.11b/g LP-PHY
vendor: Broadcom Corporation
physical id: 0
bus info: pci@0000:03:00.0
logical name: wlan0
version: 01
serial: e8:39:df:ac:62:b4
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=wl0 driverversion=5.60.48.36 ip=192.168.1.35 latency=0 multicast=yes wireless=IEEE 802.11
resources: irq:17 memory:94000000-94003fff

O bien acudir al comando lspci y buscar:

03:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g LP-PHY (rev 01)

Para realizar la instalación de este driver será necesario que estemos conectados a Internet, con conectarnos por ethernet ya habremos cumplido este requisito. Si tienes dudas acerca del procedimiento a seguir escribe un comentario. Si tienes un Toshiba Satellite Pro L650 es posible que el artículo de configuración de la tarjeta ethernet te sea de ayuda.

Ahora que ya contamos con una conexión a Internet lo primero que hemos de hacer es añadir a nuestra lista de repositorios (/etc/apt/sources.list lista que podemos editar ejecutando el siguiente comando en consola: ~$ sudo nano /etc/apt/sources.list) la siguiente entrada (en el caso de Debian, si usas otra distribución busca tu equivalente y, de nuevo, si tienes dudas déjanos un comentario):

deb http://ftp.us.debian.org/debian squeeze main contrib non-free

Tras esto guardamos el fichero y ejecutamos en consola:

~$ sudo aptitude update

para renovar la lista de repositorios de nuestro equipo y poder encontrar los paquetes asociados a ese repositorio.

A continuación vamos a instalar los programas necesarios para manejar nuestra tarjeta wifi ejecutando el siguiente comando en consola:

~$ aptitude install module-assistant wireless-tools

Con esto no sólo estamos instalando el módulo que nos permitirá manejar nuestra tarjeta, sino que además, en caso de que no tengamos instalados programas como iwconfig nos los instalará.

Una vez tenemos en el equipo los datos necesario, procedamos a compilar e instalar los módulos de broadcom ejecutando el “module-assistant” mediante el siguiente comando:

~$ m-a a-i broadcom-sta

En principio ya debería funcionar, pero el módulo recién instalado puede entrar en conflicto con otros módulos que se precargan o están ya cargados en el núcleo del sistema, por lo que ponemos el módulo brcm80211 en la blacklist mediante el comando:

~$ echo blacklist brcm80211 >> /etc/modprobe.d/broadcom-sta-common.conf

Continuando con el proceso reconfigurams el ramdisk para los módulos definidos en  /etc/modprobe.d/broadcom-sta-common.conf ejecutando el siguiente comando en consola:

~$ update-initramfs -u -k $(uname -r)

Descargamos del núcleo los módulos conflictivos:

~$ modprobe -r b44 b43 b43legacy brcm80211 ssb

Por último cargamos el módulo correspondiente con nuestra tarjeta mediante el comando:

~$ modprobe wl

Si ahora ejecutamos el comando iwconfig, veremos que ahora aparece un interfaz nuevo, pero este se llamará ethX (X tomará un valor u otro en función del número de interfaces con ese nombre que tengamos instalados con anterioridad), para cambiar el nombre hemos de modificar el siguiente archivo: /etc/udev/rules.d/70_persistent-net.rules (el número 70 no siempre es el mismo, así que mira cual es el nombre del tuyo):

~$ sudo nano /etc/udev/rules.d/70_persistent-net.rules

El contenido del fichero será el siguiente o parecido

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0×1969:0×2060 (atl1c)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”xx:xx:xx:xx:xx:xx”, ATTR{dev_id}==”0×0″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″

# PCI device 0x14e4:0×4727 (wl)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”xx:xx:xx:xx:xx:xx”, ATTR{dev_id}==”0×0″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth1

Cambiamos la cadena que está en rojo por wlan0 y listo, ya le hemos cambiado el nombre a nuestra tarjeta de red.

Fuente: Carlos Gómez

Tags: , , ,
Categoría Linux, Manuales | 6 Comentarios »
Nov
12

Hace poco cambie de portátil y como ya se sabe, eso conlleva una serie de tareas de puesta a punto, ya que la configuración que viene por defecto suele dejar bastante que desear; en el caso de Windows 7 hay que quitar la morralla, y si queremos instalar un Linux, si el hardware es nuevo, nos toca pelearnos con los drivers. Esta vez, obviamente no iba a ser menos.

El Hardware de mi equipo nuevo es tan moderno, que las distribuciones de Debian, Ubuntu,… no son capaces de reconocer entre otras cosas una serie de interfaces, entre las que en mi caso se encontraban la interfaz wifi y la de ethernet. En este caso concreto, mi tarjeta de red ethernet es  una AR8152 v1.1 Fast Ethernet. Vamos a proceder a configurarla correctamente en nuestro sistema:

Antes de nada, vamos a asegurarnos de estar hablando de la misma tarjeta, para ello podemos ejecutar el comando lshw y buscar una sección parecida a la siguiente:

*-network
description: Ethernet interface
product: AR8152 v1.1 Fast Ethernet
vendor: Atheros Communications
physical id: 0
bus info: pci@0000:02:00.0
logical name: eth0
version: c1
serial: 00:26:6c:80:73:01
capacity: 100MB/s
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vpd bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=atl1c driverversion=1.0.1.0-NAPI firmware=N/A latency=0 link=no multicast=yes port=twisted pair
resources: irq:35 memory:95000000-9503ffff ioport:3000(size=128)

O bien acudir al comando lspci y buscar:

02:00.0 Ethernet controller: Atheros Communications AR8152 v1.1 Fast Ethernet (rev c1)

Ahora ya estamos listos para continuar, dado que si no tenemos tarjeta de red, es bastante probable que carezcamos de Internet, desde otro equipo vamos a bajarnos desde otro equipo los fuentes del driver correspondiente, para ello nos dirigimos a http://linuxwireless.org/download/compat-wireless-2.6 y descargamos el primero de los ficheros, el nombre debería ser parecido al siguiente: compat-wireless-2.6.tar.bz2. Metemos el fichero comprimido en un pendrive y volvemos al equipo a configurar.

Lo primero que hemos de hacer es instalar las herramientas necesarias para realizar el compilado, para ello abrimos una consola y escribimos:

~$ sudo aptitude install build-essential

~$ sudo aptitude install linux-headers-$(uname -r)

Para realizar la instalación de las utilidades de construcción anteriormente mencionadas no es necesaria una conexión a Internet, bastará con introducir en la unidad lectora de CD-ROM el disco con la distribución instalada y en el fichero /etc/apt/sources.list descomentar la linea referente al CD, tras esto hacemos un aptitude update y ejecuctamos los comandos de instalación. Si tenéis alguna duda del procedimiento a seguir preguntad en los comentarios.

Una vez terminado el proceso introducimos el disco externo en el cual tenemos el fichero con los fuentes del driver, montamos el disco si no se monta automáticamente (si no sabes cómo hacerlo puedes dirigirte a este artículo para ver como hacerlo), nos dirigimos a la carpeta en la que se ha montado el dispositivo (en mi caso /media/usbdisk) y descomprimimos el archivo:

~$ tar -xjvf compat-wireless-2.6.tar.bz2

Ahora procedemos a instalar el driver, para ello ejecutamos en consola:

cd compat-wireless-2.6
scripts/driver-select atl1c
make
sudo make install

Tras esto bastará con reiniciar el equipo y en caso de que no reconozca la interfaz de manera automática vemos si el interfaz está levantada, para ello escribimos en consola el comando.

~$ ifconfig eth0 up

En el caso de que como respuesta obtengamos un mensaje que nos indica que el dispositivo no existe, vamos a cargar el módulo en el núcleo manualmente ejecutando:

~$ sudo modprobe atl1c

~$ ifconfig eth0 up

Si aun así no nos funciona, podemos dirigirnos al fichero /etc/udev/rules.d/70-persistent-net.rules y veremos algo como lo siguiente (el fichero variará de contenido según los interfaces de nuestro equipo, pero a nosotros nos interesa el nombre que está marcado en color rojo:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0×1969:0×2060 (atl1c)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”xx:xx:xx:xx:xx:xx”, ATTR{dev_id}==”0×0″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0

# PCI device 0x14e4:0×4727 (wl)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”xx:xx:xx:xx:xx:xx”, ATTR{dev_id}==”0×0″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”wlan0″

Repetimos el proceso para levantar el interfaz y listo, ya debería funcionar.

Fuente: Carlos Gómez

Tags: , , , ,
Categoría Linux, Manuales | 24 Comentarios »
Nov
8

Hasta ahora siempre que hemos querido averiguar algún aspecto del hardware de nuestros equipos, en este blog hemos hecho mención del comando lspci con sus múltiples parámetros opcionales. La faena viene cuando deseamos conocer más en profundidad el Hardware de nuestro equipo.

Por ejemplo, si yo ejecuto en mi máquina Linux (en este caso una Debian/Ubuntu) el comando lspci, obtengo una salida como la siguiente:

root@alex-laptop:/home/alejandro# lspci
00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 02)
00:01.0 PCI bridge: Intel Corporation Core Processor PCI Express x16 Root Port (rev 02)
00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)
00:1a.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 05)
00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 05)
00:1c.1 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 (rev 05)
00:1c.4 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 5 (rev 05)
00:1d.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a5)
00:1f.0 ISA bridge: Intel Corporation Mobile 5 Series Chipset LPC Interface Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller (rev 05)
00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 05)
01:00.0 VGA compatible controller: ATI Technologies Inc M92 [Mobility Radeon HD 4500 Series]
01:00.1 Audio device: ATI Technologies Inc RV710/730
02:00.0 Ethernet controller: Atheros Communications AR8152 v1.1 Fast Ethernet (rev c1)
03:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g LP-PHY (rev 01)
3f:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers (rev 02)
3f:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 02)
3f:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 02)
3f:02.1 Host bridge: Intel Corporation Core Processor QPI Physical 0 (rev 02)
3f:02.2 Host bridge: Intel Corporation Core Processor Reserved (rev 02)
3f:02.3 Host bridge: Intel Corporation Core Processor Reserved (rev 02)

Esta información es útil sin duda, pero como ya hemos dicho, en ocasiones se nos queda un poco escueta (puede aumentarse con los parámetros opcionales), pero para solucionar este problema existe un programa que nos dará más detalladamente información del hardware de nuestro equipo:

root@alex-laptop:/home/alejandro# lshw

Para instalarlo nos bastará con ejecutar en consola:

root@alex-laptop:/home/alejandro# aptitude install lshw

Una vez instalado, para ejecutarlo y obtener un output con la información del equipo nos bastará con ejecutar el programa (lshw); la salida será algo parecido a lo siguiente: Continue reading “Ver el hardware del equipo: lshw” »

Categoría Linux, Programas | 3 Comentarios »
Oct
11

Recientemente, y con el cambio de ordenador, me vi obligado a volver a poner todo a punto y en consecuencia a pelearme con los drivers de aquellos dispositivos de Hardware que o bien el sistema no reconocía, o bien el sistema no trataba adecuadamente. De todos estos, el que más guerra me ha dado ha sido el wifi:

05:00.0 Network controller: RaLink RT3092 Wireless 802.11n 2T/2R PCIe

Y es que en algunas versiones del sistema operativo Ubuntu no me reconocía la tarjeta, mientras que en otros me permitía listar todas las redes al alcance pero era incapaz de conectar con el punto de acceso porque se identificaba siempre con IPv6 usando la dirección 00:00:00:00:00:00.

Tras un rato buscando información en internet sin demasiado éxito me aventuré a leerme los logs y demás hasta que decidí instalar la última versión del hardware, respuesta que, por otra parte, era la única que podía solucionar mi problema.

pues bien, lo primero que tenemos que hacer es descargarnos la última versión de los drivers de la tarjeta wifi, para ello entramos en http://www.ralinktech.com/support.php?s=2 y nos descargamos el fichero llamado RT3090PCIe (para descargar correctamente el fichero, habremos de dar un nombre y un correo electrónico real o no porque no nos piden confirmación).

Una vez descargado el archivo, bastará con descomprimirlo

~$ tar xvzf DPO_RT3090_LinuxSTA_V2.3.1.7_20100618_WiFiBTCombo_RFKill.tgz

e instalarlo

~$ sudo make

~$ sudo make install

una vez hecho esto, reiniciamos el equipo y veremos que el wifi funciona correctamente ahora.

Tags: ,
Categoría Linux, Manuales | Sé el primero en comentar!
Aug
11

A día de hoy aun quedan unas cuantas semanaspara que salga a la luz el nuevo Ubuntu 10.10 Maverick Meerkat de forma oficial, pero no debe olvidársenos que tenemos a nuestra disposición las versiones alpha y beta de la misma para poder así, testear y reportar errores,… en definitiva poner nuestro granito de arena a tan gran proyecto. Pues bien, si tras pensarlo detenidamente (y obviamente, podemos permitirnos algunos fallos en el sistema) decidimos instalarnos la nueva versión, tenemos dos opciones:

  1. Instalación nueva
  2. Actualización

Dado que la nueva instalación no tiene mucho misterio, de hecho es bastante parecida a la de Debian Lenny que comentamos aquí hace unos meses, vamos a proceder a contar mediante capturas los pasos a seguir para realizar el upgrade (actualización), proceso que ya describimos anteriormente y más detenidamente en Actualizar a Ubuntu 10.04 Lucid Lynx. El primer paso a dar es escribir en consola:

~$ sudo -s

~$ update-manager -d

Con estos comandos nos conectaremos como superusuario, y ejecutaremos el gestor de actualizaciones, el cual nos indicará que está disponible para su descarga la versión 10.10, la darle al botón que cita Actualizar, nos saldrán listadas las notas de la nueva versión, las aceptamos y seguimos.

Acto seguido, el programa de actualización se preparará para la instalación y configurará las nuevas fuentes de software, tras lo cual nos informará de los paquetes que ya no tienen soporte y de los que se van a descargar, aceptamos en los dos casos.

Tras esto dará comienzo un proceso bastante largo de descarga de nuevos paquetes. El proceso de descarga puede tardar más o menos tiempo dependiendo del momento en el que hagas la actualización.

Tras la descarga e instalación de paquetes que convertirán nuestro Ubuntu en la versión 10.10. Durante el proceso de instalación es bastante probable que veamos cambios en la interfaz, es normal, a pesar de que estos no serán tan grandes que los que se pudieron observar en el proceso de actualización a Ubuntu 10.04 Lucid Lynx.

Siguiendo con la lista de acontecimientos que nos avisan en el cuadro de diálogo de las imágenes anteriores, ahora toca realizar una limpieza de los archivos del ordenador, pero como buen chico, Ubuntu nos pedirá que confirmemos el paso mediante un cuadro de diálogo similar al siguiente:

Y ya sólo nos queda reiniciar el equipo

¡Listo!, ya tenemos instalado y listo para aguantar nuestras trastadas el nuevo Ubuntu 10.10, a disfrutarlo toca.

Categoría Linux | Sé el primero en comentar!
Jun
20

Con este artículo termina la serie de artículos en las que describimos los principios básicos que hay que tener en cuenta para realizar un chat y en los que también se describe como hacer una pequeña aproximación a uno de estos programas que a muchos de nosotros nos acompañan en nuestro día a día.

En el artículo de hoy vamos a tratar el único tema que nos falta, el cual es el programa cliente que nos servirá a los usuarios para comunicarnos con el servidor y así, poder comunicarnos con el resto de usuarios que se encuentren conectados en un momento dado.

Si bien el cliente se basta de un sólo ejecutable, hoy vamos a tratar dicho ejecutable y otro que nos permita, mediante la redirección de descriptores de ficheros, añadirle una interfaz gráfica sencilla.

cli.c

Nos encontramos ante uno de los ficheros con la lógica esencial del cliente del chat, vamos a analizarlo paso a paso:


#include <stdio.h>
#include <stdlib.h>
// librería para manejo de strings
#include <string.h>
// librería para el uso de los sockets y las correspondientes constantes
#include <sys/socket.h>
// librería para el uso de la constante IPPROTO_TCP, in_addr, ...
#include <netinet/in.h>
// librería que nos permite hacer uso de la variable errno
#include <errno.h>
// librería de base de datos de red
#include <netdb.h>
// librería para el uso de primitivas unix
#include <unistd.h>
// librería para obtener acceso a variables como pid
#include <sys/types.h>
// librería para el manejo de señales
#include <signal.h>
// librería para mostrar la traza del programa
#include "trace.h"
// librería para gestionar los paquetes enviados y recibidos
#include "sms.h"
// librería con las flags que utilizaremos
#include "flags.h"
// incuimos la librería de tipos de datos
#include "type.h"
// incuimos la librería de herramientas para los echo
#include "tools.h"
// incluimos las librerías que nos permitirán hacer uso de SSL
#include "ssl.h"

#define DIM 1024 // definimos el tamaño de los array de textos

#define     READ    STDIN_FILENO
#define     WRITE    STDOUT_FILENO

Incluimos los archivos de cabecera o librerías necesarias para la ejecución del chat y realizamos las definiciones de tamaños, y ya puestos, definimos los descriptores de ficheros de entrada y salida con el nombre de las constantes genéricas en lugar de utilizar los números 0 para lectura y 1 para escritura.

Continue reading “Crea tu propio chat – Cliente” »

Categoría C/C++, Java, Linux, Producción propia, Programación | Sé el primero en comentar!
Jun
19

Hasta ahora hemos estado hablando de funcionalidades genéricas del chat, requisitos, …pues bien hoy vamos a analizar todos los ficheros de los que se compone el servidor y no han sido comentados con anterioridad; al igual que en el artículo anterior, vamos a comentar el cometido de cada una de las funciones de manera genérica, y únicamente nos adentraremos en el contenido de estas en la función de manejo de los sockets y en las que tengan alguna curiosidad que comentar.

Database.c

Éste es un archivo de código fuente que sólo será incluido en el programa del servidor (en realidad también va a ser incluido en el programa que nos ayudará a crear la base de datos desde cero, pero la importancia de ese ejecutable es mínima y la comentaremos más adelante.

En este caso hemos decidido hacer uso del sistema de bases de dados SQLite dado que es una base de datos ligera portable y con características más que suficientes para utilizarla en nuestra pequeña aplicación.

sqlite3* db_open(char*);

El cometido de esta función es simple, simplemente abrirá la base de datos situada en el fichero que se le ha de pasar como argumento.

int db_prepare(sqlite3**);

Esta función no se utilizará en el servidor, pero será la que utilizará la aplicación que creará la base de datos en caso de que esta no exista, y su única función es la de crear las tablas necesarias en la base de datos así como el usuario administrador del chat.

int db_exec(sqlite3**, char*, int);

Esta función se encargará de ejecutar una sentencia SQL y de actuar en consecuencia dependiendo del flag que se le pase como último argumento.

int db_userExists(char*, sqlite3**);

Esta función comprueba si un usuario existe en la base de datos.

int db_checkUser(char*, char*, sqlite3**);

Esta función comprueba si un usuario asociado a una contraseña existe en la base de datos.

int db_addUser(char*, char*, int, sqlite3**);

Crea un nuevo usuario.

int db_deleteUser(char*, sqlite3**);

Elimina un usuario de la base de datos.

int db_listUser(int, sqlite3**);

Lista los usuarios en la base de datos

void db_close(sqlite3**);

Cierra la base de datos y todos los descriptores asociados a ella.

int db_addLog(sms, sqlite3**);

Añade a la tabla de logs un mensaje.

int db_getLog(int, sqlite3**);

Lista el contenido del log de la base de datos

int db_getLogPar(int, sqlite3**, char*);

Tiene un comportamiento similar al de la función anterior, sólo que esta admite parámetros para personalizar la búsqueda, como por ejemplo buscar entre dos fechas dadas.

static int callback(void*, int, char**, char**);

Función que será llamada para cada una de las filas obtenidas de una sentencia SELECT. Continue reading “Crea tu propio chat – Servidor” »

Categoría C/C++, Java, Linux, Producción propia, Programación | Sé el primero en comentar!