.\" Copyright (c) 1995 Jim Van Zandt and aeb .\" Sun Feb 26 11:46:23 MET 1995 .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" Modified, Sun Feb 26 15:04:20 1995, faith@cs.unc.edu .\" Modified, Thu Apr 20 22:08:17 1995, jrv@vanzandt.mv.com .\" Modified, Mon Sep 18 22:32:47 1995, hpa@storm.net (H. Peter Anvin) .\" .\" Translated into Spanish Mon Mar 16 10:34:49 CET 1998 by Gerardo .\" Aburruzaga García .\" .\" Translation revised Sun Aug 16 1998 by Juan Piernas .\" Translation revised Wed Dec 30 1998 by Juan Piernas .\" .TH CONSOLE_IOCTLS 4 "18 septiembre 1995" "Linux" "Manual del Programador de Linux" .SH NOMBRE console ioctl \- ioctl's para la terminal de consola y consolas virtuales .SH DESCRIPCIÓN Se admiten las siguientes peticiones \fBioctl()\fP peculiares de Linux. Cada una requiere un tercer argumento, supuesto aquí como \fIargp\fP. .IP \fBKDGETLED\fP Obtiene estado de los LEDs. \fIargp\fP apunta a un long int. Los 3 bits más bajos de \fI*argp\fP se ponen según el estado de los LEDs, como sigue: LED_CAP 0x04 LED Bloq. Mayús LEC_NUM 0x02 LED Bloq. Num LED_SCR 0x01 LED Bloq. Despl .IP \fBKDSETLED\fP Enciende los LEDs. Los LEDs se encienden según los 3 bits más bajos de \fIargp\fP. Sin embargo, si se pone un bit de más alto orden, los LEDs se ponen a su funcionamiento normal: mostrar el estado de las funciones del teclado: bloqueo de mayúsculas, de teclado auxiliar numérico y de desplazamiento. .LP Antes de 1.1.54, los LEDs simplemente reflejaban el estado de las correspondientes señales del teclado, y KDGETLED/KDSETLED tamibén cambiaban las señales del teclado. Desde 1.1.54, los LEDs pueden mostrar información arbitraria, pero por omisión muestran las señales del teclado. Las 2 siguientes llamadas a ioctl se usan para acceder a las señales del teclado. .IP \fBKDGKBLED\fP Obtiene las señales del teclado Bloq.Mayús, BloqNum, BloqDespl (no las luces). \fIargp\fP apunta a un char que se pone con el estado de la señal. Los 3 bits de más bajo orden (máscara 0x7) obtienen el estado de la señal actual, y los bits de más bajo orden de la siguiente cuarteta (máscara 0x70) obtienen el estado de la señal predeterminado. (Desde 1.1.54.) .IP \fBKDSKBLED\fP Pone las señales del teclado Bloq.Mayús, BloqNum, BloqDespl (no las luces). \fIargp\fP tiene el estado de la señal deseado. Los 3 bits de más bajo orden (máscara 0x7) tienen el estado de la señal, y los bits de más bajo orden de la siguiente cuarteta (máscara 0x70) tienen el estado de la señal predeterminado. (Desde 1.1.54.) .IP \fBKDGKBTYPE\fP Obtiene el tipo de teclado. Esto devuelve el valor KB_101, definido como 0x02. .IP \fBKDADDIO\fP Añade puerto de E/S como válido. Equivale a ioperm(arg,1,1). .IP \fBKDDELIO\fP Quita puerto de E/S como válido. Equivale a ioperm(arg,1,0). .IP \fBKDENABIO\fP Habilita E/S a la tarjeta de vídeo. Equivale a ioperm(0x3b4, 0x3df-0x3b4+1, 1). .IP \fBKDDISABIO\fP Inhabilita la E/S a la tarjeta de vídeo. Equivale a ioperm(0x3b4, 0x3df-0x3b4+1, 0). .IP \fBKDSETMODE\fP Pone el modo de texto o gráfico. \fIargp\fP es uno de éstos: KD_TEXT 0x00 KD_GRAPHICS 0x01 .IP \fBKDGETMODE\fP Obtiene el modo de texto o gráfico. \fIargp\fP apunta a un long int que se pone a uno de los valores de arriba. .IP \fBKDMKTONE\fP Genera un tono de la longitud especificada. Los 16 bits más bajos de \fIargp\fP especifican el periodo en ciclos de reloj, y los 16 bits más altos dan la duración en ms. Si la duración es 0, el sonido se apaga. Se devuelve el control inmediatamente. Por ejemplo, \fIargp\fP = (125<<16) + 0x637 especificaría el pitido asociado normalmente con un Ctrl-G. (Este modo de funcionamiento desde 0.99pl1; infringido en 2.1.49-50.) .IP \fBKIOCSOUND\fP Empieza o para la generación de sonido. Los 16 b más bajos de \fIargp\fP especifican el periodo en ciclos de reloj (esto es, \fIargp\fP = 1193180÷frecuencia). \fIargp\fP = 0 apaga el sonido. En cualquier caso, se devuelve el control inmediatamente. .IP \fBGIO_CMAP\fP Obtiene el mapa de colores predeterminado actual del núcleo. \fIargp\fP apunta a un vector de 48 bytes. (Desde 1.3.3.) .IP \fBPIO_CMAP\fP Cambia el mapa de colores predeterminado en modo texto. \fIargp\fP apunta a un vector de 48 B que contiene, en orden, los valores de Rojo, Verde y Azul para los 16 colores de la pantalla sisponibles: 0 es apagado, y 255 es intensidad completa. Los colores predeterminados son, en orden, negro, rojo oscuro, verde oscuro, marrón, azul oscuro, púrpura oscuro, celeste oscuro, gris claro, gris oscuro, rojo brillante, verde brillante, amarillo, azul brillante, púrpura brillante, celeste brillante y blanco. (Desde 1.3.3.) .IP \fBGIO_FONT\fP Obtiene el tipo de letra de pantalla de 256 caracteres en forma expandida. \fIargp\fP apunta a un vector de 8192 B. Falla con el código de error \fBEINVAL\fP si el tipo cargado actualmente es uno de 512 caracteres, o si la consola no está en modo texto. .IP \fBGIO_FONTX\fP Obtiene el tipo de letra de la pantalla e información asociada. \fIargp\fP apunta a una struct consolefontdesc (vea \fBPIO_FONTX\fP). En el momento de la llamada, el campo \fIcharcount\fP debería estar puesto con el máximo número de caracteres que cupieran en el búfer apuntado por \fIchardata\fP. Al regresar, los campos \fIcharcount\fP y \fIcharheight\fP se llenan con los datos respectivos para el tipo cargado actualmente, y el vector \fIchardata\fP contiene los datos del tipo si el valor inicial de \fIcharcount\fP indicaba que había espacio suficiente disponible; de otra forma, el búfer queda intacto y en \fIerrno\fP se pone el valor \fBENOMEM\fP. (Desde 1.3.1.) .IP \fBPIO_FONT\fP Establece el tipo de letra de pantalla de 256 caracteres. Carga el tipo en el generador de caracteres EGA/VGA. \fIargp\fP apunta a un mapa de 8192 bytes, con 32 bytes por carácter. Sólo los primeros \fIN\fP de ellos se emplean para un tipo de 8×\fIN\fP (0 < \fIN\fP <= 32). Esta llamada también invalida la asociación Unicode. .IP \fBPIO_FONTX\fP Establece el tipo de pantalla e información asociada de atributos de vídeo. \fIargp\fP apunta a una .nf struct consolefontdesc { u_short \fIcharcount\fP; /* caracteres en el tipo (256 ó 512) */ u_short \fIcharheight\fP; /* líneas de rastreo por carácter (1-32) */ char *\fIchardata\fP; /* datos de tipo en forma expandida */ }; .fi Si es necesario, la pantalla se redimensionará apropiadamente, y se enviará \fBSIGWINCH\fP a los procesos apropiados. Esta llamada también invalida la asociación Unicode. (Desde 1.3.1.) .IP \fBPIO_FONTRESET\fP Restaura el tipo de letra de pantalla, el tamaño y la asociación Unicode a los valores predeterminados en el arranque. No se usa \fIargp\fP, pero debe igualarse a \fBNULL\fP para asegurar la compatibilidad con versiones futuras de Linux. (Desde 1.3.28.) .IP \fBGIO_SCRNMAP\fP Obtiene del núcleo la asociación de pantalla. \fIargp\fP apunta a un área de tamaño E_TABSZ, que se carga en las posiciones del tipo usadas para mostrar cada carácter. Esta llamada más bien devuelve información inútil si el tipo de letra cargado en la actualidad es de más de 256 caracteres. .IP \fBGIO_UNISCRNMAP\fP Obtiene del núcleo la asociación de pantalla completa Unicode. \fIargp\fP apunta a un área de tamaño E_TABSZ*sizeof(unsigned short), que se carga con los Unicodes que representan cada carácter. Se usa un conjunto especial de Unicodes, empezando por U+F000, para representar asociaciones ``directas al tipo''. (Desde 1.3.1.) .IP \fBPIO_SCRNMAP\fP Carga la (4ª) tabla ``definible por el usuario'' en el núcleo, que asocia bytes con símbolos de pantalla de la consola. \fIargp\fP apunta a un área de tamaño E_TABSZ. .IP \fBPIO_UNISCRNMAP\fP Carga en el núcleo la (4ª) tabla ``definible por el usuario'', que asocia bytes con Unicodes, que luego se traducen a símbolos de la pantalla según el mapa cargado en la actualidad Unicode-a-tipo. Los Unicodes especiales que empiezan en U+F000 se pueden usar para asociar directamente a los símbolos del tipo. (Desde 1.3.1.) .IP \fBGIO_UNIMAP\fP Obtiene del núcleo la asocación Unicode-a-tipo. \fIargp\fP apunta a una .nf struct unimapdesc { u_short \fIentry_ct\fP; struct unipair *\fIentries\fP; }; .fi donde \fIentries\fP apunta a un vector de .nf struct unipair { u_short \fIunicode\fP; u_short \fIfontpos\fP; }; .fi (Desde 1.1.92.) .IP \fBPIO_UNIMAP\fP Poner la asociación Unicode-a-tipo en el núcleo. \fIargp\fP apunta a una struct unimapdesc. (Desde 1.1.92) .IP \fBPIO_UNIMAPCLR\fP Limpia la tabla, posiblemente informa al algoritmo de hash. \fIargp\fP apunta a una .nf struct unimapinit { u_short \fIadvised_hashsize\fP; /* 0 si no opinión */ u_short \fIadvised_hashstep\fP; /* 0 si no opinión */ u_short \fIadvised_hashlevel\fP; /* 0 si no opinión */ }; .fi (Desde 1.1.92.) .IP \fBKDGKBMODE\fP Obtiene el modo de teclado en curso. \fIargp\fP apunta a un long int que toma una de estos valores: K_RAW 0x00 K_XLATE 0x01 K_MEDIUMRAW 0x02 K_UNICODE 0x03 .IP \fBKDSKBMODE\fP Establece el modo de teclado actual. \fIargp\fP es un long int igual a uno de los valores de antes. .IP \fBKDGKBMETA\fP Obtiene el modo de manejo de la tecla META. \fIargp\fP apunta a un long int que se pone con uno de estos valores: K_METABIT 0x03 pone a 1 el bit de más alto orden K_ESCPREFIX 0x04 prefijo de ESCAPE .IP \fBKDSKBMETA\fP Establece el modo de manejo de la tecla META. \fIargp\fP es un long int igual a uno de los valores anteriores. .IP \fBKDGKBENT\fP Obtiene una entrada de la tabla de traducción de teclas (código de tecla a coigo de acción). \fIargp\fP apunta a una .nf struct kbentry { u_char \fIkb_table\fP; u_char \fIkb_index\fP; u_short \fIkb_value\fP; }; .fi con los primeros dos miembros llenos: \fIkb_table\fP selecciona la tabla de teclas (0 <= \fIkb_table\fP < MAX_NR_KEYMAPS), y \fIkb_index\fP es el código de tecla (0 <= \fIkb_index\fP < NR_KEYS). \fIkb_value\fP se pone al código de acción correspondiente, o K_HOLE si no hay tal tecla, o K_NOSUCHMAP si \fIkb_table\fP es inválido. .IP \fBKDSKBENT\fP Establece una entrada en la tabla de traducción. \fIargp\fP apunta a una struct kbentry. .IP \fBKDGKBSENT\fP Obtiene una cadena de tecla de función. \fIargp\fP apunta a una .nf struct kbsentry { u_char \fIkb_func\fP; u_char \fIkb_string\fP[512]; }; .fi \fIkb_string\fP es pone a la cadena (terminada en cero) correspondiente al código de acción de la tecla de función \fIkb_func\fP\-sima. .IP \fBKDSKBSENT\fP Establece una entrada de cadena de tecla de función. \fIargp\fP apunta a una struct kbsentry. .IP \fBKDGKBDIACR\fP Lee la tabla de acentos del núcleo. \fIargp\fP apunta a una .nf struct kbdiacrs { unsigned int \fIkb_cnt\fP; struct kbdiacr \fIkbdiacr\fP[256]; }; .fi donde \fIkb_cnt\fP es el número de entradas en el vector, cada una siendo una struct kbdiacr { u_char \fIdiacr\fP, \fIbase\fP, \fIresult\fP; }; .IP \fBKDGETKEYCODE\fP Lee una entrada de la tabla de códigos de teclas del núcleo (código de rastreo a código de tecla). \fIargp\fP apunta a una .nf struct kbkeycode { unsigned int \fIscancode\fP, \fIkeycode\fP; }; .fi \fIkeycode\fP se pone a un valor correspondiente al \fIscancode\fP dado. (89 <= \fIscancode\fP <= 255 solamente. Para 1 <= \fIscancode\fP <= 88, \fIkeycode\fP==\fIscancode\fP.) (Desde 1.1.63.) .IP \fBKDSETKEYCODE\fP Escribe una entrada de tabla de códigos de teclas del núcleo. \fIargp\fP apunta a una struct kbkeycode. (Desde 1.1.63.) .IP \fBKDSIGACCEPT\fP El proceso que hace la llamada indica su voluntad de aceptar la señal \fIargp\fP cuando se genere por la pulsación de una combinación de teclas apropiada. (1 <= \fIargp\fP <= NSIG). (Vea spawn_console() en linux/drivers/char/keyboard.c.) .IP \fBVT_OPENQRY\fP Devuelve la primera consola disponible (no abierta). \fIargp\fP apunta a un int que se pone al número de la vt (1 <= \fI*argp\fP <= MAX_NR_CONSOLES). .IP \fBVT_GETMODE\fP Obtiene el modo de la vt activa. \fIargp\fP apunta a una .nf struct vt_mode { char \fImode\fP; /* modo de la vt */ char \fIwaitv\fP; /* si puesto, se cuelga en escrituras si no activa */ short \fIrelsig\fP; /* señal a lanzar en petición de liberación */ short \fIacqsig\fP; /* señal a lanzar en adquisición */ short \fIfrsig\fP; /* sin uso (a 0) */ }; .fi ... que se pone al modo de la vt activa. \fImode\fP se pone a uno de estos valores: VT_AUTO cambio de vt automático VT_PROCESS cambio de controles de proceso VT_ACKACQ cambio de confirmación .IP \fBVT_SETMODE\fP Establece el modo de la vt activa. \fIargp\fP apunta a una struct vt_mode. .IP \fBVT_GETSTATE\fP Obtiene información de estado global de vt. \fIargp\fP apunta a una .nf struct vt_stat { ushort \fIv_active\fP; /* vt activa */ ushort \fIv_signal\fP; /* señal a enviar */ ushort \fIv_state\fP; /* máscara de bits de la vt */ }; .fi Para cada vt en uso, el bit correspondiente en el miembro \fIv_state\fP se pone a 1. (Núcleos 1.0 a 1.1.92.) .IP \fBVT_RELDISP\fP Libera una pantalla. .IP \fBVT_ACTIVATE\fP Cambia a la vt \fIargp\fP (1 <= \fIargp\fP <= MAX_NR_CONSOLES). .IP \fBVT_WAITACTIVE\fP Espera hasta que la vt \fIargp\fP ha sido activada. .IP \fBVT_DISALLOCATE\fP Desaloja la memoria asociada con la vt \fIargp\fP. (Desde 1.1.54.) .IP \fBVT_RESIZE\fP Establece la idea que tiene el núcleo del tamaño de pantalla. \fIargp\fP apunta a una .nf struct vt_sizes { ushort \fIv_rows\fP; /* Nº de filas */ ushort \fIv_cols\fP; /* Nº de columnas */ ushort \fIv_scrollsize\fP; /* ya no se usa */ }; .fi Note que esto no cambia el modo de vídeo. Vea resizecons(8). (Desde 1.1.54.) .IP \fBVT_RESIZEX\fP Establece la idea que tiene el núcleo sobre varios parámetros de pantalla. \fIargp\fP apunta a una .nf struct vt_consize { ushort \fIv_rows\fP; /* número de filas */ ushort \fIv_cols\fP; /* número de columnas */ ushort \fIv_vlin\fP; /* Nº de filas de píxeles en la pantalla */ ushort \fIv_clin\fP; /* Nº de filas de píxeles por carácter */ ushort \fIv_vcol\fP; /* Nº de cols. de píxeles en la pantalla */ ushort \fIv_ccol\fP; /* Nº de cols. de píxeles por carácter */ }; .fi Cualquier parámetro puede ponerse a cero, indicando ``no hay cambio'', pero si se ponen varios parámetros, deben ser auto-consistentes. Note que esto no cambia el modo de vídeo. Vea resizecons(8). (Desde 1.3.3.) .PP La acción de las siguientes ioctls depende del primer byte en la struct apuntada por \fIargp\fP, referido aquí como el \fIsub-código\fP. Éstos son legales sólo para el súper-usuario o el propietario de la tty actual. .IP "\fBTIOCLINUX, sub-código=0\fP" Vuelca la pantalla. Desapareció en 1.1.92. (Con el núcleo 1.1.92 o superior, lee de /dev/vcsN o /dev/vcsaN en su lugar.) .IP "\fBTIOCLINUX, sub-código=1\fP" Obtiene información de tarea. Desapareció en 1.1.92. .IP "\fBTIOCLINUX, sub-código=2\fP" Establece selección. \fIargp\fP apunta a una struct {char \fIsubcode\fP; short \fIxs\fP, \fIys\fP, \fIxe\fP, \fIye\fP; short \fIsel_mode\fP; } \fIxs\fP e \fIys\fP son las columna y fila de comienzo. \fIxe\fP e \fIye\fP son la columna y fila de final. (La esquina superior izquierda es file=columna=1.) \fIsel_mode\fP es 0 para selección carácter a carácter, 1 para selección palabra a palabra, ó 2 para selección línea a línea. Los caracteres de pantalla indicados se resaltan y salvan en el vector estático sel_buffer en devices/char/console.c. .IP "\fBTIOCLINUX, sub-código=3\fP" Selección de pegado. Los caracteres en el búfer de selección se escriben a \fIfd\fP. .IP "\fBTIOCLINUX, sub-código=4\fP" Desblanquea la pantalla. .IP "\fBTIOCLINUX, sub-código=5\fP" Establece los contenidos de una tabla de búsqueda de 256 b que define caracteres en una "palabra", para la selección palabra a palabra. (Desde 1.1.32.) .IP "\fBTIOCLINUX, sub-código=6\fP" \fIargp\fP apunta a un char que se pone con el valor de la variable del núcleo \fIshift_state\fP. (Desde 1.1.32.) .IP "\fBTIOCLINUX, sub-código=7\fP" \fIargp\fP apunta a un char que se pone al valor de la variable del núcleo \fIreport_mouse\fP. (Desde 1.1.33.) .IP "\fBTIOCLINUX, sub-código=8\fP" Vuelca la anchura y altura de la pantalla, posición de cursor, y todos los pares carácter-atributo. (Núcleos 1.1.67 a 1.1.91 solamente. Con el núcleo 1.1.92 ó posterior, lee de /dev/vcsa* en su lugar.) .IP "\fBTIOCLINUX, sub-código=9\fP" Restaura la anchura y altura de la pantalla, posición de cursor, y todos los pares carácter-atributo. (Núcleos 1.1.67 a 1.1.91 solamente. Con el núcleo 1.1.92 ó posterior, escribe en /dev/vcsa* en su lugar.) .IP "\fBTIOCLINUX, sub-código=10\fP" Maneja la característica de Ahorro de Energía de la nueva generación de monitores. El modo de blanqueo de pantalla VESA se pone a \fIargp\fP[1], que gobierna lo que hace el blanqueo de pantalla: \fI0\fP: El blanqueo de pantalla es deshabilitado. \fI1\fP: Se guardan los valores de los registros del adaptador de vídeo instalado, luego se programa el controlador para apagar los pulsos de sincronización vertical. Esto pone el monitor en el estado de "modo de espera". Si su monitor tiene un temporizador Off_Mode, entonces eventualmente se apagará solo. \fI2\fP: Se salvan los valores actuales, luego se apagan los pulsos de sincronización vertical y horizontal. Esto pone el monitor en modo de "apagado". Si su monitor no tiene el temporizador Off_Mode, o si Ud. quiere que su monitor se apague inmediatamente cuando el tiempo del blank_timer pase, entonces debe escoger esta opción. (\fIPrecaución::\fP Apagar frecuentemente dañará el monitor.) (Desde 1.1.76.) .SH "VALOR DEVUELTO" En caso de éxito se devuelve 0. En caso de error se devuelve \-1 y \fIerrno\fP toma un valor. .SH ERRORES \fIerrno\fP puede tomar uno de estos valores: .TP .B EBADF el descriptor de fichero es inválido. .TP .B ENOTTY el descriptor de fichero no está asociado con un dispositivo especial de caracteres, o la petición especificada no se aplica a él. .TP .B EINVAL el descriptor de fichero o \fIargp\fP es inválido. .TP .B EPERM violación de permiso. .SH ATENCIÓN No mire esta página del Manual como documentación sobre las ioctl's de la consola de Linux. Esta página sólo se proporciona para el curioso, como una alternativa a leer los fuentes. Las ioctl's son cosas internas de Linux indocumentadas, sujetas a cambios sin previo aviso. (Y desde luego, esta página describe más o menos la situación en los tiempos del núcleo versión 1.1.94; hay muchas diferencias menores y no tan menores con versiones anteriores.) Muy a menudo, las ioctl's se introducen para comunicación entre el núcleo y un programa particular bien conocido (fdisk, hdparm, setserial, tunelp, loadkeys, selection, setfont, etc.), y su comportamiento cambiará cuando se requiera por este programa particular. Los programas que usen estas ioctl's no serán transportables a otras versiones de Unix, no funcionarán en versiones más antiguas de Linux, y no funcionarán en versiones futuras de Linux. Use funciones POSIX. .SH "VÉASE TAMBIÉN" .BR kbd_mode (1), .BR loadkeys (1), .BR dumpkeys (1), .BR mknod (1), .BR setleds (1), .BR setmetamode (1), .BR ioperm (2), .BR execve (2), .BR fcntl (2), .BR termios (3), .BR console (4), .BR console_codes (4), .BR mt (4), .BR sd (4), .BR tty (4), .BR ttys (4), .BR tty_ioctl (4), .BR vcs (4), .BR vcsa (4), .BR charsets (7), .BR mapscrn (8), .BR setfont (8), .BR resizecons (8), .IR /usr/include/linux/kd.h , .I /usr/include/linux/vt.h