lunes, 5 de marzo de 2012

X Window System

Escrito esta:
Lucas 11:34 La lámpara de tu cuerpo es tu ojo; cuando tu ojo está sano, también todo tu cuerpo está lleno de luz; pero cuando está malo, también tu cuerpo está lleno de oscuridad.
Tomado de : Wikipedia

X Window System (en español sistema de ventanas X) es un software que fue desarrollado a mediados de los años 1980 en el MIT para dotar de una interfaz gráfica a los sistemas Unix. Este protocolo permite la interacción gráfica en red entre un usuario y una o más computadoras haciendo transparente la red para éste. Generalmente se refiere a la versión 11 de este protocolo, X11, el que está en uso actualmente. X es el encargado de mostrar la información gráfica de forma totalmente independiente del sistema operativo.

X fue diseñado 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. Debido a la ubicuidad del soporte para el software X en Unix, es usado en los computadores personales incluso cuando no hay necesidad del tiempo compartido.

El sistema de ventanas X distribuye el procesamiento de aplicaciones especificando enlaces cliente-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. De 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.
Debido a este esquema cliente-servidor, se puede decir que X se comporta como un terminal gráfico virtual.

El hecho que exista un estándar definido para X permite que se desarrollen servidores X para distintos sistemas operativos y plataformas, lo que hace que el código sea muy portable. Por ejemplo. permite tener clientes X ejecutándose en un potente servidor UNIX mientras los resultados son visualizados en una PC de escritorio con cualquier otro sistema operativo funcionando.

La comunicación entre el cliente X y el servidor se realiza por medio de un protocolo conocido como Xprotocol, que consiste en una serie de bytes interpretados como comandos básicos para generar ventanas, posicionarlas, o controlar eventos. Los clientes X acceden al Xprotocol mediante el uso de una biblioteca llamada Xlib, que evita al programador de clientes X tener que lidiar con el código binario del Xprotocol. Sin embargo, los aspectos de decoración de ventana y manejos de ventanas no están definidos en esta biblioteca.

X no es un gestor de ventanas, necesita de uno para controlar el manejo de ventanas. Esto trae la ventaja de que permite al usuario instalar uno o más administradores de ventanas de su preferencia. También trae la ventaja de que hace de X estrictamente un sistema gráfico, de tal modo que un cliente X podría estar enviando un gráfico a una pantalla, a una impresora o a cualquier otro hardware sin darse cuenta, flexibilizando la salida gráfica.
Por otro lado, la desventaja que trae el hecho de no tener un único entorno gráfico es que los programadores de clientes X que desean hacer uso de los recursos de los entornos gráficos (botones, barras de deslizamientos, etc) deben elegir un entorno gráfico específico para programar y contar que el usuario tenga por los menos las bibliotecas de dicho entorno gráfico instalado. Las bibliotecas de los entornos gráficos se conocen como "Toolkits", el estándar X provee sólo de un conjunto de herramientas básicas llamadas Xintrisics que permiten a los programadores de los entornos gráficos armar sus Toolkits sobre éstas.

Interfaces de usuario

Interfaz gráfica de usuario de GNOME.
Entorno de escritorio KDE 4.
Interfaz gráfica de usuario de Xfce.

X es primariamente una definición de primitivas de protocolo y gráficas, y deliberadamente no contiene especificaciones de diseño de interfaz de usuario, como estilos de botón, menú, barra de título para las ventanas. En vez de eso, un software de aplicación (tal como los manejadores de ventana, Widget toolkits de GUI y ambientes de escritorio, o las interfaces gráficas de usuario específicas de una aplicación) definen y proporcionan tales detalles. Como resultado, no hay interfaz X típica y varios ambientes de escritorio han sido populares entre los usuarios.

Un manejador de ventana controla la colocación y la apariencia de las ventanas de aplicación. Esto puede resultar en interfaces semejantes a las de Microsoft Windows o Macintosh (los ejemplos incluyen Metacity en GNOME, KWin en KDE, Xfwm en Xfce, o Compiz) o tener controles radicalmente diferentes (tales como tiling window manager, como wmii o Ratpoison). Los manejadores de ventana abarcan en sofisticación y complejidad desde los más simples (ej., twm, el manejador de ventana básico suministrado con X, o evilwm, un manejador de ventana extremadamente liviano) hasta los ambientes de escritorio más completos tales como Enlightenment.

Muchos usuarios usan X con un ambiente de escritorio, que, independientemente del manejador de ventana, incluyen varias aplicaciones usando una interfaz de usuario consistente. GNOME, KDE y Xfce son los ambientes de escritorio más populares. El ambiente estándar de Unix es Common Desktop Environment (CDE). La iniciativa freedesktop.org se dirige a la interoperabilidad entre el escritorio y los componentes necesarios para un escritorio X competitivo.

Puesto que el X es responsable de la interacción entre el teclado y el ratón con el escritorio gráfico, ciertos atajos de teclado han llegado a estar asociados con X. Control-Alt-Backspace típicamente termina la sesión actualmente corriendo en X, mientras que el Control-Alt conjuntamente con una tecla de función cambia a la consola virtual asociada. Sin embargo, esto es un detalle dejado al diseño de una implementación de servidor X y no es universal; por ejemplo, las implementaciones de servidor X para Windows y Macintosh típicamente no proporcionan estos atajos de teclado.

domingo, 19 de febrero de 2012

Escrito esta:
Job 41:24 Su corazón es duro como piedra, duro como piedra de molino.
Ezequiel 11:19 Yo les daré un solo corazón y pondré un espíritu nuevo dentro de ellos. Y quitaré de su carne el corazón de piedra y les daré un corazón de carne,
 
Tomado de:bootlog


Linux.com publicó un set de videos que explican cómo preparar tu disco para instalar Linux, en caso de que ya tengas Windows ya instalado en tu tarro. O sea, si tienes una gran partición NTFS que ocupa tu disco, los videos te muestran cómo achicarla para hacerle espacio al pingüino. La verdad, los screencasts son bastante simples (no explican mucho los por qué de cada paso), pero al menos pueden orientarte si estás un perdido.
En Resumen Resumido™, lo que explican los videos es:
  • Bajar y grabar el disco Live de Gparted. (Creo que esto no en necesario, por ejemplo, si vas a instalar Ubuntu, ya que el instalador viene con Gparted).
  • Defragmentar la partición NTFS (o FAT32, si es el caso) dentro de Windows.
  • Abrir Gparted y achicar la partición de Windows al tamaño que necesites (con 6-10 GB estás más que bien, dependiendo de la cantidad de aplicaciones o juegos que uses en Windows).
  • Crear la partición root (/), swap y /home. Para la primera basta con 6 Gb, la segunda idealmente del doble de tu RAM (si tienes 1 GB o más, déjala en 1GB), y la tercera con el resto del espacio (ahí irían tus documentos).
Una acotación.
Para mí, lo ideal en un sistema de doble booteo (Windows y Linux) es tener una partición adicional para los documentos, compartida entre los dos SO’s, y que puede ser FAT o NTFS (más adelante ext3). Esto porque, según los pasos de Linux.com, estaríamos dejando todos nuestros archivos en una partición que Windows no puede leer. Bien ilógico, ¿no?

O sea, lo ideal es dejar una para Windows, una para Linux (root), otra para Swap, otra para Home (especialmente útil cuando quieres formatear root e instalar otra distro, tus archivos de usuario no se pierden), y otra compartida para tus documentos.
Pero ojo, si quieres tener una partición compartida, tendrás que hacerlo de forma distinta a cómo aparece en el video. Pero no te asustes. Lo que pasa es que (por decirlo de una forma) los discos duros “no soportan” más de cuatro particiones primarias (las normales). Para esto es que se crea una cuarta partición extendida, sobre la cual se crean particiones lógicas, y con eso se soluciona el problema.
O sea, como en este caso estamos hablando de 5 particiones (la de windows, root, swap, home y documentos) vas a tener que crear una partición extendida y dentro de ella meter las particiones nuevas.
Ahora, como además de la partición extendida puedes tener 3 primarias, mi recomendación es que dejes los sistemas operativos en particiones primarias y el resto dentro de la extendida. Esto porque Windows y Mac OS no pueden correr desde una extendida (Linux sí, en todo caso). Y además, en mi opinión, que queda todo más ordenado para modificar después la tabla de particiones. Es decir, en este caso la cosa quedaría así:
  • Partición 1: NTFS > Windows
  • Partición 2: EXT3 (o ReiserFS) > Linux
  • Opcional: Partición 3: HFS+ > Mac OS
  • Partición 4: Extendida (y dentro de ella los que vienen…)
  • – Partición 5: Swap (Es un sistema de archivos)
  • – Partición 6: EXT3 > Home
  • – Partición 7: NTFS o FAT > Documentos

domingo, 8 de enero de 2012

bash


Escrito Esta:
1 Corintios 14:26 ¿Qué hay que hacer, pues, hermanos? Cuando os reunís, cada cual aporte salmo, enseñanza, revelación, lenguas ointerpretación. Que todo se haga para edificación.

TOMADO DE:Wikipedia


bash (bourne again shell) es un programa informático cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux. Su nombre es un acrónimo de Bourne-Again Shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.
Hacia 1978 Bourne era el intérprete distribuido con la versión del sistema operativo Unix Versión 7Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió la versión original de Bourne. Brian Fox escribió bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador. Bash es el intérprete predeterminado en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a Microsoft Windows por el proyecto Cygwin.

Sintaxis de bash


La sintaxis de órdenes de bash es un superconjunto de instrucciones basadas en la sintaxis del intérprete Bourne. La especificación definitiva de la sintaxis de órdenes de bash, puede encontrarse en el bash Reference Manual distribuido por el proyecto GNU. Esta sección destaca algunas de sus únicas características.
La mayoría de los shell scripts (guiones de intérprete de órdenes) Bourne pueden ejecutarse por bash sin ningún cambio, con la excepción de aquellos guiones del intérprete de órdenes, o consola, Bourne que hacen referencia a variables especiales de Bourne o que utilizan una orden interna de Bourne. La sintaxis de órdenes de bash incluye ideas tomadas desde el Korn Shell (ksh) y el C Shell (csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables $RANDOM y $PPID, y la sintaxis de substitución de órdenes POSIX$(...). Cuando se utiliza como un intérprete de órdenes interactivo, bash proporciona autocompletado de nombres de programas, nombres de archivos, nombres de variables, etc, cuando el usuario pulsa la tecla TAB.
La sintaxis de bash tiene muchas extensiones que no proporciona el intérprete Bourne. Varias de las mencionadas extensiones se enumeran a continuación.

Acceso a los parámetros


Los guiones de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos recibido con el símbolo $#.
Por ejemplo, si nuestro guión necesita dos parámetros pondremos:
 if [ $# -lt 2 ]; then
   echo "Necesitas pasar dos parámetros."
   exit 1
 fi
Además disponemos del array $@, el cual contiene todos los parámetros pasados al guión y podemos iterar sobre estos de la siguiente manera:
  for param in "$@"
  do
    echo "$param"
  done

Redirecciones de entrada/salida

La sintaxis de bash permite diferentes formas de redirección de entrada/salida de las que el Shell Bourne tradicional carece. bash puede redirigir la salida estándar y los flujos de error estándar a la vez utilizando la sintaxis:
 orden >& archivo
que es más simple que teclear la orden Bourne equivalente, "orden > archivo 2>&1". Desde la versión 2.05b, bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada "here strings"):
 orden <<< "cadena a leer como entrada estándar"
Si la cadena contiene espacios en blanco, deben utilizarse comillas.
Ejemplo: Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia stdout
 # hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
 exec 6>&1
 # abre el archivo "test.data" para escritura
 exec 1>test.data
 # genera algún contenido
 echo "data:data:data"
 # recupera stdout original, al hacer que sea una copia del descriptor de archivo 6
 exec 1>&6
 # cierra el descriptor de archivo 6
 exec 6>&-
Abre y cierra archivos
 # abre el archivo test.data para lectura
 exec 6<test.data
 # lee hasta el final del archivo
 while read -u 6 dta
 do
   echo "$dta" 
 done
 # cierra el archivo test.data
 exec 6<&-
Captura la salida de órdenes externas
  # ejecuta 'find' y guarda los resultados en VAR
  # busca nombres de archivos que terminan con la letra "h"
  VAR=$(find . -name "*h")

Escape con contrabarra

Las palabras con la forma $'string' se tratan de un modo especial. Estas palabras se expanden a string, con los caracteres escapados por la contrabarra reemplazados según especifica el lenguaje de programación C. Las secuencias de escape con contrabarra, se decodifican del siguiente modo:
Escapes con contrabarra
Backslash
Escape
Se expande a ...
\aUn carácter de alerta (bell)
\bUn carácter de retroceso
\eUn carácter de escape
\fUn carácter de alimentación de línea (form feed)
\nUn carácter de nueva línea
\rUn carácter de retorno de carro
\tUn tabulador horizontal
\vUn tabulador vertical
\\Un carácter contrabarra
\'Un carácter de comilla simple
\nnnEl carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos)
\xHHEl carácter de 8 bits cuyo valor es el número hexadecimal HH (uno o dos dígitos hexadecimales)
\cxUn carácter control-X
El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo $ no estuviese presente.
Una cadena entrecomillada con comillas dobles precedida por un signo $ ($"...") será traducida de acuerdo al LOCALE actual. Si fuese C o POSIX, se ignora el símbolo $. Si la cadena es traducida y reemplazada, el reemplazo estará entrecomillado por comilla doble.



miércoles, 14 de diciembre de 2011

Niveles de ejecución (runlevels)


Escrito esta:Dijo Jesús "Yo soy la vid verdadera, y mi Padre es el viñador."(Juan 15:1)

Tomado de:ac.usc.es

 El proceso init inicia el sistema en un determinado runlevel

  • el runlevel inicial especificado en /etc/inittab

Runlevel
determinada configuración software que permite la ejecución de una serio de procesos en la máquina
Los runlevels se identifican por números de 0 a 6

RunlevelDescripción
0parada del sistema
1modo monousuario; solo root puede entrar
2, 3, 4, 5modos multiusuario
6reiniciar el sistema
Stambién monousuario (usado por scripts)
La utilización de los runlevels 2-5 varía con la distribución de Linux:
  • en Debian los 4 son idénticos: modo multiusuario completo (con entorno de ventanas, si disponible); por defecto se usa el 2
  • en RedHat y similares:
    • 2: multiusuario sin NFS
    • 3: multiusuario completo (sin ventanas)
    • 4: no usado
    • 5: multiusuario completo (con ventanas)
Es posible cambiar de runlevel en cualquier momento usando el comando telinit o init:
  • Formato
    telinit [-t SEC] runlevel
  • SEC es el número de segundos que esperará init a que un proceso se detenga con un SIGTERM antes de antes de matarlo con un SIGKILL (por defecto, 5)
  • Ejemplo: pasa al runlevel 6 en 10 segundos (reinicia la máquina)
    telinit -t 10 6
  • Es posible hacer que init relea el fichero de configuración /etc/inittab:
    telinit q
  • podemos saber en que runlevel nos encontramos con el comando runlevel
    • runlevel: muestra el runlevel actual y el anterior
      # runlevel
      N 2
      indica que nos encontramos en el nivel 2 y que no hubo nivel anterior

El fichero /etc/inittab

Define como se ejecutan los runlevels
  • indica el runlevel por defecto
  • indica los scripts a ejecutar en cada runlevel
Formato de las líneas de inittab
identificador:runlevels:acción:proceso

  • identificador: nombre asociado a cada línea del fichero generalmente no superior a 4 caracteres
  • runlevels: lista de runlevels (todos seguidos) para los cuales esta línea se tendrá en cuenta
  • acción: indica de qué forma o bajo qué condiciones se ejecuta el comando del campo siguiente
  • proceso: comando que se ejecuta para esta entrada en los runlevels especificados
Algunas de las acciones de init son (para verlas todas ver el manual de inittab)
  • respawn: el proceso se reinicia si termina
  • waitinit inicia el proceso y espera a que termine para seguir
  • onceinit inicia el proceso una vez, cuando se entra en el runlevel
  • sysinit: el proceso se ejecuta durante el arranque de la sistema
  • ctrlaltdel: el proceso se ejecuta si se recibe un CTRL-ALT-DEL
  • powerwait: el proceso se ejecuta cuando se acaba la batería
  • powerokwait: el proceso se ejecuta cuando se recupera la energía
  • powerfailnow: el proceso se ejecuta cuando la batería está casi vacía
Ejemplo de inittab
# Número de runlevel por defecto.
id:2:initdefault:

# Script que se ejecuta siempre en cada inicio 
# independientemente del runlevel.
si::sysinit:/etc/init.d/rcS

# Script para cada runlevel 
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normalmente no se alcanza, sólo si falla el reinicio
z6:6:respawn:/sbin/sulogin

# Qué hacer si se presiona CTRL-ALT-DEL
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Qué hacer si la corriente se va/vuelve
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

  • el script /etc/init.d/rcS se ejecuta en el arranque
    • este script llama a los scripts del directorio /etc/rcS.d
  • Por cada runlevel, se ejecuta el script /etc/init.d/rc X
    • este script llama a los scripts del directorio /etc/rcX.d

Directorios /etc/rcX.d

Los ficheros de estos directorio son de la forma:
[K|S]NNServicio
Al entrar en un runlevel se ejecutan todos los ficheros del /etc/rcX.d correspondiente
  • los que empiezan por K detienen servicios
  • los que empiezan por S los inician
  • los scripts se ejecutan por orden alfabético (primero K y después S)
Todos los ficheros son enlaces a los scripts reales, que están en el directorio /etc/init.d
  • estos script admiten, al menos, uno de los siguientes parámetros:
    • start inicia el servicio
    • stop para el servicio
  • Ejemplo, para y reinicia los servicios de red:
    # /etc/init.d/networking stop
    # /etc/init.d/networking start
Si queremos iniciar un nuevo servicio en un determinado runlevel
  • colocar el script de inicio en /etc/init.d
  • hacer un enlace de nombre SxyServicio en el runlevel
    • tener en cuenta posibles dependencias con otros servicios
  • hacer un enlace de nombre tipo K en el runlevel en que se quiera pararlo
    • un buen número de secuencia es 100-xy (el orden de matar los procesos inverso debe ser al de iniciarlos)
  • existen programas que nos facilitan la labor:
    • update-rc.d: crea y borra enlaces a los scripts init
    • sysv-rc-conf: GUI para consola
    • ksysv: entorno gráfico para KDE

Terminales

Despues de ejecutar los scripts de inicio, init crea un conjunto de terminales virtuales, siguiendo lo que se indica en /etc/inittab
.......
# Lanzar las terminales para el login de los usuarios
# Notar que el la mayoría de los sistemas tty7 es usado por X Window,
# así, para añadir mas getty's se debe saltar tty7
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

  • en esta configuración, los runlevels 2 y 3 arrancan 6 terminales y los 4 y 5 sólo 1
  • podemos cambiar de tty con Ctrl-Alt-F[1-6]
  • el tty7 se utiliza para pasar al entorno de ventanas
  • los terminales se lanzan con spawn para que se vuelvan a crear cuando salimos de la sesión
En este momento se puede acceder al sistema:
  • al iniciar la sesión en un terminal:
    • el proceso tty se convierte en un proceso login que chequea usuario y contraseña
    • si se accede con éxito, el proceso login se convierte en un shell
  • al salir de la sesión
    • el proceso bash muere
    • init relanza (respawn) un nuevo tty

miércoles, 30 de noviembre de 2011

Los Creadores de Lenguaje C y Unix

Escrito Esta:
Eclesiastés 9:5 Porque los que viven saben que han de morir, pero los muertos no saben nada, ni tienen ya ninguna recompensa, porque su memoria está olvidada.
Tomado de: Wikipedia
Dennis MacAlistair Ritchie (9 de septiembre de 1941 - 12 de octubre de 2011) fue un científico computacional estadounidense.
Colaboró en el diseño y desarrollo de los sistemas operativos Multics y Unix, así como el desarrollo de varios lenguajes de programación como el C, tema sobre el cual escribió un célebre clásico de las ciencias de la computación junto a Brian Wilson KernighanEl lenguaje de programación C.
Recibió el Premio Turing de 1983 por su desarrollo de la teoría de sistemas operativos genéricos y su implementación en la forma del sistema Unix. En 1998 le fue concedida la Medalla Nacional de Tecnología de los Estados Unidos de América. El año 2007 se jubiló, siendo el jefe del departamento de Investigación en software de sistemas de Alcatel-Lucent.
C y Unix
Artículo principal: C (lenguaje de programación)
Artículo principal: Unix
Ritchie es conocido sobre todo por ser el creador del lenguaje de programación C y cocreador, junto con Ken Thompson, del sistema operativo Unix. También fue coautor junto con Brian Kernighan del manual El lenguaje de programación C, que durante años fue el estándar de facto del lenguaje (conocido como K&R C), hasta la aparición del ANSI C.
Estas aportaciones han convertido a Ritchie en un importante pionero de la informática moderna. El lenguaje C aún se usa ampliamente hoy día en el desarrollo de aplicaciones y sistemas operativos, y ha sido una gran influencia en otros lenguajes más modernos como el lenguaje de programación Java. Unix también ha sentado las bases de los sistemas operativos modernos, estableciendo conceptos y principios que hoy son ampliamente adoptados.
Ken Thompson y Dennis Ritchie, creadores de C.