diff options
Diffstat (limited to 'man4/console_ioctl.4')
-rw-r--r-- | man4/console_ioctl.4 | 570 |
1 files changed, 570 insertions, 0 deletions
diff --git a/man4/console_ioctl.4 b/man4/console_ioctl.4 new file mode 100644 index 000000000..640343e5e --- /dev/null +++ b/man4/console_ioctl.4 @@ -0,0 +1,570 @@ +.\" Copyright (c) 1995 Jim Van Zandt <jrv@vanzandt.mv.com> 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) +.\" " +.TH CONSOLE_IOCTLS 4 1995-09-18 "Linux" "Linux Programmer's Manual" +.SH NAME +console ioctl \- ioctl's for console terminal and virtual consoles +.SH DESCRIPTION +The following Linux-peculiar \fBioctl()\fP requests are supported. +Each requires a third argument, assumed here to be \fIargp\fP. +.IP \fBKDGETLED\fP +Get state of LEDs. \fIargp\fP points to a long int. The lower three bits +of \fI*argp\fP are set to the state of the LEDs, as follows: + + LED_CAP 0x04 caps lock led + LEC_NUM 0x02 num lock led + LED_SCR 0x01 scroll lock led + +.IP \fBKDSETLED\fP +Set the LEDs. The LEDs are set to correspond to the lower three bits of +\fIargp\fP. However, if a higher order bit is set, +the LEDs revert to normal: displaying the state of the +keyboard functions of caps lock, num lock, and scroll lock. +.LP +Before 1.1.54, the LEDs just reflected the state of the corresponding +keyboard flags, and KDGETLED/KDSETLED would also change the keyboard +flags. Since 1.1.54 the leds can be made to display arbitrary +information, but by default they display the keyboard flags. +The following two ioctl's are used to access the keyboard flags. + +.IP \fBKDGKBLED\fP +Get keyboard flags CapsLock, NumLock, ScrollLock (not lights). +\fIargp\fP points to a char which is set to the flag state. +The low order three bits (mask 0x7) get the current flag state, +and the low order bits of the next nibble (mask 0x70) get +the default flag state. (Since 1.1.54.) + +.IP \fBKDSKBLED\fP +Set keyboard flags CapsLock, NumLock, ScrollLock (not lights). +\fIargp\fP has the desired flag state. +The low order three bits (mask 0x7) have the flag state, +and the low order bits of the next nibble (mask 0x70) have +the default flag state. (Since 1.1.54.) + +.IP \fBKDGKBTYPE\fP +Get keyboard type. This returns the value KB_101, defined as 0x02. + +.IP \fBKDADDIO\fP +Add I/O port as valid. Equivalent to ioperm(arg,1,1). + +.IP \fBKDDELIO\fP +Delete I/O port as valid. Equivalent to ioperm(arg,1,0). + +.IP \fBKDENABIO\fP +Enable I/O to video board. Equivalent to ioperm(0x3b4, 0x3df-0x3b4+1, 1). + +.IP \fBKDDISABIO\fP +Disable I/O to video board. Equivalent to ioperm(0x3b4, 0x3df-0x3b4+1, 0). + +.IP \fBKDSETMODE\fP +Set text/graphics mode. \fIargp\fP is one of these: + + KD_TEXT 0x00 + KD_GRAPHICS 0x01 + +.IP \fBKDGETMODE\fP +Get text/graphics mode. \fIargp\fP points to a long which is set to one +of the above values. + +.IP \fBKDMKTONE\fP +Generate tone of specified length. +The lower 16 bits of \fIargp\fP specify the period in clock cycles, +and the upper 16 bits give the duration in msec. +If the duration is zero, the sound is turned off. +Control returns immediately. +For example, \fIargp\fP = (125<<16) + 0x637 would specify +the beep normally associated with a ctrl-G. +(Thus since 0.99pl1; broken in 2.1.49-50.) + +.IP \fBKIOCSOUND\fP +Start or stop sound generation. The lower 16 bits of +\fIargp\fP specify the period in clock cycles +(that is, \fIargp\fP = 1193180/frequency). +\fIargp\fP = 0 turns sound off. +In either case, control returns immediately. + +.IP \fBGIO_CMAP\fP +Get the current default colour map from kernel. \fIargp\fP points to +a 48-byte array. (Since 1.3.3.) + +.IP \fBPIO_CMAP\fP +Change the default text-mode colour map. \fIargp\fP points to a +48-byte array which contains, in order, the Red, Green, and Blue +values for the 16 available screen colours: 0 is off, and 255 is full +intensity. The default colours are, in order: black, dark red, dark +green, brown, dark blue, dark purple, dark cyan, light grey, dark +grey, bright red, bright green, yellow, bright blue, bright purple, +bright cyan and white. (Since 1.3.3.) + +.IP \fBGIO_FONT\fP +Gets 256-character screen font in expanded form. \fIargp\fP points to +an 8192 byte array. Fails with error code \fBEINVAL\fP if the +currently loaded font is a 512-character font, or if the console is +not in text mode. + +.IP \fBGIO_FONTX\fP +Gets screen font and associated information. \fIargp\fP points to a +struct consolefontdesc (see \fBPIO_FONTX\fP). On call, the +\fIcharcount\fP field should be set to the maximum number of +characters that would fit in the buffer pointed to by \fIchardata\fP. +On return, the \fIcharcount\fP and \fIcharheight\fP are filled with +the respective data for the currently loaded font, and the +\fIchardata\fP array contains the font data if the initial value of +\fIcharcount\fP indicated enough space was available; otherwise the +buffer is untouched and \fIerrno\fP is set to \fBENOMEM\fP. (Since +1.3.1.) + +.IP \fBPIO_FONT\fP +Sets 256-character screen font. Load font into the EGA/VGA character +generator. \fIargp\fP points to a 8192 byte map, with 32 bytes per +character. Only first \fIN\fP of them are used for an 8x\fIN\fP font +(0 < \fIN\fP <= 32). This call also invalidates the Unicode mapping. + +.IP \fBPIO_FONTX\fP +Sets screen font and associated rendering information. \fIargp\fP +points to a + +.nf +struct consolefontdesc { + u_short \fIcharcount\fP; /* characters in font (256 or 512) */ + u_short \fIcharheight\fP; /* scan lines per character (1-32) */ + char *\fIchardata\fP; /* font data in expanded form */ +}; +.fi + +If necessary, the screen will be appropriately resized, and +\fBSIGWINCH\fP sent to the appropriate processes. This call also +invalidates the Unicode mapping. (Since 1.3.1.) + +.IP \fBPIO_FONTRESET\fP +Resets the screen font, size and Unicode mapping to the bootup +defaults. \fIargp\fP is unused, but should be set to \fBNULL\fP to +ensure compatibility with future versions of Linux. (Since 1.3.28.) + +.IP \fBGIO_SCRNMAP\fP +Get screen mapping from kernel. \fIargp\fP points to an area of size +E_TABSZ, which is loaded with the font positions used to display each +character. This call is likely to return useless information if the +currently loaded font is more than 256 characters. + +.IP \fBGIO_UNISCRNMAP\fP +Get full Unicode screen mapping from kernel. \fIargp\fP points to an +area of size E_TABSZ*sizeof(unsigned short), which is loaded with the +Unicodes each character represent. A special set of Unicodes, +starting at U+F000, are used to represent ``direct to font'' mappings. +(Since 1.3.1.) + +.IP \fBPIO_SCRNMAP\fP +Loads the ``user definable'' (fourth) table in the kernel which maps +bytes into console screen symbols. \fIargp\fP points to an area of +size E_TABSZ. + +.IP \fBPIO_UNISCRNMAP\fP +Loads the ``user definable'' (fourth) table in the kernel which maps +bytes into Unicodes, which are then translated into screen symbols +according to the currently loaded Unicode-to-font map. Special +Unicodes starting at U+F000 can be used to map directly to the font +symbols. (Since 1.3.1.) + +.IP \fBGIO_UNIMAP\fP +Get Unicode-to-font mapping from kernel. \fIargp\fP points to a + +.nf +struct unimapdesc { + u_short \fIentry_ct\fP; + struct unipair *\fIentries\fP; +}; +.fi + +where \fIentries\fP points to an array of + +.nf +struct unipair { + u_short \fIunicode\fP; + u_short \fIfontpos\fP; +}; +.fi + +(Since 1.1.92.) + +.IP \fBPIO_UNIMAP\fP +Put unicode-to-font mapping in kernel. \fIargp\fP points to a +struct unimapdesc. (Since 1.1.92) + +.IP \fBPIO_UNIMAPCLR\fP +Clear table, possibly advise hash algorithm. \fIargp\fP points to a + +.nf +struct unimapinit { + u_short \fIadvised_hashsize\fP; /* 0 if no opinion */ + u_short \fIadvised_hashstep\fP; /* 0 if no opinion */ + u_short \fIadvised_hashlevel\fP; /* 0 if no opinion */ +}; +.fi + +(Since 1.1.92.) + +.IP \fBKDGKBMODE\fP +Gets current keyboard mode. \fIargp\fP points to a long which is set to one +of these: + + K_RAW 0x00 + K_XLATE 0x01 + K_MEDIUMRAW 0x02 + K_UNICODE 0x03 + +.IP \fBKDSKBMODE\fP +Sets current keyboard mode. +\fIargp\fP is a long equal to one of the above values. + +.IP \fBKDGKBMETA\fP +Gets meta key handling mode. \fIargp\fP points to a long which is +set to one of these: + + K_METABIT 0x03 set high order bit + K_ESCPREFIX 0x04 escape prefix + +.IP \fBKDSKBMETA\fP +Sets meta key handling mode. +\fIargp\fP is a long equal to one of the above values. + +.IP \fBKDGKBENT\fP +Gets one entry in key translation table (keycode to action code). +\fIargp\fP points to a + +.nf +struct kbentry { + u_char \fIkb_table\fP; + u_char \fIkb_index\fP; + u_short \fIkb_value\fP; +}; +.fi + +with the first two members filled in: +\fIkb_table\fP selects the key table (0 <= \fIkb_table\fP < MAX_NR_KEYMAPS), +and \fIkb_index\fP is the keycode (0 <= \fIkb_index\fP < NR_KEYS). +\fIkb_value\fP is set to the corresponding action code, +or K_HOLE if there is no such key, +or K_NOSUCHMAP if \fIkb_table\fP is invalid. + +.IP \fBKDSKBENT\fP +Sets one entry in translation table. \fIargp\fP points to a struct kbentry. + +.IP \fBKDGKBSENT\fP +Gets one function key string. \fIargp\fP points to a + +.nf +struct kbsentry { + u_char \fIkb_func\fP; + u_char \fIkb_string\fP[512]; +}; +.fi + +\fIkb_string\fP is set to the (NULL terminated) string corresponding to +the \fIkb_func\fPth function key action code. + +.IP \fBKDSKBSENT\fP +Sets one function key string entry. \fIargp\fP points to a struct kbsentry. + +.IP \fBKDGKBDIACR\fP +Read kernel accent table. \fIargp\fP points to a + +.nf +struct kbdiacrs { + unsigned int \fIkb_cnt\fP; + struct kbdiacr \fIkbdiacr\fP[256]; +}; +.fi + +where \fIkb_cnt\fP is the number of entries in the array, each of which +is a + +struct kbdiacr { u_char \fIdiacr\fP, \fIbase\fP, \fIresult\fP; +}; + +.IP \fBKDGETKEYCODE\fP +Read kernel keycode table entry (scan code to keycode). +\fIargp\fP points to a + +.nf +struct kbkeycode { unsigned int \fIscancode\fP, \fIkeycode\fP; }; +.fi + +\fIkeycode\fP is set to correspond to the given \fIscancode\fP. +(89 <= \fIscancode\fP <= 255 only. +For 1 <= \fIscancode\fP <= 88, \fIkeycode\fP==\fIscancode\fP.) +(Since 1.1.63.) + +.IP \fBKDSETKEYCODE\fP +Write kernel keycode table entry. \fIargp\fP points to struct kbkeycode. +(Since 1.1.63.) + +.IP \fBKDSIGACCEPT\fP +The calling process indicates its willingness to accept the signal +\fIargp\fP when it is generated by pressing an appropriate key combination. +(1 <= \fIargp\fP <= NSIG). +(See spawn_console() in linux/drivers/char/keyboard.c.) + +.IP \fBVT_OPENQRY\fP +Returns the first available (non-opened) console. +\fIargp\fP points to an int which is set to the +number of the vt (1 <= \fI*argp\fP <= MAX_NR_CONSOLES). + +.IP \fBVT_GETMODE\fP +Get mode of active vt. \fIargp\fP points to a + +.nf +struct vt_mode { + char \fImode\fP; /* vt mode */ + char \fIwaitv\fP; /* if set, hang on writes if not active */ + short \fIrelsig\fP; /* signal to raise on release req */ + short \fIacqsig\fP; /* signal to raise on acquisition */ + short \fIfrsig\fP; /* unused (set to 0) */ +}; +.fi + +\&...which is set to the mode of the active vt. +\fImode\fP is set to one of these values: + + VT_AUTO auto vt switching + VT_PROCESS process controls switching + VT_ACKACQ acknowledge switch + +.IP \fBVT_SETMODE\fP +Set mode of active vt. \fIargp\fP points to a struct vt_mode. + +.IP \fBVT_GETSTATE\fP +Get global vt state info. \fIargp\fP points to a + +.nf +struct vt_stat { + ushort \fIv_active\fP; /* active vt */ + ushort \fIv_signal\fP; /* signal to send */ + ushort \fIv_state\fP; /* vt bitmask */ +}; +.fi + +For each vt in use, the corresponding bit in the \fIv_state\fP member is set. +(Kernels 1.0 through 1.1.92.) + +.IP \fBVT_RELDISP\fP +Release a display. + +.IP \fBVT_ACTIVATE\fP +Switch to vt \fIargp\fP (1 <= \fIargp\fP <= MAX_NR_CONSOLES). + +.IP \fBVT_WAITACTIVE\fP +Wait until vt \fIargp\fP has been activated. + +.IP \fBVT_DISALLOCATE\fP +Deallocate the memory associated with vt \fIargp\fP. +(Since 1.1.54.) + +.IP \fBVT_RESIZE\fP +Set the kernel's idea of screensize. \fIargp\fP points to a + +.nf +struct vt_sizes { + ushort \fIv_rows\fP; /* # rows */ + ushort \fIv_cols\fP; /* # columns */ + ushort \fIv_scrollsize\fP; /* no longer used */ +}; +.fi + +Note that this does not change the videomode. +See resizecons(8). (Since 1.1.54.) + +.IP \fBVT_RESIZEX\fP +Set the kernel's idea of various screen parameters. \fIargp\fP +points to a + +.nf +struct vt_consize { + ushort \fIv_rows\fP; /* number of rows */ + ushort \fIv_cols\fP; /* number of columns */ + ushort \fIv_vlin\fP; /* number of pixel rows on screen */ + ushort \fIv_clin\fP; /* number of pixel rows per character */ + ushort \fIv_vcol\fP; /* number of pixel columns on screen */ + ushort \fIv_ccol\fP; /* number of pixel columns per character */ +}; +.fi + +Any parameter may be set to zero, indicating ``no change'', but if +multiple parameters are set, they must be self-consistent. Note that +this does not change the videomode. See resizecons(8). (Since 1.3.3.) + +.PP +The action of the following ioctls depends on the first byte in the struct +pointed to by \fIargp\fP, referred to here as the \fIsubcode\fP. +These are legal only for the superuser or the owner of the current tty. +.IP "\fBTIOCLINUX, subcode=0\fP" +Dump the screen. +Disappeared in 1.1.92. (With kernel 1.1.92 or later, read from +/dev/vcsN or /dev/vcsaN instead.) + +.IP "\fBTIOCLINUX, subcode=1\fP" +Get task information. Disappeared in 1.1.92. + +.IP "\fBTIOCLINUX, subcode=2\fP" +Set selection. +\fIargp\fP points to a + + struct {char \fIsubcode\fP; + short \fIxs\fP, \fIys\fP, \fIxe\fP, \fIye\fP; + short \fIsel_mode\fP; + } + +\fIxs\fP and \fIys\fP are the starting column and row. +\fIxe\fP and \fIye\fP are the ending +column and row. (Upper left corner is row=column=1.) +\fIsel_mode\fP is 0 for character-by-character selection, +1 for word-by-word selection, +or 2 for line-by-line selection. +The indicated screen characters are highlighted and saved +in the static array sel_buffer in devices/char/console.c. + +.IP "\fBTIOCLINUX, subcode=3\fP" +Paste selection. +The characters in the selection buffer are +written to \fIfd\fP. + +.IP "\fBTIOCLINUX, subcode=4\fP" +Unblank the screen. + +.IP "\fBTIOCLINUX, subcode=5\fP" +Sets contents of a 256-bit look up table defining characters in a "word", +for word-by-word selection. (Since 1.1.32.) + +.IP "\fBTIOCLINUX, subcode=6\fP" +\fIargp\fP points to a char which is set to the value of the kernel +variable \fIshift_state\fP. (Since 1.1.32.) + +.IP "\fBTIOCLINUX, subcode=7\fP" +\fIargp\fP points to a char which is set to the value of the kernel +variable \fIreport_mouse\fP. (Since 1.1.33.) + +.IP "\fBTIOCLINUX, subcode=8\fP" +Dump screen width and height, cursor position, and all the +character-attribute pairs. +(Kernels 1.1.67 through 1.1.91 only. +With kernel 1.1.92 or later, read from /dev/vcsa* instead.) + +.IP "\fBTIOCLINUX, subcode=9\fP" +Restore screen width and height, cursor position, and all the +character-attribute pairs. +(Kernels 1.1.67 through 1.1.91 only. +With kernel 1.1.92 or later, write to /dev/vcsa* instead.) + +.IP "\fBTIOCLINUX, subcode=10\fP" +Handles the Power Saving +feature of the new generation of monitors. +VESA screen blanking mode is set to \fIargp\fP[1], which governs what +screen blanking does: + + \fI0\fP: Screen blanking is disabled. + + \fI1\fP: The current video adapter +register settings are saved, then the controller is programmed to turn off +the vertical synchronization pulses. This puts the monitor into "standby" mode. +If your monitor has an Off_Mode timer, then +it will eventually power down by itself. + + \fI2\fP: The current +settings are saved, then both the vertical and horizontal +synchronization pulses are turned off. +This puts the monitor into "off" mode. +If your monitor has no Off_Mode timer, +or if you want your monitor to power down immediately when the +blank_timer times out, then you choose this option. +(\fICaution:\fP Powering down frequently will damage the monitor.) + +(Since 1.1.76.) + +.SH "RETURN VALUE" +On success, 0 is returned. On error \-1 is returned, and \fIerrno\fP is set. +.SH ERRORS +\fIerrno\fP may take on these values: + +.TP +.B EBADF +The file descriptor is invalid. +.TP +.B +ENOTTY +The file descriptor is not associated with a character special device, +or the specified request does not apply to it. +.TP +.B EINVAL +The file descriptor or \fIargp\fP is invalid. +.TP +.B EPERM +Insufficient permission. +.SH WARNING +Do not regard this man page as documentation of the Linux console ioctl's. +This is provided for the curious only, as an alternative to reading the +source. Ioctl's are undocumented Linux internals, liable to be changed +without warning. (And indeed, this page more or less describes the +situation as of kernel version 1.1.94; there are many minor and not-so-minor +differences with earlier versions.) + +Very often, ioctl's are introduced for communication between the +kernel and one particular well-known program (fdisk, hdparm, setserial, +tunelp, loadkeys, selection, setfont, etc.), and their behavior will be +changed when required by this particular program. + +Programs using these ioctl's will not be portable to other versions +of Unix, will not work on older versions of Linux, and will not work +on future versions of Linux. + +Use POSIX functions. + +.SH "SEE ALSO" +.BR dumpkeys (1), +.BR kbd_mode (1), +.BR loadkeys (1), +.BR mknod (1), +.BR setleds (1), +.BR setmetamode (1), +.BR execve (2), +.BR fcntl (2), +.BR ioperm (2), +.BR termios (3), +.BR console (4), +.BR console_codes (4), +.BR mt (4), +.BR sd (4), +.BR tty (4), +.BR tty_ioctl (4), +.BR ttys (4), +.BR vcs (4), +.BR vcsa (4), +.BR charsets (7), +.BR mapscrn (8), +.BR resizecons (8), +.BR setfont (8), +.IR /usr/include/linux/kd.h , +.I /usr/include/linux/vt.h |