Página siguiente Página anterior Índice general

17. Varios

17.1 Como generar un disquete de arranque (boot)

Puede ser muy útil el tener en un disquete un núcleo para arrancar desde él. Para hacerlo, tome un disquete formateado y vaya a la raíz de su disco. Identifique su núcleo. Debe llamarse zImage o vmlinuz.

Cópielo en el disquete :

          cat /zImage > /dev/fd0

después haga (ejemplo) :

       rdev /dev/fd0 /dev/hda2
       rdev -R /dev/fd0 1
el segundo parámetro de la primera instrucción debe ser el nombre de la partición raíz Linux de su sistema.

Este disquete le permite arrancar (ˇpruébelo!).

17.2 Mi contraseña, donde esta mi contraseña?

En resumen : Ha perdido su contraseña de root... Bueno, hay varias soluciones. La primera :

  1. Arranque con los disquetes boot y root de su distribución.
  2. Entre como root (ahí, no hay contraseña).
  3. Monte la raíz del disco duro : mount -t ext2 /dev/hda1 /mnt
  4. Vaya al directorio /mnt. Sólo queda editar el archivo /mnt/etc/passwd, y suprimir la contraseña de root : root::0:0:root:/root:/bin/bash.

Arranque Linux normalmente, y en principio no necesita contraseña para entrar como root.

Bueno, pasemos a otras soluciones : Rearrancar el pc en modo single-user. Para esto, en el momento de arrancar con LILO, decirle LILO: linux single (reemplace aquí linux por el nombre con el cual LILO conoce a su núcleo). Aparecerá un intérprete de órdenes en modo superusuario. Atención : el teclado esta en qwerty y la partición en modo sólo lectura. Para remediarlo :

        loadkeys /usr/lib/kbd/keytables/fr.map (es.map)
        mount -w -n -o remount /
Utilice la orden passwd, o edite el archivo /etc/passwd

Si no dispone de disquete de arranque, a menudo puede resolverlo pasando init=/bin/sh al arrancar. Seguidamente, monte la raíz y edite el fichero /etc/passwd a mano.

17.3 Como limitar el reboot en single-user ?

El problema de arrancar en modo single-user, es que cualquiera puede entrar en la máquina como root. Para las empresas y las universidades, se plantea un problema de seguridad. Ciertas estaciones UNIX permiten colocar una contraseña en la EPROM de la máquina. Linux permite pedir la contraseña de root en modo single-user.

Para ello, debe recuperar las fuentes del programa init que se lanza en el momento de iniciar el sistema. Al principio del programa init.c, modifique la definición de la constante SOME_USER para que tenga el valor 2, recompile init, y re-instálelo.

Esta primera solución puede resultar de todas maneras insuficiente ya que una persona puede siempre arrancar sobre otro dispositivo (utilizando la opción root = Milinux).

Utilizando Lilo, ˇno hay problema ! basta agregar las lineas siguientes para cada una de las imágenes en el archivo /etc/lilo.conf:

  password = la contraseña sin encriptar
  restricted

(ˇpiense en colocar este archivo en modo sólo lectura para el super-usuario sin ningún derecho para los demás!)

El arranque normal de cada imagen pasa sin problema y sin pedir la contraseña (importante si uno quiere que la máquina se reinicie sola en caso de lío : apagón, reboot a distancia, ...) pero si uno quiere pasarle parámetros al núcleo en el momento del arranque, Lilo pide en ese momento la contraseña.

17.4 Consolas virtuales

Linux permite trabajar al mismo tiempo en varias ventanas de texto. Para pasar de una a otra, pulse Alt + Fn donde n es el número de la ventana virtual y Fn una tecla de función (por ejemplo F1, F2 ...). Puede configurar el número de ventanas en el archivo /etc/inittab.

Cuando se está bajo X, la combinación es Ctrl + Alt + Fn. Es entonces posible regresar bajo X accediendo así a la consola empleada (la primera "libre", es decir no manejada por un getty). Por ejemplo, si tiene 6 consolas virtuales (de Alt F1 hasta Alt F6 ); usa Alt-F7.

Utilice maj + paginas(teclas "SHIFT" y "página precedente" o "página siguiente") para "pasearse". Esto funciona también bajo xterm.

17.5 Consolas virtuales - aspectos teóricos

Principios

Las consolas virtuales son dispositivos. Hay 63 (o más si se modifica y recompila el núcleo). Se corresponden con los ficheros "especiales" tty1 ... tty63 del directorio /dev.

Para poder utilizarlas, es necesario asociar un proceso al terminal. Este es el papel de las utilidades como agetty. De hecho es interesante observar (con la ayuda de top) la evolución de los procesos en el momento del acceso de los usuarios;

Lo primero que hace agetty (como root) es pedirnos nuestro nombre de usuario. Al pulsar "intro", agetty ejecuta el programa login (siempre como root) como proceso hijo.

login (asociado a la CV como hijo de agetty) nos pide la contraseña. Entonces lanza nuestro intérprete de órdenes (ahora ya como "usted").

Podemos observar que al terminar nuestra sesión (es decir, al finalizar la ejecución de nuestro intérprete de órdenes), se vuelve a ejecutar un agetty.

Configuración

Aquí es donde interviene el fichero inittab. init (de PID 1), es el proceso padre de todos los procesos. Como es el primer proceso, es el encargado de lanzar los agetty. Para ello se sirve del fichero de configuración /etc/inittab.

Entre otras cosas, este fichero contiene líneas del tipo:


    c1:1235:respawn:/sbin/agetty 38400 tty1 linux

Para una explicación detallada, véase a página del manual de inittab(5). A grandes rasgos, significa que init lanza un agetty en /dev/tty1 y que lo vuelve a ejecutar cada vez que muere (respawn) con un tipo de terminal Linux cuando nos encontramos en los "runlevels" 1,2,3 o 5.

Por tanto, debe existir una línea de este tipo por cada consola virtual.

Aquí vemos que hay tantos agetty en ejecución como consolas virtuales utilizables, y que estamos limitados por este número de líneas en inittab (a menos que lancemos 63 agetty...).

Existe otro método: la asignación dinámica de CV. Esto se consigue gracias a un pequeño demonio (cspawnd)

ftp://ftp.lip6.fr/pub/linux/sunsite/utils/console/dynamic-vc-1.1.tar.gz

cspawnd is normally started in rc.local as a daemon that is signaled by the kernel when the console user presses the Spawn_Console key (see below). Upon receipt of a signal from the kernel, cspawnd activates the newly allocated VC and spawns a getty process to enable the user to login. In its default configuration, it also attempts to periodically deallocate unused VCs.
(NT: en inglés en el original)

Por tanto es conveniente dejar una CV gestionada por el primer método, asignando las demás dinámicamente.

Las teclas

Ahora debemos poder pasar de una CV a otra. Es el núcleo quien se encarga de ello. Cuando una tecla "ConsoleN" (N=1...63) es pulsada, el núcleo asocia la CV númeroi N a la consola (la real).

Tambien existen "Decr_Console" e "Incr_Console" que, respectivamente, incrementan y decrementan el número de la consola; así como Last_Console, que pasa a la última consola utilizada. cspawnd añade la tecla "Spawn_Console" (ver más arriba).

Queda asociar esto a teclas (o combinaciones de teclas) del teclado. Esto se consigue gracias a la utilidad loadkeys (ejecutada por init al inicio [en un fichero /etc/rcXXX]). Esta utilidad toma como parámetro un fichero .map (seguramente /usr/lib/kbd/keytables/es.map) que contiene líneas del estilo:

                 keycode  87 = F11 F11 Console_23
 control         keycode  87 = F11
 alt             keycode  87 = Console_11
 control alt     keycode  87 = Console_11

Por supuesto, se puede encontrar toda esta informació en las páginas de man y todas las ayudas en línea a nuestra disposición. Citemos loadkeys(8), init(8), inittab(5), cspawnd(8) así como los ficheros del directorio /usr/src/linux/Documentation.

17.6 Afrancesamiento

(NR: en general Internacionalización)

locale // nls

Los "locales" son un sistema que permite gestionar lo mas apropiadamente posible las diferencias de lenguaje y de estilo de los usuarios. Por ejemplo, los francófonos prefieren escribir 3,14 mejor que 3.14, no anotan las fechas como los Australianos (quienes no lo hacen como los Estados-Unidos), etc. Cada usuario debe entonces poder escoger un local que le convenga y las aplicaciones bien hechas (raras son aquellos que gestionan completamente los locales pero son numerosas las que los utilizan al menos un poco) se adaptan sin recompilación. En resumen, se trata de dejar las preferencias nacionales fuera de la aplicación, como con el sistema de recursos del MacOS.

Si es programador, puede consultar el locale-tutorial (distributions/jurix/source/libc/nls o sunsite/utils/nls) o el Mini- HOWTO sobre los Locales. Si es un simple usuario, puede conocer los locales instalados en su sistema con local -a (los nombres parecen estar poco estandarizados, verá cadenas del tipo "fr_FR" o "fr_FR.ISO8859-1") y seleccionar uno con las variables de entorno como LANG o LC_CTYPE (man local tal vez le sea de ayuda).

Si es el administrador de una máquina, y los locales no funcionan como desea, puede leer el Mini-HOWTO sobre los Locales y/o este modesto texto.

Si Linux no llegó con una instalación correcta de los locales ( no creo que exista una buena distribución desde este punto de vista), tiene dos soluciones. Yo solo probé la primera y solo funciona bien con un núcleo superior o igual a 2.0 y una libc versión 5.2.18 o superior.

Primera solución : compilar los programas de la libc y utilizar el paquete WG15-collection.

Para esto, debes recuperar las fuentes de la libc. no es necesario compilarla completa, solo los programas de gestión de los locales, que permiten especialmente producir un archivo binario a partir de la fuente de un local. Para resumir la instalación :

Recuperar libc (aquí 5.2.18), por ejemplo en ftp://ftp.lip6.fr/pub/linux/GCC.

  (pasar a root)
  cd /usr/src
  mkdir libc-5.2.18
  chown <USERNAME> libc-5.2.18
  (salir de root)
  cd libc-5.2.18
  tar -xzvf /usr/tmp/libc-5.2.18.tar.gz
  cd include
  ln -s /usr/src/linux/include/asm .
  ln -s /usr/src/linux/include/linux .
  cd ../libc

Y allí puede leer las instrucciones en el README y hacer "./configure" ("make depend" es lento y no parece necesario si quiere sólo los locales)

Si no quieres compilar toda la libc, te paras allí y :

  cd locale
  make SHARED= programs
  (pasar a root)
  mv localedef /usr/local/bin
  mv locale /usr/local/bin
  (salir de root)

Tiene ahora los dos programas importantes. Ahora puede generar los locales binarios a partir de las fuentes.

Una buena colección de fuentes se encuentra en el archivo WG15-collection.linux.tar.gz que se encuentra por ejemplo en ftp://ftp.lip6.fr/pub/linux/GCC ( debe su nombre a un "working group" Posix).

En este archivo, una vez desempaquetado, hay una buena documentación (Intro). Si no quiere leerla, lo que hay que hacer es :

  (pasar a root)
  cd charmaps
  mkdirhier /usr/share/nls/charmap
  cp ISO_* /usr/share/nls/charmap
  cd ../locales
  mkdirhier /usr/share/nls/locale
  cp POSIX ??_* /usr/share/nls/locale
  mkdirhier /usr/share/locale
  (la linea siguiente es lo que parece ser un error en la
  distribución)
  localedef -c -i /usr/share/nls/locale/en_DK -f ISO_8859-1:1987 en_DK
  (lleno de mensajes de errores del tipo "item `yesstr' of category
  `LC_MESSAGES' undefined" a ignorar)
  localedef -c -i /usr/share/nls/locale/fr_FR -f ISO_8859-1:1987 fr_FR
  (salir  de root)

Puede comprobar con local -a que el nuevo local es conocido desde ahora. Es todo. Los usuarios pueden utilizar ya las variables de entorno de los locales como LANG o LC_CTYPE.

Segundo método, que no he podido hacer funcionar :

Recuperar nslutils (hoy nlsutils-0.5.tar.gz) por ejemplo (parece necesario recuperar los archivos de cabecera como localeinfo.h en la libc).

  make
  make install

Para comprobar la instalación de los locales, puede servirse de Perl 5.003 (es la primera versión de Perl que prueba que la instalación es correcta y si no produce un mensaje de error) o este programa:

 # include <stdio.h>
 #include <ctype.h>
 #include <string.h>
 #include <locale.h>
 #include <sys/types.h>
 #define STRING  "bétö\b"
  void main ()
  {
      int i;
      u_char c;
      printf ("Setting locale: %s\n", setlocale(LC_ALL, ""));
      for (i=0; i<strlen(STRING); i++)  {
         c = STRING[i];
         printf ("%c (%d) is %s\n", c, (int)c, isprint((int)c)?"printable":"non-printable");
       }
  }

No debe imprimir en la pantalla Setting locale: (null) y, con el locale francés (español) correcto, debe encontrar que todos los caracteres, excepto el último, son "printables".

Ciertas herramientas GNU comienzan a ser internacionalizadas. Para tener esta posibilidad, añada a su .bashrc las líneas siguientes :

  export LC_CTYPE=ISO-8859-1
  export LANG=fr        # (NT: export LANG=es para hispanohablantes)

ispell

ispell es un corrector ortográfico, en francés. Se puede obtener en ftp.lip6.fr en /pub/ispell. Es igualmente posible obtener un diccionario francés para ispell en el mismo sitio en el directorio /pub/ispell/francais. El corrector epelle se revela también digno de interés.

Los acentos bajo bash

agrega en el archivo .inputrc las lineas siguientes :

  set meta-flag on
  set convert-meta off
  set output-meta on

less

Es muy desagradable no tener los acentos cuando se hace un less o un more de un archivo. Para que este problema no aparezca, añade :

  export LESSCHARSET=latin1

en el archivo /etc/profile.

less permite también examinar el contenido de diversos tipos de archivos (less toto.tar.gz...) :

  export LESSOPEN="|lesspipe.sh %s"

Colocar el script siguiente en un directorio cuyo nombre figura en el PATH :

  #!/bin/sh

  lesspipe() {
    case "$1" in
    *.tar) tar tvvf $1 2>/dev/null ;; # View contents of .tar and .tgz files
    *.tgz) tar tzvvf $1 2>/dev/null ;;
    *.tar.gz) tar tzvvf $1 2>/dev/null ;;
    *.tar.Z) tar tzvvf $1 2>/dev/null ;;
    *.tar.z) tar tzvvf $1 2>/dev/null ;;
    *.Z) gzip -dc $1  2>/dev/null ;; # View compressed files correctly
    *.z) gzip -dc $1  2>/dev/null ;;
    *.gz) gzip -dc $1  2>/dev/null ;;
    *.bz) bzip -dc $1  2>/dev/null ;;
    *.bz2) bzip2 -dc $1  2>/dev/null ;;
    *.zip) unzip - l $1 2>/dev/null ;;
    *.lha) lha -v $1 2>/dev/null ;;
    *.arj) arj l $1 2>/dev/null ;;
    *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; #groff src
      FILE=`echo $FILE | cut -d ' ' -f 2`
      if [ "$FILE" = "troff" ]; then
        groff -s -p -t -e -Tascii -mandoc $1
      fi ;;
    esac
  }

  lesspipe $1

Formato de textos

Para gs y xdvi, hay que utilizar unas opciones especiales (en mi máquina, son los alias). Efectivamente, con frecuencia son configurados para un papel de tamaño anglo-sajón.

Estas opciones son las siguientes :

  gs -sPAPERSIZE=a4
  xdvi -paper a4
  ghostview -a4

Para que dvips convierta los documentos en un formato papel a4, hay que especificar en el archivo config.ps (la ruta varía en función de las versiones de LaTeX) :

  @ a4 210mm 297mm
  @+ ! %%DocumentPaperSizes: a4
  @+ %%PaperSize: a4
  @+ %%BeginPaperSize: a4
  @+ a4

elm

Para que el correo esté en 8 bits (con acentos) sin necesidad de encapsularlo vía MIME u otra, agregue estas tres líneas al archivo ~/.elm/elmrc :

  charset = iso-8859-1
  displaycharset = iso-8859-1
  textencoding = 8bit

telnet

Il peut arriver que lors d'une connexion distante via telnet, les accents ne passent pas. Dans ce cas, utiliser l'option -L de telnet.

Puede ocurrir que en el momento de una conexión remota via telnet, los acentos no aparezcan. En este caso, utilice la opción -L de telnet.

French-HOWTO

Se ha escrito un documento para reunir un cierto número de especificaciones. No dude en consultar la dirección http://www.freenix.org/linux/HOWTO-vo/French-HOWTO.html.

17.7 teTeX y el estilo francés

Nota: la versión original de esta parte se encuentra en el sitio http://www.linux-france.com/article/tex/install_tetex_french.txt/

La versión de teTeX empleada es la 0.4p18, de la distribución Linux Red Hat (CD "LINDIS 1.0") 4.2. La versión de la extensión french empleada es la versión 4.00 (fecha : 19970626) obtenida del sitio ftp.lip6.fr /pub/TeX/CTAN/language/french (fichero french.tar.gz). Ver también http://www.loria.fr/tex/.

Nota : los usuarios de Debian observarán con placer que los existen los paquetes siguientes (gracias a L. Picouleau) :

tetex-french - The french style files for (La)TeX
tetex-french 4.00-1 -> 4.01-1 into hamm/non-free/binary-i386/tex
tetex-french (4.01-1) unstable; urgency=low
  * New upstream source
  * Build from pristine sources
  * 8 bit support (patch from Frederic Lepied <flepied@teaser.fr>)

Instalación

Comience por obtener los archivos tetex y french e instalar los paquetes rpm:

tetex-dvilj-0.4pl8-5.i386.rpm
tetex-dvips-0.4pl8-5.i386.rpm
tetex-xdvi-0.4pl8-5.i386.rpm
tetex-latex-0.4pl8-5.i386.rpm
tetex-0.4pl8-5.i386.rpm

Es necesario ser root para efectuar la instalación (recuerde: para instalar un paquete rpm: # rpm -i nom_du_paquet).

No es necesario instalar el paquete tetex-dvilj-0.4pl8-5 si no utiliza impresora PCL LaserJet sin PostScript.

Lea los comentarios contenidos en el paquete tetex-afm (con rpm -qip tetex-afm*) antes de decidir instalarlo o no.

Toda la distribución ocupa alrededor de 40 Mb (teTeX) y 3,5 Mb (french).

Primer test

La instalación crea diversos programas ejecutables en los directorios adecuados. Intentemos determinar si todo esta en su lugar (como usuario normal, no como troot):

El mensaje /usr/lib/texmf/texmf.cnf debe aparecer. En caso de problemas:

# find /usr/lib/texmf /var/lib/texmf -type d|xargs chmod a+rx

Configuración

Pasemos a la instalación y configuración del paquete french.

# umask 022
# cd /usr/lib/texmf/texmf/tex/generic
# tar xvzf french.tar.gz

Édite el fichero /usr/lib/texmf/texmf.cnf y modifique la definición de TEXINPUTS.latex. Se transforma en:

$KPSE_DOT:$TEXMFS/tex/{generic/french/inputs,latex,latex209,generic}//:$TEXMFS/tex//

Es suficiente añadir ahora generic/french/inputs y :$TEXMFS/tex//.

También podemos, llegado el caso, añadir la ruta de los estilos entregados con las sgml-tools o linuxdoc-sgml (con el fin de emplear sgml2latex para generar, por ejemplo, las versiones francesas de los HowTo, o la Guía del enROOTador):

$KPSE_DOT:$TEXMFS/tex/{generic/french/inputs,latex,latex209,generic}//:$TEXMFS/tex//:
/usr/local/lib/linuxdoc-sgml//

Utilice en ese caso sgml2latex -l para convertir de sgml a LaTeX. Pero esto no es suficiente: los caracteres acentuados se pierden. Puede ser necesario utilizar recode o (gracias a L. Wacrenier) añadir la opción <article opts=french> al código SGML.

A continuación modifique los parámetros:

# cd /usr/lib/texmf/texmf/tex/generic/config
# mv language.dat language.dat-babel
# cd /usr/lib/texmf/texmf/tex/generic/babel
# mv hyphen.cfg hyphen.cfg-babel
# cd /usr/lib/texmf/texmf/tex/generic/hyphen
# ln -s ushyph1.tex ushyph.tex
# cd /usr/lib/texmf/texmf/tex/generic/french/initex
# texconfig rehash
# initex latex.ltx
# mv latex.fmt /usr/lib/texmf/texmf/web2c

Despues, siempre como super-usuario, lance el programa texconfig y seleccione :

Utilice a continuación las pruebas del directorio /usr/lib/texmf/texmf/tex/generic/french/tst con el fin de asegurarse de que todo funciona bien (como usuario normal) :

$ mkdir ~/tmp
$ cd ~/tmp
$ cp -a /usr/lib/texmf/texmf/tex/generic/french/tst french_tst
$ cd french_tst
$ latex frenchlb.tex
$ latex frenchlb.tex
$ xdvi frenchlb.dvi
$ xdvi frenchrf.dvi

Ciertos estilos antiguos no funcionarán por culpa del fichero Ulasy.fd. Este fichero existe pero ha sido renombrado como ulasy.fd (inicial en minúscula) ya que esto mejora la compatibilidad de teTeX con los sistemas operativos incapaces de distinguir entre mayúsculas y minúsculas en los nombres de fichero. Es suficiente encontrar el directorio donde se encuentra el fichero (utilice find o locate), crear un enlace simbólico y llamar a texconfig rehash.

Por ejemplo :

# locate ulasy.fd
/usr/lib/texmf/texmf/tex/latex/base/ulasy.fd
# cd /usr/lib/texmf/texmf/tex/latex/base
# ln -s ulasy.fd Ulasy.fd
# texconfig rehash

Seguidamente utilice un navegador Web (browser) para examinar los ficheros

/usr/lib/texmf/texmf/doc/help/Catalogue/catalogue.html
y
/usr/lib/texmf/texmf/doc/helpindex.html

antes de emplear una impresora PostScript. Determine el valor adecuado del parámetro 'm' en el fichero config.ps utilizado. Lea al respecto el fichero info de dvips.

17.8 TeX y los tipos de caracteres

Ciertos personajes poco delicados se permitieron modificar los tipos de caracteres Computer Modern sin cambiar el nombre Y ESTO ES CONTRARIO A TODOS LOS COPYRIGHTS de Knuth. Esto es EXTREMADAMENTE grave porque todo documento tipografiado con los tipos de caracteres no tendrá la misma apariencia que con los VERDADEROS Computar Modern. Desafortunadamente, estos tipos de caracteres defectuosos fueron entregados con varios CDs Linux. Como muchos de nosotros trabajamos con los CDs slackware, conviene tener extremada atención.

Es por esto que debería verificar su sistema. Para ello, es fácil, un buen viejo terminal y dos minutos de tiempo :

ˇlisto!, tiene los tipos de caracteres originales (el valor clave a retener, es el 10.55559). Es suficiente ahora responder `x' para que TeX termine.

En caso contrario, su sistema está infectado. Basta recuperar las actualizaciones y el ciclo se completa.

17.9 Una tarjeta de sonido bien configurada

Cuando uno compila y se sirve de una tarjeta sonido en Linux, la gran pregunta es saber si la tarjeta está correctamente configurada. Para esto, existe un archivo (/dev/sndstat) que da todas las informaciones sobre la configuración de la tarjeta :

  Sound Driver:3.5.4-960630 (Mon Nov 11 14:50:52 MET 1996 root,
  Linux gandalf 2.0.25 #3 Mon Nov 11 11:44:54 MET 1996 i486)
  Kernel: linux gandalf 2.0.25 #3 Mon Nov 11 11:44:54 MET 1996 i486
  Config options: 0

  Installed drivers:
  Type 1: OPL-2/OPL-3 FM
  Type 2: Sound Blaster
  Type 7: SB MPU-401

  Card config:
  Sound Blaster at 0x260 irq 5 drq 1,5
  SB MPU-401 at 0x330 irq 5 drq 0
  OPL-2/OPL-3 FM at 0x388 drq 0

  Audio devices:
  0: Sound Blaster 16 (4.11)

  Synth devices:
  0: Yamaha OPL-3

  Midi devices:
  0: Sound Blaster 16

  Timers:
  0: System clock

  Mixers:
  0: Sound Blaster

Para probar el correcto funcionamiento de la tarjeta de sonido, es suficiente enviar algunos archivos audio (.au) a /dev/audio con la orden siguiente cat toto.au > /dev/audio.

17.10 Bug gcc

Ciertas versiones de gcc (de la 2.7.0 a 2.7.2 ambas comprendidas, pero no 2.7.2.1 y posteriores) tienen un bug con la opción -O2. Para identificarlo, pruebe este programa :

  /* sr_bug.c
   *
   * este programa hace un test  para un error de gcc.
   * Para compilar este program de test:  gcc -O2 sr_bug.c
   *
   * Algunas veces gcc para Intel CPUs genera código erróneo en el
   * nivel de optimización 2. El código erróneo es 'casi perfecto' y está oculto
   * dentro del programa que parece funcionar - incluyendo el kernel Linux.
   * El bug es muy viejo y ya ha sido documentado. A fecha 19-Dec-95,
   * el bug no ha sido reparado.
   *
   * Si cambia este código debería probarlo, porque aún un
   * mínimo cambio puede esconder este elusivo bug. Si cree que
   * ha reparado el bug, por favor ejecute el test original  hasta
   * estar seguro. Puede encontrar el test original abajo, despues de #if 0.
   * Escribi esta versión del test en Ingles para hacerla amigable, y
   * puede no ser tan sólida  como el original.
   *
   * Algunas personas que conocen mas que yo:
   * davis@space.mit.edu (John E. Davis)
   * anlauf@crunch.ikp.physik.th-darmstadt.de (Harald Anlauf)
   * craigs@iii2.iii.net (Craig Shrimpton)
   *
   * Versión amigable por Albert Cahalan
   *
   */

  #include <stdio.h>

  int gcc_sr_bug(void){
    static int Array[3]; /* must be static (or global) */
    unsigned int B = 3;  /* must be unsigned 32-bit */
    int i;
    for(i=0; i<B; i++) Array[i] = i - 3;
    for(i=0; i<B; i++) printf(" %d,%d", i, Array[i]);
    return !Array[1];
  }

  int main(){
    printf("Testing for gcc bug...");
    if(gcc_sr_bug()){
      printf("\n\nBad code! Your compiler generates bad output.\n\n");
      printf("Add -fno-strength-reduce to your gcc command line\n");
      printf("or put it into your gcc config file, such as in\n");
      printf("/usr/lib/gcc-lib/i486-linux/2.7.0/specs.\n");
      exit(1);
    }else{
      printf("\nOK, no problem.\n");
      exit(0);
    }
  }

17.11 Emacs

Emacs es un editor de texto muy potente ya que es coherente y extensible pero consume muchos recursos (procesador y memoria). La mayor parte de quienes comienzan a emplearlo seriamente, explorando las documentaciones, pronto no podrán pasar sin él.

Exsiten diversos documentos y FAQ.

He aquí un archivo de configuración básico:

  ;;
  ;; Archivo .emacs: inicialización de emacs
  ;;   Archivo de base : Guía del enROOTador
  ;;

  (display-time)                     ;;Para ver la hora en la barra de estado
  (setq display-time-24hr-format t)  ;; Formato 24 horas

  ;; Nuevos modes
  (autoload 'c++-mode   "cplus-md" "C++ Editing Mode" t)
  (autoload 'perl-mode   "perl-mode" "Perl Editing Mode" t)
  (autoload 'c-mode "c-mode" "C Editing Mode" t)
  ; mejor  utilizar el "cc-mode"

  ;; Auto-Mode Settings : elige el modo de acuerdo a  la extensión
  (setq auto-mode-alist
  (append '(("\.c$"  . c-mode)    ;; utiliza el modo C++ también para C
  ("\.h$"  . c-mode)
  ("\.C$"  . c++-mode)
  ("\.H$"  . c++-mode)
  ("\.cc$" . c++-mode)
  ("\.C$"  . c++-mode)
  ("\.pl$" . perl-mode)           ;; Perl
  ("/tmp/snd\.[0-9]* " . text-mode);; Text (para el correo)
  "[Rr][Ee][0-9]* " . text-mode)
  ("\.ada$"  . ada-mode)          ;; Ada
  ("\.spec$"  . ada-mode)
  ("\.body$"  . ada-mode)
  ("makefile$" . makefile-mode)  ;; Makefile
  ("Makefile$" . makefile-mode)
  ("Imakefile$" . makefile-mode))
  auto-mode-alist))

  # Correspondencias varias
  (global-set-key "\eg" 'goto-line)       ;; ESC G = Goto line
  (global-set-key "\eo" 'overwrite-mode)

  (put 'eval-expression 'disabled nil)

  ;; Acentos...
  (standard-display-european 1)
  (load-library "iso-syntax")

  ;; Bajo X-Window, texto en color (C/C++/Shell/Makefile,etc)
  (cond (window-system
  (setq hilit-mode-enable-list  '(not text-mode)
  hilit-background-mode   'light
  hilit-inhibit-hooks     nil
  hilit-inhibit-rebinding nil)
  (require 'hilit19)
  ))
  (if (not (equal window-system ""))
  (global-set-key "\C-?" 'delete-char))
  ))
  ;; mejor emplear font-lock

Este archivo puede ser ampliamente mejorado. Para saber más, consulte la documentación de Emacs (pulsar "control-H" y luego "i"), que está bien hecha pero es un poco grande.

Nota : es posible agregar las líneas siguientes para poder servirse de los acentos en el momento de la edición de los archivos en modo texto :

  (set-input-mode (car (current-input-mode))
                (nth 1 (current-input-mode))
                0)

17.12 Bloqueo de puertos serie

La utilización de puertos serie plantea un problema de bloqueo : hay que evitar que dos procesos concurrentes accedan a un puerto serie dado al mismo tiempo. Pero, por otra parte, si se tiene un puerto serie sobre el cual se ejecuta un getty para tratar llamadas de entrada, nos gustaria también poder utilizar el puerto serie para pasar las llamadas salientes.

Para resolver este problema, hay dos enfoques. El primero, es el bloqueo por el núcleo. Utiliza dos dispositivos diferentes para acceder a un puerto serie : /dev/ttySn para las llamadas de entrada (via getty), y /dev/cuan para las llamadas de salida. Cuando getty intenta abrir /dev/ttySn, esta bloqueado hasta que se reciba una llamada de entrada y el modem lo señale por la línea DCD del puerto serie.

Cuando getty está bloqueado en la llamada del sistema open, se puede aún utilizar el dispositivo /dev/cuan para las llamadas salientes (evidentemente, getty está bloqueado cuando DCD está activado para la llamada saliente...)

Por otra parte, una vez que /dev/cuan está abierto, un proceso de otra sesión no puede abrirlo (si el sistema esta correctamente configurado -- consultar la opción sesion_lockout de setserial(8). Esto evita que dos procesos intentando independientemente pasar una llamada saliente se encuentren escribiendo simultáneamente sobre el puerto serie.

La segunda técnica es la de "lock-files" (archivos de bloqueo). Consiste, para cada proceso que utiliza un puerto serie, en escribir su PID en un archivo especial. De esta manera, cuando otro proceso quiere utilizar el mismo puerto serie, verifica la presencia del archivo, lo encuentra, lee el PID en donde está escrito, verifica que el proceso correspondiente existe, y sabe entonces que el puerto serie está ocupado y que no puede utilizarlo. En este caso, sólo se utilizan los /dev/cuan.

Cada uno de los dos enfoques tiene sus ventajas y sus inconvenientes. El método de protección por el núcleo necesita emplear un modem en modo auto-respuesta, y autoriza la apertura del puerto serie por un proceso que quiere pasar una llamada de salida entre el momento en que el teléfono suena y el momento en que los modems han terminado de negociar (que puede tomar una decena de segundos.) El método de lock-files necesita una configuración homogénea de los programas utilizados (todos los programas deben buscar y colocar el "lock-file" en el mismo lugar, aceptando el formato PID inscrito...) También necesita que getty verifique periódicamente la existencia del "lock-file", y puede entonces "fallar" una llamada que entra entre el momento en que un proceso libera el puerto serie y cuando verifica de nuevo la presencia del "lock-file". Es también posible que un proceso de salida llegue a crear el "lock-file" entre el momento en que getty detecta una llamada y cuando crea el "lock-file" para esta llamada.

La selección de un método es, finalmente, una decisión individual de cada administrador, sabiendo que el enfoque "lock-file" es más flexible, pero menos elegante y más delicado que establecer el bloqueo por el núcleo.

17.13 Minitel

Es muy agradable poder conectarse al Minitel. Obtenga el programa xtel de Pierre Ficheux. Es un emulador Minitel muy simple de utilizar.

Puede encontrarlo en ftp.lip6.fr en el directorio /pub/X11/videotext/xtel.

17.14 Fax

Enviar documentos por FAX es perfectamente posible. Para hacerlo, puedes utilizar por ejemplo Hylafax.

Se encuentra en el sitio ftp.funet.fi en el directorio /pub/mirrors/sgi.com/sgi/fax/source.

17.15 Módulos Cargables Esta parte se inspira completamente en el artículo que escribí en el periódico "Les echos de linux", en el mes de Julio del 96.

Estructura del núcleo

El núcleo de un sistema UNIX puede ser representado bajo la forma de un objeto monolítico. Sin embargo, tal objeto posee el inconveniente de ser grande y estático. Cada vez que se desee agregar un nuevo dispositivo, es necesario recompilar el núcleo. Además, si uno utiliza ciertos gestores particulares raramente, se está obligado a tenerlo en el núcleo, lo cual tiene tendencia a consumir memoria.

Que es un modulo cargable ?

Los módulos cargables, permiten reunir lo útil y lo agradable teniendo un núcleo lo más pequeño posible, cargando bajo demanda aquello que necesita, sea de una forma manual por el super-usuario de la máquina, o de una manera automática. De esta forma, la ganancia de recursos no es nada despreciable.

La primera pregunta que uno puede hacerse, es : " Porque dos técnicas de carga ?"

La primera técnica es manual : hay que cargar o descargar los módulos a mano. La segunda es automática, gracias a la utilización de un demonio especialista que es esclavo del núcleo y que carga y descarga los módulos por él. De hecho, la versión 1.2 de Linux sólo ofrece la posibilidad de carga manual limitada al super-usuario de la máquina, lo cual es bastante pesado de manipular. En el desarrollo de la versión 2.0, un nuevo sistema implementado por Bjorn Ekwall permite efectuar una carga dinámica y automática de los módulos.

Compilación del núcleo

En el momento de la compilación del núcleo, es necesario especificar las opciones particulares para activar la utilización de los modulo cargables :


  gandalf# make config
  *
  * Loadable module support
  *
  Enable loadable module support (CONFIG_MODULES) [Y/n/?]
  Set version information on all symbols for modules (CONFIG_MODVERSIONS)
[N/y/?]
  Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]
  

He aquí el detalle de estas tres opciones :

Una vez configurado, es suficiente lanzar la compilación al igual que la instalación :


gandalf# make dep ; make clean
gandalf# make zImage
gandalf# make modules ; make modules_install

Una vez que estas operaciones han sido efectuadas, los módulos se encuentran en el directorio /lib/modules/x.y.z donde x.y.z corresponde al número de versión del núcleo. No nos queda sino ver como se cargan.

Nota importante : todas las herramientas de manipulación de los módulos se encuentran en el archivo modules-2.0.0.tar.gz en el directorio v2.0.. Son instalados por defecto por las distribuciones estándar, pero es importante utilizar la versión correcta.

Carga : método manual

La carga manual esta basada en tres órdenes :

Su uso obliga a ser super-usuario. He aquí un ejemplo de uso :


gandalf# insmod nfs.o
  gandalf# lsmod
  Module:        #pages:  Used by:
  nfs               12            4
  gandalf# mount -t nfs /truc /mnt
  gandalf# lsmod
  Module:        #pages:  Used by:
  nfs               12            5
  gandalf# cd /mnt
...
  gandalf# cd /
  gandalf# umount /mnt
  Module:        #pages:  Used by:
  nfs               12            4
  gandalf# ps axu | grep nfs
  root      5535  0.0  0.0     0     0  q2 SW  17:15   0:00 (nfsiod)
  root      5536  0.0  0.0     0     0  q2 SW  17:15   0:00 (nfsiod)
  root      5537  0.0  0.0     0     0  q2 SW  17:15   0:00 (nfsiod)
  root      5538  0.0  0.0     0     0  q2 SW  17:15   0:00 (nfsiod)
  root      5557  0.0  0.4   864   300  q2 S   17:16   0:00 grep nfs
  gandalf# kill -9 5535 5536 5537 5538
  gandalf# lsmod
  gandalf# rmmod nfs.o

Es necesario "matar" los 4 demonios nfsiod ya que son lanzados cuando NFS es activado. Como puede ver, estas operaciones se vuelven relativamente difíciles. Es por esta razón que se creó el sistema de carga automática.

Carga automática : kerneld

Advertencia

La gestión de los módulos ha sido modificada en la serie 2.1.x y kerneld ha sido suprimido. Por tanto esto sólo es válido para los núcleos 2.0.x.

Introducción

El sistema de carga automática de módulos permite reducir al mínimo el tamaño del núcleo. El principio de funcionamiento es particularmente simple : un demonio en modo usuario esta a la escucha de las órdenes del núcleo (vía un archivo de mensaje de tipo IPC Sistema V). Cuando un proceso intenta acceder a un recurso del sistema (vía una llamada al sistema open, etc...), el núcleo envía la orden de carga del módulo a kerneld. Una vez el mensaje es recibido, kerneld ejecuta modprobe para cargar los módulos necesarios

Consejos para la compilación del núcleo

En cambio, en el momento de la compilación del núcleo, es necesario colocar al menos el soporte para permitir el inicio de la máquina y el montaje de la raíz del sistema de archivos (por ejemplo, soporte IDE + ext2fs). Se puede tener todo el resto en módulos (tarjeta de sonido, sistemas de archivos, tarjeta SCSI, etc).

Puesta en marcha

Esta parte, de modificacion, solo es válida si la máquina no está dotada de kerneld. Las nuevas distribuciones efectúan una instalación correcta.

Para realizar la puesta en marcha del sistema de carga de módulos, es necesario efectuar ciertas modificaciones al nivel de la configuración. En efecto, es necesario que en el momento de iniciar la máquina, el demonio kerneld sea lanzado y realizar una especie de lista de dependencias de los módulos : ciertos módulos no pueden ser lanzados antes que otros lo sean. En un primer momento, hay que crear el archivo /etc/rc.d/rc.modules en el cual hay que poner:


# Modules
  #
  # Creación de un enlace lógico para el núcleo actual
  #
  #
  /bin/rm -f /lib/modules/current
  ln -sf /lib/modules/`uname -r` /lib/modules/current
  #
  # Creación de las dependencias
  if [ \! -r /lib/modules/current/modules.dep ]
  then
          echo "Creating module dependencies"
          /sbin/depmod -a
  fi
  #
  # Carga de los módulos de arranque...
  #
  if [-x /sbin/kerneld ]
  then
          if find /lib/modules/boot -type f -o type l > /dev/null 2>&1
          then
                  echo "Loading boot-time modules"
                  /sbin/modprobe -a -t boot \*
          fi
  else
          echo "Loading modules"
          /sbin/modprobe -a \*
  fi
  #
  # Si usted posee otro tipo de demonios kerneld a lanzar...
  #
  if [-x /sbin/kdsound ]
  then
          echo "Starting sound daemon"
          /sbin/kdsound &
  fi

Esto permite generar las dependencias entre módulos cada vez que se inicia la máquina. Seguidamente, en el archivo /etc/rd.d/rc.S (puede depender de su distribución...), conviene agregar :


# Start update.
  /sbin/update &

  # *** A AGREGAR ***
  # Lanzamiento de kerneld lo mas pronto posible, de tal manera
  # que los módulos de sistemas de archivos puedan ser cargados
  if [ -x /sbin/kerneld ]
  then
          echo "kerneld running"
          /sbin/kerneld
  fi


  # Un poco de limpieza
  cat /dev/null > /var/adm/utmp

  # Lanzamiento del script de los  módulos
  if [ -f /etc/rc.d/rc.modules ]; then
          /etc/rc.d/rc.modules
  fi

Una vez estas modificaciones efectuadas y la máquina reinicializada, todo debe quedar en su lugar. Si kerneld permite cargar automáticamente los módulos, permite igualmente descargarlos luego de cierto tiempo sin utilizarlos. Por defecto, si ningún proceso accede al modulo durante mas de 60 segundos, es automáticamente descargado. Es posible modificar este valor agregando el parámetro delay=N_Segundos a kerneld donde N_Segundos es la prolongación en segundos.

El archivo /etc/conf.modules

Puede suceder que sea necesario configurar un último archivo: el archivo /etc/conf.modules. Este archivo contiene las rutas donde se encuentran los módulos que deben ser cargados y a continuación los alias para los módulos. Si no tiene este archivo, puede crearlo con:


gandalf# /sbin/modprobe -c | grep -v '^path' >/etc/conf.modules

puede suceder que en el momento del primer arranque obtengas este mensaje :

  Cannot locate module for net-pf-3
  Cannot locate module for net-pf-4
  Cannot locate module for net-pf-5
Que no cunda el panico ! Este mensaje no es malo y para no tenerlo más, añada en el archivo /etc/conf.modules :
  alias net-pf-3 off
  alias net-pf-4 off
  alias net-pf-5 off

Puede suceder que ciertos dispositivos tengan necesidad de ciertos parámetros particulares. Consulte el documento Kernel HowTo.

Algunas referencias

Tu puedes consultar estas referencias para mas información :

Inactividad de una máquina

El programa "Energy Star" lanzado como iniciativa de la EPA ( "Environmental Protection Agency" americana) tiene como objetivo principal disminuir el consumo de energía eléctrica de sistemas inactivos. Ciertos dispositivos pueden, en algunos casos, ver aumentada su vida útil

Linux ofrece la posibilidad de utilizar equipos conformes a la norma. Se puede, por ejemplo, programar una tecla o un menu que, en un portátil, pare la rotación de los discos, apague la pantalla y reduzca el sistema.

La elección del tiempo de inactividad antes de la suspensión es función del uso del sistema. Nótese igualmente que no todos los sistemas gestionan estas funcionalidades y que se comportan de distinta forma según cada fabricante.

La información siguiente se proporciona con la esperanza de ser útil, pero se da SIN NINGUNA GARANTIA respecto al buen funcionamiento de su sistema después de seguirlas. Si su novia/o le abandona porque su disco duro emite extraños ruidos, o su casero le echa porque su monitor ha prendido fuego al apartamento, es usted el único responsable.

Disque dur

El paro de rotación del disco duro presenta una ventaja adicional a los enunciados más arriba: el de volver menos ruidoso al sistema. DE todas formas, en Unix, algunos demonios acceden a los datos sin tener necesidad real de ello y tienen tendencia a despertar al disco.

Ciertas BIOS pueden suspender el disco despues de un periodo de inactividad. Busque la opción HDD Standby Timer. Con los discos IDE, se puede utilizar la herramienta hdparm(8) que hace lo mismo:

        $ hdparm -S 120   -- para el disco a los 10 minutos (120 x 5s)
        $ hdparm -Y       -- suspende el disco inmediatamente

Si el disco no quiere pararse en modo normal (pero sí lo hace en modo "single user") o si retoma su actividad sin motivo aparente, es debido a que hay programas que continuan leyendo y escribiendo en el disco sin que hagamos nada. Estos programas (demonios) son ejecutados normalmente al arrancar. El juego consiste en detectarlos y cambiar sus parámetros.

Para la detección, se necesita un medio de vigilar los accesos físicos al disco duro, bien sea por la escucha del ruido de acceso o mediante un led de actividad. Después, he aquí tres métodos para buscar a los agitadores:

Disco duro, otra solución

Otra solución para arreglar el problema es compilar el núcleo con la opción ramdisk. Al inicio, se crea un disco ram que contiene los ficheros de bloqueo, guiones cron y demás.

Hay que añadir las siguientes líneas al fichero rc.S :

#Crear un disco ram, montar /var/lock
# y copiar el contenido de /var/lock.skel
dd if=/dev/zero of=/dev/ram15 bs=1k count=256 > /dev/null
mke2fs -m0 /dev/ram15 256 > /dev/null
mount /dev/ram15 /var/lock > /dev/null
(cd /var/lock.skel; cp -rP * /var/lock >/dev/null )

El fichero /var/lock.skel es una copia exacta de /var/lock. Antes de aplicar este sistema tenemos

>ls -l /var/lock.skel/
total 4
drwxr-xr-x   2 root     root         1024 Nov 26  1996 crontab/
drwxr-xr-t   2 root     root         1024 Nov 28  1993 emacs/
drwxr-xr-x   2 root     root         1024 Nov 21  1996 samba/
drwxr-xr-x   2 root     root         1024 Jul 15  1997 subsys/

/crontab contiene una serie de enlaces simbólicos tipo root ->
../../spool/cron/crontabs/root

donde se encuentran las fuentes "a pelo". Después de ejecutar crontab -e, copiar los ficheros /var/spool/cron/crontabs/{$USER, cron.update} en /var/lock/crontab.

cron debe ser lanzado por /usr/sbin/crond -l10 -c /var/lock/crontab >>/var/adm/cron 2>&1 para que busque sus archivos en el disco en memoria.

El directorio /var/lock/samba contiene los ficheros browse.dat y wins.dat, que son actualizados periódicamente. Para forzar a smbd y nmbd a utilizar este directorio, añadir en /usr/local/samba/lib/smb.conf :

  lock directory = /var/lock/samba
 

Ultima ventaja : después de una reinicialización, ˇya no hay más "stale locks" !

cron

El demonio cron(8) lanza programas a ciertas horas. No es directamente culpable de los accesos a disco (sólo hace accesos de lectura para verificar que sus tablas no han cambiado, pero sus datos están la mayor parte del tiempo en la caché de disco). Ciertas distribuciones insertan en crontab(5) procesos que son lanzados cada pocos minutos. Eche un vistazo en los crontabs de los usuarios demonio (root, news, uucp...) o en el fichero /etc/crontab y haga limpieza.

En algunas distribuciones, el programa atrun es ejecutado cada minuto. Sirve para ejecutar programas en una fecha dada con las órdenes at y batch. Si no lo utiliza, desactívelo, o pruebe con el demonio atd del paquete at-3.1.*.

Conserve las líneas que limpian los ficheros de registro y agrúpelas en torno a la misma hora.

mgetty

mgetty verifica cada pocos minutos que el modem responde bien. Como anota todas sus acciones en un fichero de registro (en función del parámetro debug) ésto implica accesos a disco no deseados.

Solución : Ponga un periodo de verificación desmesuradamente largo en mgetty.config. Por ejemplo :

      modem-check-time 360000

verifica cada 100 horas. Esta opción no tiene pinta de poderse desactivar.

lpr NG

lpd verifica la cola y la actividad de los demonios cada diez minutos.

Solución : desactive la opción en /etc/lpd.conf :

        poll_time 0

apache

El servidor maestro httpd habla con sus co-servidores a través del fichero log/apache_status.

Solución : lanzar httpd via inetd.

Numerosos comentarios desaconsejan utilizar apache con inetd por razones de rendimiento (inetd debe crear un proceso servidor que va a releer y analizar su configuración por cada URL solicitada) pero si su servidor no tiene muchos accesos, es completamente válido.

bind

bind 8.1 (named) registra cada hora información sobre su actividad.

Solución: Envíe esta información a otro lugar que no sea el disco duro (a una consola, por ejemplo) o desactívela resueltamente. En /etc/named.conf :

     logging {
             category statistics { null; };
             category maintenance { null; };
     };

squid

Squid hace limpieza constantemente en los ficheros en caché.

Solución : Ninguna con el propio squid, pero podemos utilizar el módulo proxy de apache (ver más arriba). Este módulo no está activo en la configuración por defecto. Tendrá probablemente que recompilar apache para utilizarlo.

sendmail

Sendmail verifica periódicamente la cola para reenviar el correo que encuentra.

Solucion : Necesita realmente un demonio sendmail (es decir, se considera que su máquina debe recibir correo mediante SMTP) ? Si piensa que no, mate el proceso y verifique que su lector de correo funciona todavía (mail, vm, rmail, mush, pine... no necesitan al demonio, pero mh si parece necesitarlo). Observe también si puede utilizar el demonio de otra máquina. Si necesita realmente sendmail como demonio, láncelo en el inicio sin la opción -q [duración] y vacíe la cola lanzando sendmail -q mediante crontab a las horas que desee (por ejemplo, al mismo tiempo que la limpieza de ficheros de registro).

El monitor

Los monitores conformes a la norma VESA DPMS pueden ser puestos en modo de espera. El monitor pasa sucesivamente por varias etapas :

Los parámetros cambian según estemos bajo X o no.

La consola

La orden setterm permite determinar si se utiliza DPMS y con que duración :

    $ setterm -blank 10           # extinción a los 10 minutos (por defecto)
    $ setterm -powsersave on

Se puede hacer un ajuste más fino con las secuencias de escape:

    ESC[9;intervalo]   "intervalo" es el número de minutos
                        de inactividad antes de entrar en el modo "suspend"
    ESC[14;intervalo]  número de minutos de inactividad entre el modo
                        "suspend" y el modo "off".

Ver, en el código fuente de linux, el fichero drivers/char/vesa_blank.c para más detalles.

XFree86

En XFree86 3.3 y superiores, los valores por defecto son inicializados en el fichero XF86Config(4). Para activar el modo DPMS, añada en la sección Devices :

    Option "power_saver"

A continuación puede ajustar los retardos StandbyTime, SuspendTime y OffTime de la sección Monitors como indica el manual.

Se pueden cambiar estos valores a voluntad o entrar en un estado particular con la orden xset(1).

La CPU

Las BIOS que soportan APM (Advanced Power Management) pueden hacer pasar al sistema por 3 estados de inactividad :

Cuando el sistema reduce su actividad, Linux pierde la noción del tiempo real (su reloj va más despacio). Todos los programas que efectúan acciones periódicas (en particular cron) son perturbados. El reloj es puesto en hora una vez el sistema se reactiva si el núcleo es compilado para soportar APM (si no, póngalo en hora con clock).

Si piensa hacer cálculos pesados, utilizar crontab, o si su máquina hace de servidor, dudo que las opciones APM le sean de utilidad, pero en un portátil la cosa cambia (si alguien me regala un portátil, compartiré con el mis impresiones)

La utilidad apmd ( ftp.cs.unc.edu:/pub/users/faith/linux/apmd-2.4.tar.gz) permite vigilar los estados relacionados con APM o forzar la suspensión.


Página siguiente Página anterior Índice general