home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 3 / CD ACTUAL 3.iso / linux / docs / keystrok < prev    next >
Encoding:
Text File  |  1996-01-07  |  11.6 KB  |  302 lines

  1. ===================== Keystroke-HOWTU, version 2.0 ======================
  2.  
  3.             Linux Keystroke HOWTO
  4.                                  por
  5.          Zenon Fortuna (zenon@netcom.com)
  6.  
  7.                              Traducido
  8.  
  9.                                 por
  10.  
  11.                        Luis Hernández Rodríguez
  12.  
  13.  
  14.  
  15. Versión: 2.0                                             4 Abril 95
  16.  
  17. INDICE
  18.         0.      ¿ Que es "Keystroke-HOWTO" ?
  19.         1.      Historia de los cambios
  20.         2.      Pequeña descripción
  21.         3.      Herramientas para la modificación del driver del teclado
  22.         4.      Modificando el fichero del teclado
  23.         4.0     Ejemplo de modificación de un fichero de teclado
  24.         4.1     Modificación temporal del inicio del teclado
  25.         4.2     Modificación permanente
  26.         5.      Ejemplo de escritura de una macro
  27.         6.      Comentarios
  28.         7.      ¿ Más ideas ?
  29.  
  30. ----------------------------------------------------------------------------
  31. 0.  ¿ Que es el "Keystroke-HOWTO" ?
  32.  
  33.     Este documento es para los usuarios, que desean asignar una acción
  34.     especial a algunas teclas del teclado.  El método sugerido es utilizar
  35.     loadkeys(1) ó modificar el fichero defkeymap.c y volver a linkar el
  36.     kernel.
  37.  
  38.     Este texto NO hace alusión al remapeo del teclado, por ejemplo la tecla
  39.     de 'Borrado hacia atrás' ó la tecla de 'Borrado'.  Para obtener más
  40.     información sobre como remapear el teclado, lea el documento
  41.     Mini-HOWTO escrito por Stephen Lee.
  42.  
  43.     El método descrito a continuación ha sido testado en la versión de
  44.     Linux 1.2.1, del paquete de distribución Slackware 2.2.0.
  45.  
  46.  
  47. 1.  Historia de los cambios
  48.  
  49.     4 de Abril de 1.995   Versión: 2.0
  50.        Adaptado para Linux 1.2.1:
  51.        - cambios simples en la modificación de "my_keytable.map"
  52.        - ejemplo modificado "key_macro" en el volcado de pantalla /dev/vcs*
  53.  
  54.     7 de Mayo de 1.995   Versión: 1.0
  55.        La versión inicial del "Keystroke-HOWTO", que funciona en Linux 1.0
  56.  
  57.  
  58. 2.  Pequeña descripción
  59.  
  60.     El terminal virtual de Linux y los drivers de teclado asumen el teclado,
  61.     por defecto, que está definido en el fichero drivers/char/defkeymap.c
  62.     del kernel fuente.  Las 12 teclas de función pueden contener cadenas
  63.     de mandatos.  Después de pulsar cualquiera de las teclas de función,
  64.     ó en unión de la tecla Alt ó Ctrl, el terminal virtual actual añade
  65.     la cadena especifica a la entrada y salida de los buffers, emulando
  66.     la cadena como si se hubiese tecleado.
  67.  
  68.     Colocar una cadena en una tecla de función nos simplifica la ejecución
  69.     de un comando, por ejemplo, para poder ejecutar la sentencia
  70.     "/usr/local/bin/key_macro", la cual podremos crear ó modificar cuando
  71.     deseemos.
  72.  
  73.  
  74. 3.  Herramientas para la modificación del driver del teclado
  75.  
  76.     Podemos utilizar loadkeys(1), dumpkeys(1) y showkey(1):
  77.       La utilidad loadkeys(1) le ayuda a cargar nuevas cadenas en el buffer
  78.     del teclado ó preparar un nuevo código en C para modificar el kernel.
  79.       El programa dumpkeys(1) se utilizará para obtener la tabla actual del
  80.     teclado, y poder consultarlo ó modificarlo.
  81.       La utilidad showkey(1) nos permite obtener el código (keycode) de la
  82.     tecla de función seleccionada.
  83.  
  84.     Si su sistema Linux no dispone de estas utilidades, puede obtenerla a
  85.     través de 'anonymous' en ftp como 'kbd-0.89.tar.gz' ó 'kbd-0.90.tar.gz'
  86.     y el conjunto desde
  87.             sunsite.unc.edu:/pub/Linux/system/Keyboards, ó
  88.             tsx-11.mit.edu:/pub/linux/sources/system
  89.     Deberá utilizar la utilidad 'tar' de GNU para descomprimir los ficheros.
  90.  
  91.  
  92. 4.  Modificando el fichero del teclado
  93.  
  94.     El kernel de Linux incluye el código compilado defkeymap.c, el cual se
  95.     genera con la utilidad loadkeys(1) desde el fichero defkeymap.map.
  96.     Ambos ficheros están incluidos en el directorio src/linux/drivers/char.
  97.  
  98.     Necesitaremos modificar el fichero defkeymap.map, para hacer una copia
  99.     local de uno de ellos, tecleando
  100.  
  101.             # cp defkeymap.map my_keytable.map
  102.     ó
  103.             # dumpkeys > my_keytable.map
  104.  
  105.     También hay una colección grande de ficheros de teclados diferentes en
  106.     el directorio /usr/lib/kbd/keytables, desde el cual "defkeymap.map" se
  107.     utiliza como src/linux/drivers/char/defkeymap.map file en su sistema.
  108.  
  109.     El método que utiliza la utilidad dumpkeys(1) es el recomendable, debido
  110.     a que puede suceder que su kernel ya se haya modificado ó generado
  111.     para vd. con el fichero defkeymap.map, que usted haya elegido.
  112.  
  113.     Lea el contenido del fichero my_keytable. : hay más de 300 líneas de
  114.     código, divididas en 3 grupos de declaraciones: El primer grupo está
  115.     compuesto de líneas con la palabra "keycode", seguido de las palabras
  116.     adicionales "Alt", "Control", etc.  El segundo grupo se compone de
  117.     líneas con la palabra "string".  El tercer grupo agrupa las líneas con
  118.     la palabra "compose".
  119.  
  120.     Para obtener más información sobre la sintaxis de keytables(5) lea el
  121.     documento con el comando
  122.             % man keytables
  123.  
  124.  
  125. 4.0 Ejemplo de modificación de un fichero de teclado
  126.  
  127.     Como ejemplo vamos a asignar una cadena (macro) a la tecla de función
  128.     F1, para que pulsando las teclas "Ctrl-F1" llamemos a nuestro
  129.     Shell-script "/usr/local/bin/key_macro".
  130.  
  131.     Antes de nada, nos debemos enterar cual es el código de tecla de función
  132.     F1.  Utilizaremos la utilidad showkey(1) para encontrar el código
  133.     asociado a F1.
  134.  
  135.     Nos encontraremos que la cadena "F1" en el fichero "my_keytable.map"
  136.     tiene asociado el código 59:
  137.  
  138.     keycode  59 = F1
  139.  
  140.     Esto sugiere, que el código asociado a la tecla de función F1 es el
  141.     59.  También define esta línea que después de pulsar la tecla F1,
  142.     el driver del teclado enviará la cadena delimitada por dicha tecla.
  143.     Para ver el contenido de esta cadena, podemos buscar el patrón
  144.     "string F1", y encontraremos
  145.  
  146.     string F1 = "\033[[A"
  147.  
  148.     Esto significa, que después de pulsar la tecla F1, el driver del
  149.     teclado envia la secuencia "Esc [ [ A" (sin espacios en blanco).
  150.  
  151.     No cambie esta cadena, porque hay algunas aplicaciones que dependen
  152.     de esta cadena, y la toman por defecto como operación de la tecla F1.
  153.  
  154.     No obstante, podemos definir una nueva operación para Ctrl-F1, siempre
  155.     que no esté reservado por el kernel para otros procedimientos.
  156.     Para ver los cambios que se producen en la tecla F1, junto con Ctrl-,
  157.     Shift- u otro modo, examinemos el fichero "my_keytable.map" con
  158.  
  159.             # grep 59 my_keytable.map
  160.  
  161.     En el caso de que no haya una línea con "control keycode 59",
  162.     utilizaremos la combinación Ctrl-F1 sin problemas. (cuando en una línea
  163.     exista "shift control keycode 59", todo estará conforme)
  164.  
  165.     Añadamos la siguiente línea al fichero "my_keytable.map" :
  166.  
  167.             control keycode 59 = símbolo de la tecla
  168.  
  169.     donde el "símbolo de la tecla" define la acción que realiza la
  170.     combinación de teclas Ctrl-F1.  La versión de Linux 1.2.* le permite
  171.     una asignación dinámica de cadenas, excepto el nombre del "símbolo de
  172.     la tecla" que es fijo.  Se permite los "símbolos de teclas" entre
  173.     F1 y F246.  Para el fichero "my_keytable.map" de mi sistema la tecla
  174.     F21 no tiene uso,  pero vd. puede examinar mi fichero "my_keytable.map"
  175.     y elegir un símbolo de tecla apropiado.
  176.     Así, podemos colocar una línea al final con
  177.  
  178.             control keycode 59 = F21
  179.  
  180.     Ahora tendremos que definir el contenido de la tecla F21, añadiendo la
  181.     línea
  182.  
  183.             string F21 = "/usr/local/bin/key_macro\n"
  184.  
  185.     Resumiendo, hemos realizado dos cambios en el fichero original
  186.     "my_keytable.map":  hemos declarado la nueva cadena F21, y hemos
  187.     declarado que Ctrl-F1 puede ejecutar el contenido de F21.
  188.  
  189.  
  190. 4.1 Modificación temporal del inicio del teclado
  191.  
  192.     Una vez que tengamos modificado el fichero "my_keytable.map", podemos
  193.     copiarlo, con los cambios realizados, al núcleo del driver del teclado,
  194.     utilizando la utilidad loadkeys(1) :
  195.  
  196.     % loadkeys my_keytable.map
  197.  
  198.     El permiso para modificar el núcleo del driver del teclado se concede
  199.     a todo el que tenga acceso de lectura en el dispositivo "/dev/console".
  200.  
  201.     Para verificar los cambios realizados, podemos utilizar la utilidad
  202.     dumpkeys(1) para comprobar el valor de F21, por ejemplo
  203.  
  204.     % dumpkeys | grep F21
  205.  
  206.     Veremos en pantalla:
  207.  
  208.     keycode 59 = F1         F11     Console_13      F21
  209.  
  210.     string F21 = "/usr/local/bin/key_macro\012"
  211.  
  212.     lo que significa que todo está correcto (OK), debido a que "\012", ó LF,
  213.     equivale a "\n".
  214.  
  215.     Ahora, pulsando "Ctrl-F1" se ejecutará la sentencia:
  216.                  "/usr/local/bin/key_macro"
  217.  
  218.  
  219. 4.2 Modificación permanente
  220.  
  221.     Los cambios efectuados en el núcleo del driver del teclado por la
  222.     utilidad loadkeys(1) no serán efectivos hasta que no se vuelva a
  223.     reinicializar el ordenador (ó la próxima vez que ejecute loadkeys).
  224.  
  225.     Podemos modificar el fichero /etc/rc.d/rc.local utilizando para ello
  226.     loadkeys y le ponemos como argumento el fichero my_keytable.map.
  227.     O en lugar de ello, modificamos el fichero
  228.                   src/linux/drivers/char/defkeymap.c
  229.     y volvemos a linkar el núcleo con los nuevos valores.
  230.  
  231.     No debemos modificar manualmente el fichero defkeymap.c, sino generarlo
  232.     con la utilidad loadkeys(1) :
  233.  
  234.     # mv defkeymap.c defkeymap.c.ORIG
  235.     # loadkeys --mktable my_keytable.map > defkeymap.c
  236.  
  237.     Entonces debemos generar el nuevo kernel, esencialmente cambiándose
  238.     al directorio raíz donde están los fuentes del núcleo de Linux, y
  239.     después utilizar make(1).
  240.  
  241.     Finalmente, debemos utilizar lilo(1) para instalar y ejecutar nuestro
  242.     nuevo núcleo.
  243.  
  244.  
  245. 5.  Ejemplo de escritura de una macro
  246.  
  247.     Es muy útil una macro, ya que con una simple pulsación de teclas
  248.     podemos ejecutar varios comandos, ó imprimir algo.
  249.  
  250.     Este ejemplo ha cambiado desde la versión 1.0 de Linux, debido a los
  251.     cambios en el núcleo de Linux, que ya no proporciona el comando del
  252.     sistema ioctl(0,TIOCLINUX).
  253.  
  254.     Para leer en la pantalla de la consola virtual, primero se deben
  255.     preparar algunos ficheros de dispositivos.  Como usuario "root"
  256.     debemos crear los siguientes ficheros:
  257.  
  258.             # mknod /dev/vcs1  c 7 1
  259.             # mknod /dev/vcs2  c 7 2
  260.             ...
  261.             # mknod /dev/vcs63 c 7 63
  262.  
  263.     Por supuesto, basta con tener sólo los ficheros específicos que
  264.     tengamos en nuestra consola virtual que estemos utilizando.
  265.  
  266.     Las líneas que a continuación se leen son un ejemplo de un posible
  267.     fichero /usr/local/bin/key_macro :
  268.  
  269.      #!/bin/sh
  270.      #
  271.      # Este es un ejemplo de lo útil que es la escritura de una macro
  272.      #
  273.  
  274.      VT_NUMBER=`tty|cut -c9-`
  275.      FILE=/tmp/vt$VT_NUMBER.dump
  276.      cp /dev/vcs$VT_NUMBER $FILE
  277.      echo SCREEN DUMP saved in $FILE
  278.      #
  279.      # La línea siguiente se utilizará si desea hacer un volcado a la
  280.      # impresora
  281.      # lpr $FILE
  282.  
  283.  
  284. 6.  Comentarios
  285.  
  286.     No hay practicamente límite en la longitud de las cadenas que deseamos
  287.     se carguen en el driver del teclado.  La longitud del buffer en
  288.     FUNC_BUFSIZE (fijada en 512 bytes), se ha reemplazado en la versión de
  289.     Linux 1.2.* por una estratégica distribución dinámica del buffer ....
  290.     en trozos de 512 bytes cada uno.
  291.  
  292.     La copia más reciente del documento Keystroke-HOWTO puede encontrarla
  293.  
  294.             ftp.netcom.com: /pub/ze/zenon/linux/howto
  295.  
  296.  
  297. 7.  ¿ Más ideas ?
  298.  
  299.     En el caso de que vd. encuentre algo importante para añadir a este
  300.     documento, por favor envie sus comentarios zenon@netcom.com --
  301.     gracias.
  302.