

                    Descubriendo Linux Red Hat 5.0 (PARTE 3)
                    ------------ ----- --- --- --- ---------
                                 By Mr. Nuk3m  
                                 -- --- -----

 Hola a todos los que estan leyendo esto, yo soy Mr. Nuk3m y esta es la
 tercera y ultima entrega de este manual del sistema operativo Linux Red
 Hat 5.0.

 Disculpen las faltas de ortografia pero no voy a poner acentos, salvo las
 ees para que todos puedan leer este texto; ya sean usuarios de Windows o
 Linux :)

 Me reservo los derechos de autor de este manual por lo que si quieren hacer
 modificaciones, avisen primero. Este texto es de libre distribucion, siempre
 y cuando aparezcan estas lineas y mi nombre, Mr. Nuk3m.

 A continuacion, como siempre, un indice para que puedas buscar lo que te
 interesa saber de Linux Red Hat 5.0:

  Contenido  
                
   Introduccion (lo esta leyendo)
                                      
   13. Booteo, inicializacion y detencion del sistema
      13.1 MBR, particiones y cargadores 
      13.2 Booteo
      13.3 Proceso tradicional de booteo
           13.3.1 Niveles de ejecucion (runlevels)
           13.3.2 init tiene la posta
           13.3.3 Inicializacion del sistema
           13.3.4 Inicio de procesos respectivos al runlevel
           13.3.5 Inicio de los procesos de incializacion de terminales
      13.4 Carga del perfil estandar
      13.5 Carga de los perfiles personalizados
      13.6 Detencion del sistema
   14. Instalacion y configuracion de dispositivos
      14.1 Modems
           14.1.1 Puertos serie y modems
           14.1.2 Modems externos
           14.1.3 Modems internos
           14.1.4 El archivo /dev/modem
           14.1.5 Probando el modem
      14.2 Impresoras
           14.2.1 El dispositivo parport
           14.2.2 Impresoras soportadas
           14.2.3 Configuracion de lp
           14.2.4 Sofware de spooling
      14.3 Tarjetas de sonido
           14.3.1 Instalando la tarjeta de sonido
           14.3.2 Configurando el kernel
           14.3.3 Bootenado Linux y testeando la instalacion
   15. Administracion del sistema
      15.1 Responsabilidades del administrador
      15.2 El superusuario
           15.2.1 El comando su
      15.3 Administracion de cuentas de usuario
           15.3.1 El comando adduser
           15.3.2 Los grupos de usuarios
           15.3.3 Directorios "home"
      15.4 Chequeo de los sistemas de archivos
           15.4.1 El comando fsck
      15.5 Los modos setuid y setgid
      15.6 Ejecucion de programas en intervalos determinados
   16. El sistema de ventanas X Window
      16.1 Requerimientos de hardware
      16.2 Configurando el XFree86
           16.2.1 Seleccionando la tarjeta de video
           16.2.2 Seleccionando el monitor
           16.2.3 Seleccionando la memoria de la tarjeta de video
           16.2.4 Seleccionando el "clocking"
           16.2.5 Seleccionando los modos graficos
           16.2.6 Resolucion virtual
      16.3 Ejecutando XFree86
           16.3.1 El prograna xinit
           16.3.2 El archivo .xinitrc
      16.4 El "Window Manager"
           16.4.1 FVWM/FVWM2/FVWM95
           16.4.2 KDE
           16.4.3 Window Maker
      16.5 Iniciando el sistema en runlevel 5
           16.5.1 El programa xdm
           16.5.2 El archivo .xsession
      16.6 Aplicaciones utiles para el sistema de ventanas X Window

   A. Direcciones relacionadas con el sistema operativo Linux

   Despedida

   
 CAPITULO 13

 BOOTEO, INICIALIZACION Y DETENCION DEL SISTEMA

 Desde el momento en que prendemos la maquina hasta que aparece el mensaje
 de login, una gran serie de procesos se llevan a cabo. Es importante
 conocer que cosas se llevan a cabo como parte del proceso de booteo para
 modificar el comportamiento del sistema o para corregir el mismo si no
 inicia de la forma que deberia.

 Hay muchas maneras de modificar el comportamiento del sistema en el proceso
 de booteo.

 13.1 MBR, PARTICIONES Y CARGADORES

 Cuando booteamos desde un disco rigido, el primer sector del disco (llamado
 Master Boot Record) es cargado. Este sector contiene un programa cargador y
 la tabla de particiones del disco. El programa cargador usualmente carga el
 sector de booteo de la particion activa. EL secto de booteo de la particion
 contiene otro pequeo cargador que lee la primera parte del S.O. y lo inicia.

 El cargador en el caso de Linux suele ser LILO (LInux LOader) y es el que
 carga la primera parte del S.O. Luego es cargado el kernel.

 13.2 BOOTEO

 Bootear un sistema Linux incluye etapas de diagnostico de hardware, carga
 del kernel en memoria, chequeo y montaje de sistema de archivos, inicio
 de tareas en background y daemons y establecer el funcionamiento de la red,
 entre otras cosas.

 El cargador se ocupa de cargar el kernel en memoria. La imagen del kernel
 se encuentra comprimida, por lo que contiene un pequeo sector de codigo al
 principio de que le indica como descomprimirse automaticamente. Cuando se
 termina de descomprimir el kernel el mismo se carga en memoria.

 La imagen del kernel se ubica en el direcorio /boot y el nombre
 predeterminado es vmlinuz. Esta imagen es el resultado de la compilacion
 del kernel, como vimos en el capitulo 11.

 Una vez cargado el kernel en memoria, Linux se encuentra activo y
 funcionando. En este momento el S.O. (Sistema Operativo, por si se
 olvidaron) comienza a cargar drivers de dispositivos y a establecer la
 configuracion del hardware que va detectando. A medida que se instalan
 los drivers y se configuran dispositivos el kernel nos va mostrando mensajes
 que nos informan que es lo que esta realizando. Estos mensajes los podemos
 analizar mas tarde cuando el sistema esta iniciado ya que se van almacenando
 en el archivo /var/log/dmesg.

 Los mensajes varian dependiendo de los diferentes sistemas, del hardware que
 se posea, de la version del kernel, y de como se encuentra configurada.

 Los mensajes que el kernel muestra pueden ser observados en la figura 13.1.
 Las lineas fueron numeradas para utilizarlas como referencia mas adelante.

  [01] Linux version 2.2.5 Tue May 11 20:15:59 ART 1999
  [02] Detected 350809121 Hz processor.
  [03] Console: colour VGA+ 80x25
  [04] Calibrating delay loop... 699.60 BogoMIPS
  [05] Memory: 95648k/98304k available
  [06] CPU: AMD AMD-K6(tm) 3D processor stepping 0c
  [07] Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
  [08] Checking 'hlt' intruction... OK.
  [09] POSIX conformance testing by UNIFIX
  [10] PCI: PCI BIOS revision 2.10 entry at 0xfb490
  [11] PCI: Using configuration type 1
  [12] PCI: Probing PCI hardware
  [13] Linux NET4.0 for linux 2.2
  [14] NET4: Unix domain sockets 1.0 for linux NET4.0.
  [15] NET4: Linux TCP/IP 1.0 for NET4.0
  [16] IP Protocols: ICMP, UDP, TCP
  [17] parport0: PC-style at 0x3bc [SPP,PS2]
  [18] Detected PS/2 Mouse Port.
  [19] Serial driver version 4.27 with no serial options enabled
  [20] ttyS00 at 0x03f8 (irq = 4) is a 16550A
  [21] ttyS01 at 0x02f8 (irq = 3) is a 16550A
  [22] lp0: using parport0 (polling).
  [23] apm: BIOS version 1.2 Flags 0x07 (Diver version 1.9)
  [24] VP_IDE: IDE controller on PCI bus 00 dev 39
  [25]    ide0: BM-DMA at 0xe000-0xe007, BIOS settings: hda:DMA, hdb:DMA
  [26] ide0: VIA Bus-Master (U)DMA Timing Config Success
  [27]    ide0: BM-DMA at 0xe008-0xe00f, BIOS settings: hdc:DMA, hdd:DMA
  [28] ide1: VIA Bus-Master (U)DMA Timing Config Success
  [29] hda: ST34321A, ATA DISK drive
  [30] hdb: CD-ROM TW 240D, ATAPI CDROM drive
  [31] ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
  [32] hda: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63, UDMA
  [33] hdb: ATAPI 24X CD-ROM drive, 120kB Cache
  [34] Uniform CDROM driver Revision: 2.54
  [35] Floppy drive(s): fd0 is 1.44M
  [36] PPP: version 2.3.3 (demand dialling)
  [37] TCP compression code copyright 1989 Regents of the University of California
  [38] PPP line discipline registered.
  [39] Partition check:
  [40]  hda1 hda2 hda3 hda4
  [41] VFS: Mounted root (ext2 filesystem) readonly.
  [42] Freeing unused kernel memory: 48k freed
  [43] Adding Swap: 40156k swap-space (priority -1)

        Figura 13.1: Mensajes del kernel en la etapa de configuracion
                     de dispositivos.

 A continuacion vamos a detallar las lineas mas importantes:

  * 01  Nos muestra la version del kernel, en este caso 2.2.5 y la fecha en
        la que se compilo el kernel.

  * 05  El kernel nos muestra la cantidad de memoria detectada en el sistema.
        En este caso 96 Mb.

  * 06  El kernel nos informa que procesador encontro.

  * 09  El kernel nos informa de la norma POSIX que soporta.

  * 10  El kernel nos informa de la deteccion de un bus PCI.

  * 13-14-15-16  En estas lineas se informa de la incializacion de los
                 protocolos de red, en este caso TCP/IP.

  * 17-22  El kernel nos informa de la deteccion de un puerto paralelo que lo
           llama parport0 y trabaja en el puerto 0x3bc. Luego ese puerto es
           asignado a lp0.

  * 18  El kernel detecta un mouse PS/2 conectado al sistema.

  * 19-20-21  El kernel nos informa de la inicializacion de los puertos
              serie. En este caso encuentra dos ttyS00 y ttyS01, como puertos
              que soportan UART 16550A y trabajan en los puertos 0x3f8 y
              0x2f8 con interrupciones 4 y 3 respectivamente.

  * 23  Inicializacion del APM (Advanced Power Management).

  * 29-30  Deteccion de un disco rigido hda y de un CD-ROM hdb. En este caso
           el kernel creara un link simbolico /dev/cdrom para que apunte a
           /dev/hdb.

  * 35  Deteccion de una unidad de discos flexibles de 1.44 Mb fd0.

  * 36-37-38  Inicializacion y carga de los protocolos PPP (punto a punto).

  * 39-40  Chequeo de particiones, el kernel detecto cuatro particiones
           primarias (hda1, hda2, hda3, hda4).

  * 41  El kernel monta el sistema de archivos raiz, que debe ser de tipo
        ext2.

  * 43  El kernel inicializa el espacio de intercambio (swap) para utilizar
        una particion de 40 Mb.

 13.3 PROCESO TRADICIONAL DE BOOTEO

 Una vez que el kernel termina de cargar y configurar el hardware, incia un
 proceso llamado init que es el "padre" de todos los procesos del sistema y
 tiene asignado, por lo tanto, el numero identificatorio de procesos (PID) 1.

 El rol de este proceso es crear procesos de un script almacenado en el
 archivo /etc/inittab.

 13.3.1 NIVELES DE EJECUCION (RUNLEVELS)

 Antes de explicar detalladamente el proceso de booteo del sistema, vamos a
 presentar el concepto de nivel de ejecucion o runlevel, ya que es importante
 para comprender el funcionamiento del proceso init.

 Un runlevel es una configuracion de software que define un estado de
 operacion del sistema que permite existir solo a determinado grupo de
 procesos. Los procesos que init permite que existan en cada runlevel son
 especificados en el archivo /etc/inittab.

 En todo momento init se puede encontrar en un solo runlevel. Los runlevels
 validos se encuentran en un rango de 0 a 6 y se detallan a continuacion:

  * 0: halt - Detiene el sistema.
  * 1: modo unico usuario (single user) - Se utiliza para realizar tareas de
       mantenimiento y asegurarse de que ningun otro usuario esta trabajando
       en el sistema.
  * 2: Multiusuario sin NFS (sistema de archivos en red).
  * 3: (default) Multiusuario completo.
  * 4: -SIN USAR-
  * 5: Modo X11 (X Windows) - El sistema es iniciado directamente en modo
       grafico.
  * 6: reboot - Reincia el sistema.

 Podemos cambiar en cualquier momento de runlevel (solo si tenemos permiso
 para hacerlo) ejecutando el comando init con el numero de runlevel como
 argumento:

  ==> init n

 13.3.2 init TIENE LA POSTA

 Una vez que se ejecuta init el mismo busca una linea en el archivo inittab
 que especifique en que runlevel el sistema debe ser iniciado. Esta linea es
 de la forma:

  id:n:initdefault:

 Donde "n" es el numero de runlevel a iniciar. Una vez iniciado el runlevel
 que corresponde init comienza la inicializacion del sistema ejecutando la
 siguiente linea:

  si::sysinit:/etc/rc.d/rc.sysinit

 13.3.3 INICIALIZACION DEL SISTEMA

 El proceso de inicializacion del sistema se especifica en el archivo
 /etc/rc.d/rc.sysinit y, entre otras cosas, se realiza lo siguiente:

  * Se setea el PATH inicial del sistema:

    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH

  * Se definen los parametros de trabajo en red:

    if [ -f /etc/sysconfig/network ]; then
        . /etc/sysconfig/network
    else
        NETWORKING=no
        HOSTNAME=localhost
    fi

  * Se activan los espacios de intercambio:

    echo "Activating swap partitions"
    swapon -a

    NOTA: en la linea del echo, la podemos cambiar por algo asi:
          echo "Activando particiones swap"

  * Se realiza el chequeo del sistema de archivos raiz:

    if [ ! -f /fastboot ]; then
            echo "Checking root filesystems."
            fsck -V -a /
            ...
    fi

  * Se configuran los dispositivos Plug & Play:

    if [ -x /sbin/isapnp -a -f /etc/isapnp.conf ]; then
        if [ -n "$PNP" ]; then
            echo "Setting up ISA PNP devices"
            /sbin/isapnp /etc/isapnp.conf
        else
            echo "Skipping ISA PNP configuration at users request"
        fi
    fi

  * Se calculan las dependecias entre los modulos:

    if [ -x  /sbin/depmod -a -n "$USEMODULES" ]; then
        # Get ready for kerneld if module support in the kernel
        echo -n "Finding module dependencies"
        depmod -a
        echo ""
    fi

  * Se realiza el chequeo de los sistemas de archivos:
     
    # Check filesystems
    if [ ! -f /fastboot ]; then
            echo "Checking filesystems."
            fsck -R -A -V -a           
    ...
    fi
                                                
  * Se montan los sistemas de archivos locales definidos en el archivo
    /etc/fstab.

     echo "Mounting local filesystems."
     mount -a -t nonfs

 Una vez que se realizo la configuracion del sistema se pasa a iniciar los
 procesos que estan permitidos en el runlevel iniciado.

 13.3.4 INICIO DE PROCESOS RESPECTIVOS AL RUNLEVEL

 Los procesos a iniciar respectivos a cada runlevel se encuentra
 especificados en archivos que se encuentran en los directorios
 /etc/rc.d/rc#.d donde "#" es el numero de runlevel.

 El inicio de un runlevel tiene dos grandes partes:

  1- Ejecucion de los "kill scripts": Los kill scripts son scripts que se
                                      ocupan de detener servicios del
                                      runlevel actual.

  2- Ejecucion de los "start scripts": Los start scripts son scripts que se
                                       ocupan de iniciar los servicios del
                                       runlevel actual.


 EL DIRECTORIO /etc/rc.d/init.d

 En este directorio encontramos un archivo por cada servicio que contiene un
 script y es ejecutable. Estos scripts se deben ejecutar con un argumento
 obligatorio que puede ser cualquiera de los siguientes valores:

  start    Con este argumento iniciamos el servicio.
  stop     Con este argumento detenemos el servicio.
  restart  Con este argumento reiniciamos el servicio (debe estar activo).
  status   Con este argumento preguntamos en que estado se ecuentra el
           servicio.


 LOS DIRECTORIOS /etc/rc.d/rc#.d

 Estos directorios son los directorios de los runlevels. Los mismos contienen
 una serie de archivos que son links simbolicos a los scripts que se almacenan
 en el directorio /etc/rc.d/init.d. En la figura 13.2a vemos el contenido del
 directorio /etc/rc.d/rc3.d que corresponde al runlevel multiusuario.

  # pwd
  /etc/rc.d/rc3.d
  # ls
  K15gpm        S30syslog      S50inet       S60rwhod       S85sound
  K60mars-nwe   S40atd         S55named      S70ypbind      S91smb
  S01kerneld    S40crond       S55routed     S75keytable    S99local
  S10network    S40portmap     S60lpd        S80sendmail
  S15nfsfs      S40snmpd       S60nfs        S85httpd
  S20random     S45pcmcia      S60rusersd    S85postgresql

          a. El contenido del directorio del runlevel 3. 

  # pwd
  /etc/rc.d/rc0.d
  # ls
  K09keytable     K20nfs        K40snmpd    K60lpd        K95nfsfs
  K10named        K20rusersd    K50inet     K60mars-nwe   K97network
  K15gpm          K20rwhod      K50pcmcia   K65portmap    K98kerneld
  K15htppd        K30sendmail   K55routed   K70syslog     S00halt
  K15postgresql   K30ypbind     K60atd      K80random
  K15sound        K35smb        K60crond    K90killall

          b. El contenido del directorio del runlevel 0.

     Figura 13.2. El contenido de los directorios de los runlevels.

 Es necesario analizar los nombres de los links simbolicos que encontramos
 en los directorios de los runlevels. El nombre de estos links consta de tres
 partes:

  1- Una letra mayuscula que puede ser "K" (Kill) o "S" (Start). Si
     encontramos una "K", significa que al entrar a ese runlevel se debe
     matar el servicio especificado por el link, por lo que se ejecutara el
     script respectivo en el directorio /etc/rc.d/init.d con el argumento
     stop. Si encontramos una "S", significa que al entrar a ese runlevel se
     debe iniciar el servicio indicado por el link y se ejecutara el script
     del directorio /etc/rc.d/init.d con el argumento start.

  2- Un numero de orden que especifica en que momento debe matarse o
     iniciarse el servicio especificado. Cuando init entra en un runlevel,
     primero se examina el directorio del runlevel buscando los links que
     comiencen con K y comenzando por el numero 00 se incrementa el valor y se
     van matando los servicios en ese orden. Luego de matar todos los
     servicios se comienza a iniciar los servicios que nos indican los links
     que comienzan con S. En este caso tambien se examinan los links en orden
     numerico ascendente. El orden de estos links es muy importante ya que
     para poder iniciar ciertos servicios, es necesario que se hayan iniciado
     otros anteriormente y para matar algunos servicios es necesario no haber
     matado a otros antes.

  3- El nombre del servicio es lo que forma el resto del nombre del link
     simbolico. Este nombre debe ser el nombre valido de un script que
     representa un servicio y que se encuentra en el directorio
     /etc/rc.d/init.d.

 Como vemos en la figura 13.2a, el runlevel 3, solo mata algunos servicios y
 luego inicia una gran cantidad de servicios, en cambio el runlevel 0, que
 detiene el sistema, se ocupa de matar todos los servicios y luego inicia un
 servicio llamado halt que veremos lo que realiza mas adelante.

 13.3.5 INICIO DE LOS PROCESOS DE INICIALIZACION DE TERMINALES

 Una vez que el runlevel se encuentra activo, el proceso init se encarga de
 iniciar un proceso pro cada terminal que se encuentre disponible para
 trabajar en el sistema.

 Cada uno de estos procesos toma una terminal y espera pedidos de inicio de
 sesion consultando el estado de la terminal. Cuando un usuario se loguea
 exitosamente se inicia un proceso de shell que sera utilizado por ese
 usuario hasta que se termine su sesion en el sistema.

 13.4 CARGA DEL PERFIL ESTANDAR

 El administrador del sistema crea un perfil estandar para todos los usuarios
 del sistema que es almacenado en el archivo /etc/profile. En este archivo se
 setean una variedad de variables de entorno y se realizan tareas de
 configuracion que es necesario que se lleven a cabo para todos los usuarios. 

 Entre otras cosas se modifica el PATH, se setea el MANPATH (es el path donde
 se encuentran las paginas manuales de los comandos), se setea el prompt
 predeterminado (variable PS1), se setean las variables USER y LOGNAME con el
 nombre de login del usuario que realiza el inicio de sesion, y se pueden
 configurar scripts para ser ejecutados en el momento que el usuario incie la
 sesion.

 13.5 CARGA DE LOS PERFILES PERSONALIZADOS

 Cada usuario puede personalizar el perfil dado por el administrador,
 modificando el archivo .bash_profile que se encuentra en su directorio, y
 que es cargado inmediatamente de que se cargue el perfil predeterminado.
 Este archivo ademas carga el archivo .bashrc que tambien posee
 configuraciones personales.

 Usualmente los usuarios definen en este archivo variables de entorno para uso
 personal, modifcan el PATH a gusto, agregan alias para los comandos, etc.

 13.6 DETENCION DEL SISTEMA

 Al ejecutarse halt (init 0) o reboot (init 6), el sistema, luego de matar
 todos los servicios, termina ejecutando el servicio halt que se encuentra
 en el directorio /etc/rc.d/init.d. Este servicio es un script que realiza
 lo siguiente:

  * Mata todos los procesos:

    # Kill all processes.
    [ "${BASH+bash}" = bash ] && enable kill

    echo "Sending all processes the TERM signal..."
    kill -15 -1
    sleep 5
    echo "Sending all processes the KILL signal..."
    kill -9 -1

  * Desactiva el espacio de intercambio y desmonta los sistemas de archivos:

    # Turn off swap, then unmount file systems.
    echo "Turning off swap"
    swapoff -a
    echo "Unmounting file systems"
    umount -a

  * Detener o rebootear (segun sea). El sistema nos muestra el mensaje

    The system is halted

    en caso de que se detenga el sistema, y ya nos encontramos en condiciones
    de cortar la energia y nos muestra el siguiente mensaje

    Please stand by while rebootin the system...

    antes de ejecutar la instruccion para que se reinicie la maquina.

 En la figura 13.3 vemos un esquema de lo expuesto anteriormente.

                        .---------.
                        |   MBR   |
                        ---------
                             |
                             |
                            \|/
                    .------------------.
                    | Sector de booteo |
                    |    particion     |
                    ------------------
                             |
                             |
                            \|/
                        .---------. 
                        | vmlinuz |
                        ---------
                             |
                             |
                            \|/
                         .------.
                         | init |
                         ------
                             |
                             |
                            \|/
                    .----------------.
                    | carga runlevel |
                    ----------------
                    /        |       \
                  /          |         \____ 
                \|/         \|/            \|/
           .--------.    .--------.      .--------.
           | getty1 |    | getty2 |      | getty3 |
           --------    --------      --------
                |            |                |
               \|/          \|/              \|/
              @ @ @      .-------.          @ @ @
                         | login |
                         -------
                             |
                            \|/
                        .---------.
                        | profile |
                        ---------
                             |
                            \|/
                     .---------------.
                     | .bash_profile |
                     ---------------

      Figura 13.3: Esquema de estados del inicio del sistema.


 CAPITULO 14

 INSTALACION Y CONFIGURACION DE DISPOSITIVOS

 14.1 MODEMS

 14.1.1 PUERTOS SERIE Y MODEMS

 Los modems funcionan exclusivamente a traves de un puerto serie de nuestra
 computadora. Si el modem es externo, entonces el puerto serie es fisico. Si
 el modem es interno, no se utiliza un puerto serie de la maquina ya que el
 modem tiene el puerto serie como parte del mismo.

 Los puertos serie, en Linux, son representados por los siguientes archivos
 de dispositivos:
                   .----------.------------.
                   |  MS-DOS  |   Linux    |
                   |----------|------------|
                   |  COM1    | /dev/ttyS0 |
                   |  COM2    | /dev/ttyS1 |
                   |  COM3    | /dev/ttyS2 |
                   |  COM4    | /dev/ttyS3 |
                   ----------------------

 14.1.2. MODEMS EXTERNOS

 Para instalar un modem externo debemos seleccionar un puerto serie (fisico)
 de la maquina y conectar al mismo el cable que va al modem (cable serie).
 Para que el modem funciones debemos tener en cuenta que debe ser detectado
 correctamente el puerto serie utilizado.

 14.1.3 MODEMS INTERNOS

 Un modem interno se instala agregando la tarjeta a la maquina en un slot
 libre. Existen modems para los slots ISA y otros mas modernos para los slots
 PCI. Los modems internos tienen el puerto serie dentro de la tarjeta del
 modem y no necesitan utilizar un puerto serie (fisico) de la maquina.

 El seteo de la direccion de los puertos se realizaba con jumpers. Los modems
 Plug & Play no utilizan jumpers y se configuran enviandoles comandos. Estos
 comandos pueden ser enviados de tres formas:

  1. Una BIOS Plug & Play.
  2. El programa isapnp.
  3. Un S.O. (Sistema Operativo) PNP (Linux 2.2).

 14.1.4 EL ARCHIVO /dev/modem

 En algunas instalaciones se crean dos archivos de dispositivos adicionales
 que son /dev/modem y /dev/mouse. Ambos son links simbolicos a los
 dispositivos adecuados.

 Debemos hacer que el link simbolico /dev/modem apunte al puerto serie que
 corresponda antes de poder utilizar el modem. Esto es porque la mayoria del
 software trabaja con este link simbolico.

 14.1.5 PROBANDO EL MODEM

 Una vez instalado y configurado el modem debemos revisar el archivo
 /var/log/dmesg para ver si el modem es detectado al iniciar el sistema.
 Debemos buscar las siguientes lineas de deteccion de puertos serie:

  Serial driver version 4.27 with no serial options enabled
  ttyS00 at 0x03f8 (irq = 4) is a 16550A
  ttyS01 at 0x02f8 (irq = 3) is a 16550A

 Una vez que nos aseguramos de que el modem es detectado, podemos utilizar
 el programa minicom para testear el modem.

 14.2 IMPRESORAS

 14.2.1 EL DISPOSITIVO PARPORT

 En Linux los puertos paralelos se menejan con los dispositivos /dev/lpi,
 donde "i" es el numero del puerto. /dev/lp0 equivale a LPT1 en MS-DOS,
 /dev/lp1 equivale a LPT2, etc.

 En los kernels anteriores al 2.1.32 los dispositivos de puertos paralelos
 se manejan con un driver llamado "lp" que tenia muchos problemas y
 limitaciones. A partir del kernel 2.1.33 se integra un nuevo driver de
 puertos paralelos llamado parport (parallel port).

 Si queremos trabajar con impresoras conectadas a un puerto paralelo debemos
 compilar el soporte para "parport" dentro del kernel o como modulo para que
 el sistema detecte nuestro nuestros puertos paralelos.

 Una vez que los puertos funcionan (verificarlo en /var/log/dmseg) podemos
 pasar a la configuracion de la impresora.

 14.2.2 IMPRESORAS SOPORTADAS

 Practicamente cualquier impresora que se conecte a un puerto paralelo podra
 ser utilizada con Linux. La mejor opcion es una impresora que tenga soporte
 nativo para el formato PostScript ya que la gran mayoria de los programas
 que trabajan sobre Linux generan impresion en ese formato. Desafortunadamente
 es raro encontrar una impresora que soporte PostScript que no sea laser.

 Para solucionar este problema Linux provee un interprete en SW del formato
 PostScript llamado GhostScript, que produce una salida especifica para una
 gran cantidad de impresoras conocidas.

 Para configurar la impresora podemos utilizar el programa printtool que nos
 realiza una serie de preguntas acerca de las caracteristicas de nuestra
 impresora y la configura por nosotros.

 14.2.3 CONFIGURACION DEL lpd

 La configuracion manual de las impresoras se realiza editando el archivo
 /etc/printcap que contiene una serie de lineas que definen la configuracion
 de cada impresora que tengamos en el sistema.

 En la figura 14.1 vemos un ejemplo de archivo /etc/printcap.

  ##PRINTTOOL3## LOCAL cdj550 300x300 a4 {} Deskjet550 Default 1 1
  hp|lp:\
          :sd=/var/spool/lpd/hp:\
          :mx#0:\
          :sh:\
          :lp=/dev/lp0:\
          :if=/var/spool/lpd/hp/filter:
  ##PRINTOOL3## LOCAL bjc600 360x360 a4 {} BJC600 1 1
  canon:\
          :sd=/var/spool/lpd/canon:\
          :mx#0:\
          :sh:\
          :lp=/dev/lp1:\
          :if=/var/spool/lpd/canon/filter:

                Figura 14.1: Una archivo /etc/printcap.

 En el archivo de la figura tenemos dos impresoras (una HP DeskJet 550 y otra
 Canon Buble Jet 4300 - utiliza el driver de la BJC600 -). En la primera
 linea de la configuracion de cada impresora vemos ciertas opciones entre las
 cuales encontramos que: son locales (LOCAL), el driver utilizado (cdj550 -
 bjc600), la resolucion (300x300 - 360x360), el papel utilizado (a4 - a4).
 Vemos ademas que la impresora HP es la predeterminada porque tiene la opcion
 "Default".

 La siguiente linea define los nombres de la impresora. En el primer caso se
 llama "hp" o "lp" (podemos poner alias separados del simbolo "|") y en el
 segundo se llama "canon".

 Dentro de cada entrada de impresora configuramos:

  * Spool Directory: (sd=) El directorio donde se guardan los trabajos a
                           imprimir.

  * Puerto Local: (lp=) El puerto paralelo utilizado.

  * Filtro de entrada: (if=) El filtro a utilizar (depende de la impresora
                             utilizada).

 14.2.4 SOFTWARE DE SPOOLING

 Para poder hacer funcionar bien la impresora en el sistema hay que entender
 como funciona el software de spooling.

 El software de spooling es el encargado de recibir los trabajos a imprimir
 y encargarse de enviar la informacion a la impresora en el orden que sea
 necesario (usualmente el primer trabajo que llega es el primer trabajo en
 imprimirse).

 El software de impresion en Linux es conocido como LPD (Line Printing
 Daemon). Este software es una coleccion de programas que contiene:

  lpd: El demonio que realiza las tareas de spool.
  lpr: El comando que inserta un nuevo trabajo en la cola de spool.
  lpq: Nos muestra la lista de trabajos que se encuentran en la cola.
  lpc: El panel de control de lpd; podemos detener o iniciar una impresion,
       reordenar la cola, etc.
  lprm: Elimina un trabajo de la cola de spool.

 Cuando el sistema se inicia, se ejecuta el demonio lpd como un servicio
 activado en el runlevel. Este demonio escanea el archivo de configuracion
 /etc/printcap para saber con que impresora debe trabajar.

 Cada vez que un usuario quiere imprimir un trabajo, ejecuta lpr. Este
 comando se comunica con el demonio a traves del socket /dev/printer y le
 pasa el archivo a imprimir e informacion del usuario que manda a imprimir.
 El demonio luego se ocupa de enviar el trabajo a la impresora que
 corresponda.

 14.3 TARJETAS DE SONIDO

 14.3.1 INSTALANDO LA TARJETA DE SONIDO

 Para instalar la tarjeta debemos seguir las intrucciones del manual de la
 misma. Las tarjetas viejas tiene switchs o jumpers para configurar los
 parametros de IRQ, DMA, etc. Debemos anotar los valores utilizados para
 luego pasarselos al driver para que pueda trabajar.

 Usualmente debemos utilizar los mismos puertos, IRQ y DMA que la placa
 utiliza bajo MS-DOS. En otros casos, particularmente con las tarjetas PnP,
 debemos utilizar parametros diferentes para que las cosas funcionen en
 Linux. Puede ser necesario que experimentemos bastante hasta lograr nuestra
 meta. :)

 14.3.2 CONFIGURANDO EL KERNEL

 Si no tenemos compilados los drivers que necesitamos para nuestra tarjeta
 debemos seguir el proceso de compilacion seleccionando el driver adecuado
 y compilandolo como parte del kernel o como modulo (recomendado).

 14.3.3 BOOTEANDO LINUX Y TESTEANDO LA INSTALACION

 Una vez que instalamos el nuevo kernel, debemos reinicar el sistema y ya
 estamos en condiciones de testear el driver.

 Si compilamos el driver como parte del kernel debemos revisar el archivo
 /var/log/dmseg en busqueda de las siguientes lineas (en caso de tener una
 Sound Blaster):

  Sound initialization started
  <Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
  <Sound Blaster 16> at 0x330 irq 5 dma 0
  <Yamaha OPL3 FM> at 0x388
  Sound initialization complete

 Estos datos deben equivaler a los que seleccionamos con los jumpers en la
 tarjeta (en caso de que tenga).

 Si no se muestra ningun mensaje, significa que el driver no es parte del
 kernel. En este cado debemos chequear que hayamos instalado correctamente
 el nuevo kenel.

 Si los mensajes nos muestran lo siguiente:

  Sound initialization started
  Sound initialization complete

 Quiere decir que ningun dispositivo fue detectado. Esto puede ser porque no
 instalamos el driver adecuado, o que la tarjeta no esta soportada, el puerto
 de trabajo de la tarjeta esta mal seteado o que la tarjeta es PnP y no ha
 sido configurada.

 El driver tambien puede mostrar algunos mensajes de error y advertencias
 cuando se inicia. Debemos tener en cuenta estos errores y anotarlos en
 caso de encontrarlos.

 En caso de que el driver se haya compilado como modulo, debemos cargarlo y
 ver que nos informa. No olvidemos proveer al modulo con las opciones
 necesarias:

  * io: Puerto de trabajo (en hexadecimal - ejemplo: 0x220).
  * irq: Interrupcion de la tarjeta.
  * dma: Acceso directo a memoria (usualmente 1)

 Como proximo chequeo debemos ver que contiene el archivo /dev/sndstat. Este
 archivo es un archivo de dispositivo que nos provee informacion adicional
 del estado del driver de sonido utilizado. Podemos averiguar si el driver
 se inicio correctamente. Vemos un archivo /dev/sndstat de muestra en la
 figura 14.2.

  # cat /dev/sndstat
  OSS/Free:3.8s2++971130
  Load type: Driver compiled into kernel
  Kernel: linux 2.2.5 #1 Tue May 11 20:15:59 ART 1999 i586
  Config options: 0

  Installed drivers:

  Card config:

  Audio devices:
  0: MAD16 WSS (CS4231A)

  Synth devices:

  Midi devices:

  Timers:
  0: System clock
  1: MAD16 WSS (CS4231A)

                   Figura 14.2: El archivo /dev/sndstat.


 CAPITULO 15

 ADMINISTRACION DEL SISTEMA

 15.1 RESPONSABILIDADES DEL ADMINSTRADOR

 La adminsitracion del sistema incluye todas las cosas que uno debiera hacer
 para mantener a una (o varias) computadoras "utilizables". Incluye cosas
 como:

  * Hacer backup de los archivos periodicamente y restablecerlos cuando sea
    necesario.

  * Montar sistemas de archivos (swap, de red, etc.).

  * Instalar software nuevo.

  * Adaptar el software a un nuevo ambiente (hardware, etc.).

  * Crear cuentas para los usuarios (y eliminarlas cuando no se necesiten
    mas).

  * Realizar chequeos a los sistemas de archivos.

  * Informar a los usuarios de nuevos servicios.

 En resumen, es (o son, en el caso de que haya varias personas con la
 responsabilidad de administrar un sistema) el encargado de mantener la
 integridad y consistencia del sistema en general.

 15.2 EL SUPERUSUARIO

 En Linux (como en todos los sistema Unix) existe un usuario con privilegios
 especiales, que le permiten precisamente realizar estas tareas de
 administracion mencionadas. Este usuario es el llamado "Superusuario", cuyo
 nombre de login es root. El supersuario es capaz de realizar tareas que son
 prohibidas para usuarios ordinarios. Ademas, algunos de los comandos ya
 vistos tienen un efecto especial cuando son ejecutados con los privilegios
 del superusuario.

 A diferencia de los usuarios ordinarios, quienes estan condicionados por el
 sistema de modos de acceso a archivos (visto en 7.6), el superusuario no
 tiene esta restriccion. Puede cambiar el modo de cualquier archivo de
 cualquier manera. Una excepcion es sobre los sistema de archivos remotos,
 sobre los cuales (en general) se le otorgan permisos "en blanco", i.e.
 aunque un archivo tenga el permiso de lectura para todo el mundo (others),
 root no lo puede leer.

 Los comandos con privilegios de superusuarios pueden causar gran dao si
 son ejecutados inapropiadamente, por esto es que se deberia confiar confiar
 el password de root solo a gente con experiencia y responsable, y ademas
 este grupo de personas deberia ser el menor posible.

 15.2.1 EL COMANDO su

 Existen dos maneras de obtener los privilegios de superusuario. Una forma
 es realizar el login con el nombre especial root. La otra forma de
 realizarlo es con el nombre normal y luego ejecutar el comando su
 (superusuario). En cualquiera de los dos casos, el sistema pedira el
 password del superusuario. En el caso de que el password sea correcto, el
 sistema mostrara un prompt diferente al de los usuarios normales (usualmente
 #).

 Por razones de seguridad, es preferible la segunda forma (utilizando el
 comando su) a la primera. Esto se debe a que cada vez que se ejecuta este
 comando, se registra el usuario que lo ejecuta, la fecha, y el resultado
 (si tuvo o no exito).

 El comando su permite a un usuario asumir la identidad de otro, tan pronto
 como conozca su password. Como ya hemos dicho, es generalmente usado por los
 administradores del sistema para obtener los privilegios del superusuario.
 La sintaxis del comando es:

  su [-] [login_name]

 Si se especifica un nombre de login, el comando pedira el password de ese
 usuario, en caso contrario, se asume que uno quiere convertirse en el
 superusuario y se le pide el password de root.

 Por defecto, el directorio actual se mantiene como antes de haber ejecutado
 el comando. Con la opcion '-' se procesa tambien el archivo .login del nuevo
 usuario y la nueva shell comienza en el directorio home del mismo.

 15.3 ADMINSTRACION DE CUENTAS DE USUARIO

 Una de las tareas del adminstrador del sistema es la adminstracion de
 usuarios: agregar nuevos usuarios al sistema y borralos cuando ya no sean
 necesarios.

 Cuando una computadora es usada por varias personas, es necesario
 diferenciarlas para, por ejemplo, mantener seguros sus archivos privados.
 Para ello, a cada usuario se le otorga una cuenta en el sistema. Esta no se
 compone solo de un nombre de usuario unico en el sistema, que le permite a
 la persona loguearse en el sistema, sino tambien del conjunto de todos los
 archivos, recursos e informacion perteneciente al usuario (analogo a lo que
 ocurre con las cuentas bancarias).

 Al agregar un mnuevo usuario, hay una serie de puntos a tener en cuenta:

  Nombre de usuario: Es un nombre que identificara al usuario en el sistema.
                     Se debe elegir un nombre que no este actualmente en uso.
                     Las convenciones mas usadas son: usar el apellido, la
                     primer inicial y el apellido, las iniciales, etc. Tenes
                     que tener 8 caracteres como maimo de largo.

  Identificador de usuario (UID): Cada usuario se identifica a traves de un
                                  numero entero (usualmente entre 0 y 65535),
                                  dado que mas facil computar numeros que
                                  texto. Una base de datos separada del kernel
                                  asocia cada numero con un nombre textual
                                  (nombre de usuario). En general, los numeros
                                  bajos se reservan para el sistema y cada
                                  administrador luego tomara una politica de
                                  asignacion de numero de usuario.

  Identificador de grupo (GID): A cada usuario se le asocia un numero de
                                grupo que representa el grupo por defecto
                                del usuario. El usuario puede ser agregado a
                                otros grupos. De acuerdo a los permisos de
                                Linux sobre archivos, un usuario tiene los
                                privilegios de todos los grupos del cual es
                                miembro, todo el tiempo.

  Password: A cada usuario se le debe asignar un password inicial. Es posible
            agregar un usuario sin password, pero es muy peligroso desde el
            punto de vista de la seguridad. Un password puede ser, al igual
            que el nombre de usuario, de hasta 8 caracteres; ademas los
            adminsitradores pueden imponer otras restricciones como: tener
            por lo menos 6 caracteres, no ser una palabra asociada al
            nombre de usuario, etc.

  Directorio Home: Se debe crear un directorio home para cada usuario nuevo.
                   El nombre del directorio se forma con el nombre del
                   directorio inmediatamente superior, donde estan los
                   directorios home de su sistema, mas el nombre del usuario.
                   Por ejemplo, si en nuestro sistema tenemos sistema de
                   archivos para los directorios home de los usuarios llamado
                   /home/users/ y agregamos un usuario bill, su directorio
                   home sera entonces /home/users/bill/.

  Shell: Se debe elegir un shell para el nuevo usuario. En la mayoria de los
         sistemas, existe una shell predominante. En dichos sistemas, se le
         asigna a todos los nuevos usuarios la shell predominante. Aunque se
         le puede asignar cualquier shell que este listada en el archivo
         /etc/shells, archivo que contiene una lista de shells permitidas y
         disponibles.

 15.3.1 EL COMANDO adduser

 El comando adduser crea una nueva cuenta de usuario usando los valores
 especificados en la linea de comandos y los valores por defecto del sistema.
 La nueva cuenta se agrega a los archivos de sistema, se crea el directorio
 home, se copian los archivos de inicio, dependiendo de las opciones de la
 linea de comandos.

 Algunas de las opciones que se le agregan a la linea de comandos son:

  -d home.dir

  El nuevo usuario se crea usando home.dir como nombre del directorio home.
  La opcion por defecto es agregar el nombre de usuario al nombre del
  directorio home default (ej: /home/users) y usarlo como nombre del
  directorio home del usuario.

  -g initial.group

  El nombre o el numero del grupo inicial para el usuario. El grupo debe
  existir. El numero default de grupo es 1.

  -G group,[...]

  Una lista suplementaria de grupos de los cuales el nuevo usuario es
  miembro tambien. Tiene las mismas restricciones que los grupos en la opcion
  -g. El valor por defecto es que el usuario pertenezca solo al grupo
  inicial A.

  -s shell

  El nombre de la shell del usuario. Si este campo esta en blanco, el sistema
  le otorga la shell por defecto.

  -u uid

  El valor numerico del UID. Debe ser unico y no negativo. La opcion por
  defecto es usar el ID mas pequeo mayor a 99 y mayor a cualquier UID de
  otro usuario. Los valores entre 0 y 99 estan reservados para cuentas del
  sistema.

 15.3.2 LOS GRUPOS DE USUARIOS

 Cada usuario puede pertenecer a uno o mas grupos. La importancia de las
 relaciones de grupos recae en los permisos de los archivos. Cada archivo
 pertenece a un grupo de usuarios y tiene ciertos permisos que determinan
 los privilegios que tienen los usuarios que pertenecen a ese grupo. De esta
 forma podemos lograr que se comparta informacion en el sistema entre varios
 usuarios.

 Existen varios grupos definidos por el sistema como son: bin, mail, sys, etc.

 Los usuarios ordinarios no deben pertenecer a estos grupos; se utilizan
 para controlar el acceso del sistema a los archivos. Los usuarios pueden
 pertenecer a un grupo llamado users o podemos crear varios grupos si es
 necesario.

 El archivo /etc/group contiene la informacion relativa a los grupos. El
 formaro es el siguiente:

  group name:password:GID:miembros

 Veamos un ejemplo de un archivo /etc/group en la figura 15.1.

  root::0:root
  bin::1:root,bin.daemon
  daemon::2:root,bin,daemon
  sys::4:root,adm,daemon
  tty::5:
  disk::6:root
  lp::7:daemon,lp
  mem::8:
  kmem::9:
  wheel::10:root
  mail::12:mail,users,kmem
  news::13:news
  uucp:14:uucp
  man::15:
  games::20:
  gopher::30:
  dip::40:
  ftp::50:
  nobody::99:
  users::100:tony,juan,fede,pablo,nukem
  floppy:x:19:
  postgres:x:101:

               Figura 15.1: Un archivo /etc/group.

 El primer grupo root es un grupo reservado para la cuenta del administrador.
 El grupo users que tiene GID 100 es el grupo predeterminado para los usuarios
 y los usuarios tony, juan, fede, pablo y nukem pertenecen a este grupo.

 Tambien es posible agregar todo un grupo dentro de otro. Para esto incluimos
 en la lista de otros miembros el nombre del grupo. Asi todos los miembros
 del grupo que incluimos seran tambien miembros del nuevo grupo.

 15.3.3 DIRECTORIOS "home"

 Cada usuario tiene un directorio especial llamado "home" cuyo nombre es
 igual al nombre del usuario. Cuando un usuario se loguea en el sistema, es
 posicionado alli.

 EL ESQUELETO

 Cuando un nuevo directorio home se crea, se lo inicializa con los archivos
 que estan en el directorio /etc/skel. El administrador del sistema puede
 crear archivos en ese directorio para proveer un ambiente adecuado a los
 nuevos usuarios.

 Sin embargo, es aconsejable mantener el directorio /etc/skel lo mas
 reducido posible, aplicando las configuraciones globales a todo el sistema
 en archivos tales como el /etc/profile.

 15.4 CHEQUEO DE LOS SISTEMAS DE ARCHIVOS.

 15.4.1 EL COMANDO fsck

 El comando fsck se utiliza para verificar y arreglar sistemas de archivos.
 Se pueden verificar uno o mas sistemas de archivos individualmente
 especificando sus nombres en la linea de comandos. Si estos pertenecen a
 distintos dispositivos fisicos fsck tratara de realizar el chequeo en
 paralelo.

 La sintaxis de este comando es:

  fsck filesys

 Donde filesys es, o bien el nombre del dispositivo (ej: /dev/hda1), o bien
 su punto de montaje (ej: /usr/local).

 Si el comando se ejecuta sin argumentos, fsck verifica todos los sistemas
 de archivos especificados en el archivo /etc/fstab para ser chequeados.

 15.5 LOS MODOS setuid Y setgid

 Ocasionalmente, hay programas (como los juegos) que necesitan acceder a un
 archivo, mientras que ese archivo debe permanecer inaccesible mientras no se
 este ejecutando dicho programa. Este accionar se logra con los modos setuid
 y setgid.

 Si un archivo de programa tiene el modo setuid, dicho programa "corre" como
 si lo ejecutara el dueo (owner) del archivo ejecutable, sin importar quien
 lo ejecute. Esto es, cualquier usuario que ejecute dicho programa adquiere
 los privilegios del dueo, mientras el programa esta en ejecucion.

 El modo setgid es similar al anterior, solo que se adquieren los privilegios
 del grupo del dueo del archivo, y no del usuario.

 El dueo de un archivo puede setear los setuid y setgid mediante el comando
 chmod. La forma de utilizar este comando es tratada en la seccion 7.6.

 El modo setuid se indica con una s en la posicion ejecutable (x) del dueo.

  -rwsr-xr-x 1 root workers 12288 Nov 29 20:54 phonels

 El modo setgid se indica con una s en la posicion ejecutable (x) del grupo.

  -rwxr-sr-x 1 root workers 12288 Nov 29 20:54 phonels

 15.6 EJECUCION DE PROGRAMAS EN INTERVALOS DETERMINADOS

 15.6.1 EL PROGRAMA cron

 El programa cron es un demonio, iniciado poco despues del arranca del
 sistema, que se utiliza para ejecutar programas en momentos especificados.

 Cron lee los comandos de los archivos crontab almacenados en el directorio
 /var/spool/cron/crontabs.

 Cualquier usuario puede crear un archivo crontab utilizando el comando
 contrab. Este archivo se nombra con el nombre del usuario y el se convierte
 en su dueo.

 La sintaxis de este comando es:

  crontab [-e] [-r] [-l]

 La opcion -l muestra el contenido del archivo. La opcion -e permite editar
 el archivo.

 Cada linea del archivo especifica un comando y cuando deberia ser ejecutado.
 Todos los comandos ejecutados a partir de un archivo crontab se ejecutan
 con los privilegios y el ambiente del usuario dueo de ese archivo.
 Finalmente, la opcion -r borra el archivo del directorio
 /var/spool/cron/crontabs.

 El formato de las lineas del archivo crontab es la siguiente:

  <minutos> <horas> <dia del mes> <mes> <dia de la semana> <comandos>

 Vemos un ejemplo de un archivo crontab en la figura 15.2.

  0-59/5 * * * * /sbin/rmmod -a
  0,10,20,30,40,50 * * * * date > /dev/console

                 Figura 15.2: Un archivo crontab.

 La primera entrada hace que cada 5 minutos se ejecute el comando rmmod -a
 que descargara los modulos no utilizados. La segunda entrada hace que la
 fecha actual se muestre en la consola cada 10 minutos.


 CAPITULO 16

 EL SISTEMA DE VENTANAS X WINDOWS

 El sistema de ventanas X Windows fue desarrollado en el Laboratorio de
 Ciencias de la Computacion del Massachussetts Institute of Technology (MIT)
 con la cooperacion de DEC en 1984. En septiembre de 1987 MIT lanzo el
 primer release de X11. A partir de X11R2 (release 2) el control del proyecto
 paso al "X Consortium" que se formo en enero de 1988.

 Hoy, X Windows es desarrollado y distribuido por el X Consortium. La version
 utilizada en Linux es XFree86 que es una coleccion de servidores X para
 sistemas operativos de la familia Unix en plataformas Intel x86. La version
 incluida en Linux 5.0 es la XFree86 X11R6 (release 6) como parte de la
 mayoria de las distribuciones.

 16.1 REQUERIMIENTOS DE HARDWARE

 Para poder correr el sistema de X Windows, necesitamos una maquina con, al
 menos, 4 Mb de Ram (fisica) y 16 Mb de memoria virtual. Tengamos en cuenta,
 que cuanto mas memoria fisica tengamos el sistema utilizara menos el espacio
 de intercambio. Como el espacio de intercambio se mantiene en disco, y este
 es mucho, pero mucho mas lento que la memoria principal, necesitamos 8 Mb o
 mas de memoria fisica para correr X Windows de manera mas confortable. Un
 sistema con 4 Mb correra, mas o menos, 10 veces mas lento que uno con 8 Mb
 o mas.

 La configuracion sugerida es un 486 o algun Pentium con al menos 8 Mb y una
 tarjeta de video cuyo chipset sea soportado por XFree86. Para aquellos que
 desean una performance optima se recomienda utilizar una tarjeta moderna
 con acelerador grafico.

 16.2 CONFIGURANDO XFREE86

 Configurar el sistema de ventanas X Windows requiere que definamos los
 parametros del siguiente hardware:

  * Mouse a utilizar.
  * Teclado (internacionalizacion).
  * Monitor.
  * Tarjeta de video.

 El sistema de ventanas almacena toda la configuracion necesaria para
 iniciarse en el archivo /etc/X11/XF86Config. En un comienzo, para configurar
 el sistema de ventanas debiamos editar a mano este archivo seteando una gran
 cantidad de opciones como pueden ser: protocolos de mouse, relojes utilizados
 por la tarjeta de video, frecuencias del monitor, resoluciones y profundidad
 de color, etc.

 Este proceso era muy complejo y pocas veces resultaba que el sistema
 funcionara correctamente. Hoy se pueden utilizar cualquiera de las siguientes
 utilidades:

  * Xconfigurator: Programa que trabaja con una serie de menus y nos va
                   realizando preguntas relativas a la configuracion y
                   finaliza creando un archivo XF86Config con las opciones
                   seleccionadas.

  * XF86setup: Este programa realiza la misma tarea, con la unica diferencia
               de que funciona en modo grafico VGA y es mas amigable y facil
               de utilizar.

 16.2.1 SELECCIONANDO LA TARJETA DE VIDEO

 El programa nos dejera seleccionar una de las tarjetas de video que el
 sistema de ventanas soporta. En el archivo /usr/X11/doc/AccelCards o en
 /usr/X11/lib/X11/doc/AccelCards encontramos una lista con las tarjetas
 soportadas por el sistema de ventanas. Es conveniente buscar alli y
 cerciorarnos que de que esta soportada antes de iniciar la configuracion.

 Una vez seleccionada la tarjeta, debemos elegir el monitor adecuado.

 16.2.2 SELECCIONANDO EL MONITOR

 El programa nos mostrara una gran lista de monitores de la cual podemos
 elegir uno de ellos. El sistema de ventanas soporta, entre otros, monitores
 Acer, Dell, Hitachi, IBM, NEC Multisync, PHILIPS, Samsung, Sony, ViewSonic,
 etc. Si el monitor no se encuentra listado podemos elegir "Generic Monitor"
 o "Custom". Si elegimos el segundo, deberemos seleccionar que tipo de
 monitor tenemos. El programa nos dejara seleccionar de una lista de
 monitores. En general seleccionaremos uno de los siguientes:

  Super VGA, 1024x768 @ 87 Hz interlaced, 800x600 @ 56 Hz : Super Vga comunes
      entrelazados que soportan 1024x768.

  Non-Interlaced SVGA, 1024x768 @ 60 Hz, 800x600 @ 72 Hz : Super VGA (no
      entrelazados) que soportan 1024x768.

    NOTA: Es muy importante no seleccionar un tipo de monitor que tenga un
          rango de frecuencia horizontal mas alto que el del monitor que
          tenemos, ya que podemos arruinar el mismo.

 16.2.3 SELECCIONANDO LA MEMORIA DE LA TARJETA DE VIDEO

 A continuacion el programa nos pide que ingresemos la cantidad de memoria
 de nuestra tarjeta de video. Esto es necesario para que en la etapa de
 seleccion de modos y resoluciones se muestren los modos correctos.

 16.2.4 SELECCIONANDO EL "clockchip"

 Luego el programa de configuracion nos pide que seleccionemos el clockchip
 de nuestra tarjeta. Para la mayoria de las tarjetas de video actuales no es
 necesario especificar un clockchip, pero debemos averiguar en los manuales
 de nuestra tarjeta si la misma tiene un clockchip de los que el programa
 nos lista para asi seleccionar el correcto.

 16.2.5 SELECCION DE LOS MODOS GRAFICOS

 El programa realizara una tarea de autodeteccion de los modos que la tarjeta
 de video soporta y nos informara del modo con resolucion mas alta y mayor
 profundidad de color que pudo encontrar. Este sera el modo predeterminado,
 pero podemos cambiarlo si no nos conforma.

 16.2.6 RESOLUCION VIRTUAL

 Si seleccionamos un modo grafico que no utiliza la totalidad de la memoria
 de nuestra tarjeta de video, el sistema de ventanas se configurara para
 utilizar resolucion virtual. La resolucion virtual hace que tengamos un
 escritorio mas grande que el seleccionado, pero virtual ya que moviendo el
 mouse a lo largo y a lo ancho de la pantalla iremos descubriendo el resto
 del escritorio.

 Para aquellos que no desean este tipo de resoluciones podemos desactivarlas
 editando el archivo /etc/X11/XF86Config y remover todas las lineas que
 especifican Virtual.....

 Vemos un ejemplo en la figura 16.1

  ....
  # The Colour SVGA server

  Section "Screen"
      Driver      "svga"
      # Use Device "Generic VGA" for Standard VGA 320x200x256
      #Device     "My Video Card"
      Monitor     "My Monitor"
      Subsection "Display"
          Depth       16
          Modes       "800x600"
          ViewPort    0 0
          Virtual     "1024x768"
      EndSubsection
  EndSection
  ....
  
            Figura 16.1: Una seccion del archivo XF86Config

 16.3 EJECUTANDO XFree86

 Una vez configuado el sistema de ventanas, estamos listos para ejecutarlo.
 Como primer medida, debemos asegurarnos de que el directorio /usr/X11R6/bin
 forme parte de nuestro PATH.

 El comando que inicia el sistema de ventanas es el siguiente:

  ==> startx

 A continuacion el sistema intenta iniciarse en el modo especificado en la
 configuracion. Si el sistema no fue configurado correctamente, entonces el
 servidor X SVGA fallara y nos comunicara un error.

 Si el servidor X se inicia con exito el programa xinit toma el control e
 inicializa el sistema de ventanas.

 16.3.1 EL PROGRAMA xinit

 El programa xinit (X Windows System Initializer) se ocupa de iniciar el
 sistema de ventanas. Realiza todas las tareas necesarias para inicializar
 el sistema de ventanas correctamente.

 Este programa escaneara el directorio home del usuario que inicio el
 sistema de ventanas buscando el archivo .xinitrc.

 16.3.2 EL ARCHIVO .xinitrc

 Este archivo se ejecutara como un script de shell y su funcion es iniciar
 programas clientes del sistema de ventanas. Usualmente se utilza para
 iniciar el Window Manager (ver seccion 16.4) seleccionado y algunos
 programas que el usuario quiera iniciar automaticamente.

 Cada usuario puede editar este archivo a gusto para satisfacer sus
 necesidades. Asi cada usuario cada usuario puede seleccionar que window
 manager quiere utilizar, que programas quiere iniciar, etc.

 16.4 EL "WINDOW MANAGER"

 El window manager es la principal interfaz entre el sistema de ventanas
 X Window y el usuario. Sin un window manager seria muy dificil de utilizar
 y realmente no seria una herramienta productiva.

 El window manager, usualmente, provee la siguiente funcionalidad extra al
 sistema de ventanas:

  * Bordes de ventanas.
  * Menus, iconos.
  * Escritorios virtuales (desktops - workspaces).
  * Barra de ventanas, barras de tareas.
  * Personalizacion de todos estos puntos.

 Algunos sistema de ventanas, van mas alla, ya que como parte de los mismos
 tenemos aplicaciones especiales, herramientas de configuracion y
 personalizacion, etc. En estos casos es usual hablar de Entornos y no de
 Windows Managers.

 La eleccion del window manager puede influenciar dramaticamente el placer
 de nuestra experiencia de trabajo con el sistema de ventanas X Window. Al
 trabajar en el sistema de ventanas invertimos mucho tiempo manipulando
 ventanas y seguramente no queremos una interfaz que sea muy incomoda o que
 no nos permita personalizarla. Algunos window managers son extremadamente
 personalizables y nos pueden hacer sentir la ilusion de que tenemos un
 nuevo sistema operativo.

 16.4.1 FVWM/FVWM2/FVWM95

 FVWM (F Virtual Window Manager) es el window manager original y mas
 utilizado en el ambiente Linux. La version 2 (FVWM2) es el resultado de
 una gran desarrollo y goza de una excelente estabilidad y de mucha mejor
 flexiblilidad al trabajar.

 Este window manager es considerado el gran favorito ya que se provee como
 el window manager estandar en muchas distribuciones y los usuarios de Linux
 lo han adoptado como el window manager perferido.

 16.4.2 KDE

 El entorno de escritorio KDE (KDE Desktop Environment) forma parte de una
 segunda generacion de window managers para Linux. Es mas que un window
 manager, es una coleccion de herramientas y utilidades que funcionan muy
 bien interoperando.

 KDE encabeza un proyecto y gran ciclo de desarrollo y no es completamente
 estable todavia, pero apunta a ser todo lo que el usuario necesita para
 trabajar.

 KDE esta desarrollado sobre el kit QT, que es un conjunto de librerias
 graficas muy importante en Linux.

 Una cita de la pagina web de KDE:

  "KDE es un escritorio completamente nuevo que incorpora una larga suite de
   aplicaciones a las estaciones de trabajo Unix. KDE incorpora un window
   manager, un explorador de archivos (file manager), un centro de control
   (control center), y muchos otros componentes que uno espera encontrar en
   un entorno de escritorio contemporaneo. La verdadera potencia de este
   excepcional entorno es la interoperablilidad de sus componentes."

 16.4.3 WINDOW MAKER

 Este es un sistema de ventanas muy moderno con un "look" muy atractivo. Es
 uno de los window managers mas faciles de configurar y muy facil de usar.
 Soporta temas de escritorios (fondos de pantalla, iconos, bordes, etc.) los
 cuales pueden ser cambiados muy facilmente y un gran conjunto de
 caracteristicas que lo hacen uno de los window managers mas atractivos.

 Es por esto que este window manager esta ganando adeptos y esta siendo
 muy recomendado por los usuarios de Linux.

 A partir de la version 0.50, Window Maker nos permite ser utilizado en
 combinacion con las herramientas de KDE que son muy utiles y proveen una
 gran funcionalidad extra al entorno.

 Una cita de la pagina web de Window Maker:

  "Window Maker es un window manager para el sistema de ventanas X11
   diseado para otorgar soporte de integracion adicional para las
   aplicaciones GNUStep. Trata de emular el elegante "look" de la interfaz
   grafica de NEXTSTEP(tm). Es relativamente rapido, rico en caracteristicas,
   y muy facil de configurar y utilizar."

 16.5 INICIANDO EL SISTEMA EN RUNLEVEL 5

 Al iniciar el S.O. de forma predeterminada en el runlevel 5 accederemos a
 una interfaz grafica (llamada xdm) que nos permite realizar el proceso de
 login graficamente e inmediatamente accedemos al sistema de ventanas bajo
 nuestra configuracion personal, es decir el window manager que elegimos y
 las aplicaciones que se deben iniciar al entrar.

 16.5.1 EL PROGRAMA xdm

 El programa que se inicia como ultimo paso de la inicializacion del sistema
 en el runlevel 5 es xdm (X Display Manager). Se utiliza para proveer
 servicios de login a los usuarios en modo grafico.

 Este programa benficia al usuario ya que es muy facil de utilizar y
 automaticamente ingresamos (luego de loguearnos) en nuestro entorno de
 escritorio.
 
 Una vez que el usuario se logue exitosamente, se ejecuta el script Xstartup
 como el usuario root y luego se ejecuta el script Xsession como el usuario.
 Usualmente este script ejecuta otro llamado .xsession que se encuentra en
 el directorio home del usuario.

 16.5.2 EL ARCHIVO .xsession

 Si el sistema se inicia de esta forma debemos configurar nuestro entorno en
 el archivo .xsession. Su funcion es exactamente la misma que la del archivo
 .xinitrc pero con la diferencia de que este se utiliza al loguearse a traves
 de xdm.


 16.6 APLICACIONES UTILES PARA EL SISTEMA DE VENTANAS X WINDOW

 Existen un gran numero de plicaciones (X clients) para el sistema de
 ventanas X Window. Vamos a describir algunas de ellas:

  * rxvt: Emulador de terminal con soporte para colores. Muy sencillo y
          pequeo por lo que ocupa muy poca memoria.

  * gv (ghostview): Un programa para visualizar documentos PostScript y en
                    formato Adobe PDF.

  * xconsole: Programa para monitorear los mensajes de la consola del sistema.

  * xcalc: Calculadora cientifica para X Window.

  * glint: Herramienta grafica de configuracion de paquetes para sistemas
           basados en paquetes RPM.

  * xman: Browser de paginas manuales para el sistema de ventanas X Window.

  * xkill: Nos permite matar cualquier proceso que pertenece a una ventana.

  * xmixer: Herramienta para configurar la mezcladora de la tarjeta de sonido.

  * xplaycd: Reproductor de CD's de audio.

  * xv: Visualizador de imagenes de todos los formatos posibles.


 APENDICE A

 DIRECCIONES REALACIONADAS CON EL SISTEMA OPERATIVO LINUX

 Sitio oficial del sistema operrativo Linux .. www.linux.org
 Sitio oficial del kernel de Linux ........... www.kernel.org
 Linux aplications (Aplicaciones Linux) ...... www.linuxapps.com
 The K Desktop Environment (KDE) ............. www.kde.org
 Enlightenment Window Manager ................ www.enlightenment.org
 The Dock App Warehouse (para Window Maker) .. www.bensinclair.com/dockapp
 The Linux Mall .............................. www.linuxaplications.com
 Sitio Web de Red Hat ........................ www.redhat.com
 Software gratuito para Linux ................ ftp://sunsite.unc.edu/pub/Linux
 The LINUX HeadQuarter ....................... www.linuxhq.com
 Netscape Web Site ........................... www.netscape.com
 X Multimedia System (ex-X11amp) ............. www.xmms.org
 Window Maker Web Site ....................... www.windowmaker.org
 Debian Web Site ............................. www.debian.org


 Despedida
 ---------

 Bueno seores, aca termina este manual del sistema operativo Linux Red Hat
 5.0. Espero que les haya gustado y que por supuesto les sirva como un medio
 de consulta cuando se sientan desorientados o perdidos con el Linux.

 Tengo planeado sacar dentro de poco tiempo, un edicion Deluxe del manual
 todo completo, o osea, las tres entragas en un solo archivo .txt. Asi
 que cuando lo termine lo publico asi tienen todo en un archivo.

 Hasta la proxima... y disfruten de su Linux  :)

                            |\/|r. |\|uk3m
                            mr_nuk3m@usa.net
                         1999-2000 (c) Copyrights
