home *** CD-ROM | disk | FTP | other *** search
- ===================== Keystroke-HOWTU, version 2.0 ======================
-
- Linux Keystroke HOWTO
- por
- Zenon Fortuna (zenon@netcom.com)
-
- Traducido
-
- por
-
- Luis Hernández Rodríguez
-
-
-
- Versión: 2.0 4 Abril 95
-
- INDICE
- 0. ¿ Que es "Keystroke-HOWTO" ?
- 1. Historia de los cambios
- 2. Pequeña descripción
- 3. Herramientas para la modificación del driver del teclado
- 4. Modificando el fichero del teclado
- 4.0 Ejemplo de modificación de un fichero de teclado
- 4.1 Modificación temporal del inicio del teclado
- 4.2 Modificación permanente
- 5. Ejemplo de escritura de una macro
- 6. Comentarios
- 7. ¿ Más ideas ?
-
- ----------------------------------------------------------------------------
- 0. ¿ Que es el "Keystroke-HOWTO" ?
-
- Este documento es para los usuarios, que desean asignar una acción
- especial a algunas teclas del teclado. El método sugerido es utilizar
- loadkeys(1) ó modificar el fichero defkeymap.c y volver a linkar el
- kernel.
-
- Este texto NO hace alusión al remapeo del teclado, por ejemplo la tecla
- de 'Borrado hacia atrás' ó la tecla de 'Borrado'. Para obtener más
- información sobre como remapear el teclado, lea el documento
- Mini-HOWTO escrito por Stephen Lee.
-
- El método descrito a continuación ha sido testado en la versión de
- Linux 1.2.1, del paquete de distribución Slackware 2.2.0.
-
-
- 1. Historia de los cambios
-
- 4 de Abril de 1.995 Versión: 2.0
- Adaptado para Linux 1.2.1:
- - cambios simples en la modificación de "my_keytable.map"
- - ejemplo modificado "key_macro" en el volcado de pantalla /dev/vcs*
-
- 7 de Mayo de 1.995 Versión: 1.0
- La versión inicial del "Keystroke-HOWTO", que funciona en Linux 1.0
-
-
- 2. Pequeña descripción
-
- El terminal virtual de Linux y los drivers de teclado asumen el teclado,
- por defecto, que está definido en el fichero drivers/char/defkeymap.c
- del kernel fuente. Las 12 teclas de función pueden contener cadenas
- de mandatos. Después de pulsar cualquiera de las teclas de función,
- ó en unión de la tecla Alt ó Ctrl, el terminal virtual actual añade
- la cadena especifica a la entrada y salida de los buffers, emulando
- la cadena como si se hubiese tecleado.
-
- Colocar una cadena en una tecla de función nos simplifica la ejecución
- de un comando, por ejemplo, para poder ejecutar la sentencia
- "/usr/local/bin/key_macro", la cual podremos crear ó modificar cuando
- deseemos.
-
-
- 3. Herramientas para la modificación del driver del teclado
-
- Podemos utilizar loadkeys(1), dumpkeys(1) y showkey(1):
- La utilidad loadkeys(1) le ayuda a cargar nuevas cadenas en el buffer
- del teclado ó preparar un nuevo código en C para modificar el kernel.
- El programa dumpkeys(1) se utilizará para obtener la tabla actual del
- teclado, y poder consultarlo ó modificarlo.
- La utilidad showkey(1) nos permite obtener el código (keycode) de la
- tecla de función seleccionada.
-
- Si su sistema Linux no dispone de estas utilidades, puede obtenerla a
- través de 'anonymous' en ftp como 'kbd-0.89.tar.gz' ó 'kbd-0.90.tar.gz'
- y el conjunto desde
- sunsite.unc.edu:/pub/Linux/system/Keyboards, ó
- tsx-11.mit.edu:/pub/linux/sources/system
- Deberá utilizar la utilidad 'tar' de GNU para descomprimir los ficheros.
-
-
- 4. Modificando el fichero del teclado
-
- El kernel de Linux incluye el código compilado defkeymap.c, el cual se
- genera con la utilidad loadkeys(1) desde el fichero defkeymap.map.
- Ambos ficheros están incluidos en el directorio src/linux/drivers/char.
-
- Necesitaremos modificar el fichero defkeymap.map, para hacer una copia
- local de uno de ellos, tecleando
-
- # cp defkeymap.map my_keytable.map
- ó
- # dumpkeys > my_keytable.map
-
- También hay una colección grande de ficheros de teclados diferentes en
- el directorio /usr/lib/kbd/keytables, desde el cual "defkeymap.map" se
- utiliza como src/linux/drivers/char/defkeymap.map file en su sistema.
-
- El método que utiliza la utilidad dumpkeys(1) es el recomendable, debido
- a que puede suceder que su kernel ya se haya modificado ó generado
- para vd. con el fichero defkeymap.map, que usted haya elegido.
-
- Lea el contenido del fichero my_keytable. : hay más de 300 líneas de
- código, divididas en 3 grupos de declaraciones: El primer grupo está
- compuesto de líneas con la palabra "keycode", seguido de las palabras
- adicionales "Alt", "Control", etc. El segundo grupo se compone de
- líneas con la palabra "string". El tercer grupo agrupa las líneas con
- la palabra "compose".
-
- Para obtener más información sobre la sintaxis de keytables(5) lea el
- documento con el comando
- % man keytables
-
-
- 4.0 Ejemplo de modificación de un fichero de teclado
-
- Como ejemplo vamos a asignar una cadena (macro) a la tecla de función
- F1, para que pulsando las teclas "Ctrl-F1" llamemos a nuestro
- Shell-script "/usr/local/bin/key_macro".
-
- Antes de nada, nos debemos enterar cual es el código de tecla de función
- F1. Utilizaremos la utilidad showkey(1) para encontrar el código
- asociado a F1.
-
- Nos encontraremos que la cadena "F1" en el fichero "my_keytable.map"
- tiene asociado el código 59:
-
- keycode 59 = F1
-
- Esto sugiere, que el código asociado a la tecla de función F1 es el
- 59. También define esta línea que después de pulsar la tecla F1,
- el driver del teclado enviará la cadena delimitada por dicha tecla.
- Para ver el contenido de esta cadena, podemos buscar el patrón
- "string F1", y encontraremos
-
- string F1 = "\033[[A"
-
- Esto significa, que después de pulsar la tecla F1, el driver del
- teclado envia la secuencia "Esc [ [ A" (sin espacios en blanco).
-
- No cambie esta cadena, porque hay algunas aplicaciones que dependen
- de esta cadena, y la toman por defecto como operación de la tecla F1.
-
- No obstante, podemos definir una nueva operación para Ctrl-F1, siempre
- que no esté reservado por el kernel para otros procedimientos.
- Para ver los cambios que se producen en la tecla F1, junto con Ctrl-,
- Shift- u otro modo, examinemos el fichero "my_keytable.map" con
-
- # grep 59 my_keytable.map
-
- En el caso de que no haya una línea con "control keycode 59",
- utilizaremos la combinación Ctrl-F1 sin problemas. (cuando en una línea
- exista "shift control keycode 59", todo estará conforme)
-
- Añadamos la siguiente línea al fichero "my_keytable.map" :
-
- control keycode 59 = símbolo de la tecla
-
- donde el "símbolo de la tecla" define la acción que realiza la
- combinación de teclas Ctrl-F1. La versión de Linux 1.2.* le permite
- una asignación dinámica de cadenas, excepto el nombre del "símbolo de
- la tecla" que es fijo. Se permite los "símbolos de teclas" entre
- F1 y F246. Para el fichero "my_keytable.map" de mi sistema la tecla
- F21 no tiene uso, pero vd. puede examinar mi fichero "my_keytable.map"
- y elegir un símbolo de tecla apropiado.
- Así, podemos colocar una línea al final con
-
- control keycode 59 = F21
-
- Ahora tendremos que definir el contenido de la tecla F21, añadiendo la
- línea
-
- string F21 = "/usr/local/bin/key_macro\n"
-
- Resumiendo, hemos realizado dos cambios en el fichero original
- "my_keytable.map": hemos declarado la nueva cadena F21, y hemos
- declarado que Ctrl-F1 puede ejecutar el contenido de F21.
-
-
- 4.1 Modificación temporal del inicio del teclado
-
- Una vez que tengamos modificado el fichero "my_keytable.map", podemos
- copiarlo, con los cambios realizados, al núcleo del driver del teclado,
- utilizando la utilidad loadkeys(1) :
-
- % loadkeys my_keytable.map
-
- El permiso para modificar el núcleo del driver del teclado se concede
- a todo el que tenga acceso de lectura en el dispositivo "/dev/console".
-
- Para verificar los cambios realizados, podemos utilizar la utilidad
- dumpkeys(1) para comprobar el valor de F21, por ejemplo
-
- % dumpkeys | grep F21
-
- Veremos en pantalla:
-
- keycode 59 = F1 F11 Console_13 F21
-
- string F21 = "/usr/local/bin/key_macro\012"
-
- lo que significa que todo está correcto (OK), debido a que "\012", ó LF,
- equivale a "\n".
-
- Ahora, pulsando "Ctrl-F1" se ejecutará la sentencia:
- "/usr/local/bin/key_macro"
-
-
- 4.2 Modificación permanente
-
- Los cambios efectuados en el núcleo del driver del teclado por la
- utilidad loadkeys(1) no serán efectivos hasta que no se vuelva a
- reinicializar el ordenador (ó la próxima vez que ejecute loadkeys).
-
- Podemos modificar el fichero /etc/rc.d/rc.local utilizando para ello
- loadkeys y le ponemos como argumento el fichero my_keytable.map.
- O en lugar de ello, modificamos el fichero
- src/linux/drivers/char/defkeymap.c
- y volvemos a linkar el núcleo con los nuevos valores.
-
- No debemos modificar manualmente el fichero defkeymap.c, sino generarlo
- con la utilidad loadkeys(1) :
-
- # mv defkeymap.c defkeymap.c.ORIG
- # loadkeys --mktable my_keytable.map > defkeymap.c
-
- Entonces debemos generar el nuevo kernel, esencialmente cambiándose
- al directorio raíz donde están los fuentes del núcleo de Linux, y
- después utilizar make(1).
-
- Finalmente, debemos utilizar lilo(1) para instalar y ejecutar nuestro
- nuevo núcleo.
-
-
- 5. Ejemplo de escritura de una macro
-
- Es muy útil una macro, ya que con una simple pulsación de teclas
- podemos ejecutar varios comandos, ó imprimir algo.
-
- Este ejemplo ha cambiado desde la versión 1.0 de Linux, debido a los
- cambios en el núcleo de Linux, que ya no proporciona el comando del
- sistema ioctl(0,TIOCLINUX).
-
- Para leer en la pantalla de la consola virtual, primero se deben
- preparar algunos ficheros de dispositivos. Como usuario "root"
- debemos crear los siguientes ficheros:
-
- # mknod /dev/vcs1 c 7 1
- # mknod /dev/vcs2 c 7 2
- ...
- # mknod /dev/vcs63 c 7 63
-
- Por supuesto, basta con tener sólo los ficheros específicos que
- tengamos en nuestra consola virtual que estemos utilizando.
-
- Las líneas que a continuación se leen son un ejemplo de un posible
- fichero /usr/local/bin/key_macro :
-
- #!/bin/sh
- #
- # Este es un ejemplo de lo útil que es la escritura de una macro
- #
-
- VT_NUMBER=`tty|cut -c9-`
- FILE=/tmp/vt$VT_NUMBER.dump
- cp /dev/vcs$VT_NUMBER $FILE
- echo SCREEN DUMP saved in $FILE
- #
- # La línea siguiente se utilizará si desea hacer un volcado a la
- # impresora
- # lpr $FILE
-
-
- 6. Comentarios
-
- No hay practicamente límite en la longitud de las cadenas que deseamos
- se carguen en el driver del teclado. La longitud del buffer en
- FUNC_BUFSIZE (fijada en 512 bytes), se ha reemplazado en la versión de
- Linux 1.2.* por una estratégica distribución dinámica del buffer ....
- en trozos de 512 bytes cada uno.
-
- La copia más reciente del documento Keystroke-HOWTO puede encontrarla
-
- ftp.netcom.com: /pub/ze/zenon/linux/howto
-
-
- 7. ¿ Más ideas ?
-
- En el caso de que vd. encuentre algo importante para añadir a este
- documento, por favor envie sus comentarios zenon@netcom.com --
- gracias.
-