1ioctl_console(2) System Calls Manual ioctl_console(2)
2
3
4
6 ioctl_console - ioctls for console terminal and virtual consoles
7
9 The following Linux-specific ioctl(2) requests are supported for con‐
10 sole terminals and virtual consoles. Each requires a third argument,
11 assumed here to be argp.
12
13 KDGETLED
14 Get state of LEDs. argp points to a char. The lower three bits
15 of *argp are set to the state of the LEDs, as follows:
16
17 LED_CAP 0x04 caps lock led
18 LED_NUM 0x02 num lock led
19 LED_SCR 0x01 scroll lock led
20
21 KDSETLED
22 Set the LEDs. The LEDs are set to correspond to the lower three
23 bits of the unsigned long integer in argp. However, if a higher
24 order bit is set, the LEDs revert to normal: displaying the
25 state of the keyboard functions of caps lock, num lock, and
26 scroll lock.
27
28 Before Linux 1.1.54, the LEDs just reflected the state of the corre‐
29 sponding keyboard flags, and KDGETLED/KDSETLED would also change the
30 keyboard flags. Since Linux 1.1.54 the LEDs can be made to display ar‐
31 bitrary information, but by default they display the keyboard flags.
32 The following two ioctls are used to access the keyboard flags.
33
34 KDGKBLED
35 Get keyboard flags CapsLock, NumLock, ScrollLock (not lights).
36 argp points to a char which is set to the flag state. The low
37 order three bits (mask 0x7) get the current flag state, and the
38 low order bits of the next nibble (mask 0x70) get the default
39 flag state. (Since Linux 1.1.54.)
40
41 KDSKBLED
42 Set keyboard flags CapsLock, NumLock, ScrollLock (not lights).
43 argp is an unsigned long integer that has the desired flag
44 state. The low order three bits (mask 0x7) have the flag state,
45 and the low order bits of the next nibble (mask 0x70) have the
46 default flag state. (Since Linux 1.1.54.)
47
48 KDGKBTYPE
49 Get keyboard type. This returns the value KB_101, defined as
50 0x02.
51
52 KDADDIO
53 Add I/O port as valid. Equivalent to ioperm(arg,1,1).
54
55 KDDELIO
56 Delete I/O port as valid. Equivalent to ioperm(arg,1,0).
57
58 KDENABIO
59 Enable I/O to video board. Equivalent to ioperm(0x3b4,
60 0x3df-0x3b4+1, 1).
61
62 KDDISABIO
63 Disable I/O to video board. Equivalent to ioperm(0x3b4,
64 0x3df-0x3b4+1, 0).
65
66 KDSETMODE
67 Set text/graphics mode. argp is an unsigned integer containing
68 one of:
69
70 KD_TEXT 0x00
71 KD_GRAPHICS 0x01
72
73 KDGETMODE
74 Get text/graphics mode. argp points to an int which is set to
75 one of the values shown above for KDSETMODE.
76
77 KDMKTONE
78 Generate tone of specified length. The lower 16 bits of the un‐
79 signed long integer in argp specify the period in clock cycles,
80 and the upper 16 bits give the duration in msec. If the dura‐
81 tion is zero, the sound is turned off. Control returns immedi‐
82 ately. For example, argp = (125<<16) + 0x637 would specify the
83 beep normally associated with a ctrl-G. (Thus since Linux
84 0.99pl1; broken in Linux 2.1.49-50.)
85
86 KIOCSOUND
87 Start or stop sound generation. The lower 16 bits of argp spec‐
88 ify the period in clock cycles (that is, argp = 1193180/fre‐
89 quency). argp = 0 turns sound off. In either case, control re‐
90 turns immediately.
91
92 GIO_CMAP
93 Get the current default color map from kernel. argp points to a
94 48-byte array. (Since Linux 1.3.3.)
95
96 PIO_CMAP
97 Change the default text-mode color map. argp points to a
98 48-byte array which contains, in order, the Red, Green, and Blue
99 values for the 16 available screen colors: 0 is off, and 255 is
100 full intensity. The default colors are, in order: black, dark
101 red, dark green, brown, dark blue, dark purple, dark cyan, light
102 grey, dark grey, bright red, bright green, yellow, bright blue,
103 bright purple, bright cyan, and white. (Since Linux 1.3.3.)
104
105 GIO_FONT
106 Gets 256-character screen font in expanded form. argp points to
107 an 8192-byte array. Fails with error code EINVAL if the cur‐
108 rently loaded font is a 512-character font, or if the console is
109 not in text mode.
110
111 GIO_FONTX
112 Gets screen font and associated information. argp points to a
113 struct consolefontdesc (see PIO_FONTX). On call, the charcount
114 field should be set to the maximum number of characters that
115 would fit in the buffer pointed to by chardata. On return, the
116 charcount and charheight are filled with the respective data for
117 the currently loaded font, and the chardata array contains the
118 font data if the initial value of charcount indicated enough
119 space was available; otherwise the buffer is untouched and errno
120 is set to ENOMEM. (Since Linux 1.3.1.)
121
122 PIO_FONT
123 Sets 256-character screen font. Load font into the EGA/VGA
124 character generator. argp points to an 8192-byte map, with 32
125 bytes per character. Only the first N of them are used for an
126 8xN font (0 < N <= 32). This call also invalidates the Unicode
127 mapping.
128
129 PIO_FONTX
130 Sets screen font and associated rendering information. argp
131 points to a
132
133 struct consolefontdesc {
134 unsigned short charcount; /* characters in font
135 (256 or 512) */
136 unsigned short charheight; /* scan lines per
137 character (1-32) */
138 char *chardata; /* font data in
139 expanded form */
140 };
141
142 If necessary, the screen will be appropriately resized, and SIG‐
143 WINCH sent to the appropriate processes. This call also invali‐
144 dates the Unicode mapping. (Since Linux 1.3.1.)
145
146 PIO_FONTRESET
147 Resets the screen font, size, and Unicode mapping to the bootup
148 defaults. argp is unused, but should be set to NULL to ensure
149 compatibility with future versions of Linux. (Since Linux
150 1.3.28.)
151
152 GIO_SCRNMAP
153 Get screen mapping from kernel. argp points to an area of size
154 E_TABSZ, which is loaded with the font positions used to display
155 each character. This call is likely to return useless informa‐
156 tion if the currently loaded font is more than 256 characters.
157
158 GIO_UNISCRNMAP
159 Get full Unicode screen mapping from kernel. argp points to an
160 area of size E_TABSZ*sizeof(unsigned short), which is loaded
161 with the Unicodes each character represent. A special set of
162 Unicodes, starting at U+F000, are used to represent "direct to
163 font" mappings. (Since Linux 1.3.1.)
164
165 PIO_SCRNMAP
166 Loads the "user definable" (fourth) table in the kernel which
167 maps bytes into console screen symbols. argp points to an area
168 of size E_TABSZ.
169
170 PIO_UNISCRNMAP
171 Loads the "user definable" (fourth) table in the kernel which
172 maps bytes into Unicodes, which are then translated into screen
173 symbols according to the currently loaded Unicode-to-font map.
174 Special Unicodes starting at U+F000 can be used to map directly
175 to the font symbols. (Since Linux 1.3.1.)
176
177 GIO_UNIMAP
178 Get Unicode-to-font mapping from kernel. argp points to a
179
180 struct unimapdesc {
181 unsigned short entry_ct;
182 struct unipair *entries;
183 };
184
185 where entries points to an array of
186
187 struct unipair {
188 unsigned short unicode;
189 unsigned short fontpos;
190 };
191
192 (Since Linux 1.1.92.)
193
194 PIO_UNIMAP
195 Put unicode-to-font mapping in kernel. argp points to a struct
196 unimapdesc. (Since Linux 1.1.92)
197
198 PIO_UNIMAPCLR
199 Clear table, possibly advise hash algorithm. argp points to a
200
201 struct unimapinit {
202 unsigned short advised_hashsize; /* 0 if no opinion */
203 unsigned short advised_hashstep; /* 0 if no opinion */
204 unsigned short advised_hashlevel; /* 0 if no opinion */
205 };
206
207 (Since Linux 1.1.92.)
208
209 KDGKBMODE
210 Gets current keyboard mode. argp points to a long which is set
211 to one of these:
212
213 K_RAW 0x00 /* Raw (scancode) mode */
214 K_XLATE 0x01 /* Translate keycodes using keymap */
215 K_MEDIUMRAW 0x02 /* Medium raw (scancode) mode */
216 K_UNICODE 0x03 /* Unicode mode */
217 K_OFF 0x04 /* Disabled mode; since Linux 2.6.39 */
218
219 KDSKBMODE
220 Sets current keyboard mode. argp is a long equal to one of the
221 values shown for KDGKBMODE.
222
223 KDGKBMETA
224 Gets meta key handling mode. argp points to a long which is set
225 to one of these:
226
227 K_METABIT 0x03 set high order bit
228 K_ESCPREFIX 0x04 escape prefix
229
230 KDSKBMETA
231 Sets meta key handling mode. argp is a long equal to one of the
232 values shown above for KDGKBMETA.
233
234 KDGKBENT
235 Gets one entry in key translation table (keycode to action
236 code). argp points to a
237
238 struct kbentry {
239 unsigned char kb_table;
240 unsigned char kb_index;
241 unsigned short kb_value;
242 };
243
244 with the first two members filled in: kb_table selects the key
245 table (0 <= kb_table < MAX_NR_KEYMAPS), and kb_index is the key‐
246 code (0 <= kb_index < NR_KEYS). kb_value is set to the corre‐
247 sponding action code, or K_HOLE if there is no such key, or
248 K_NOSUCHMAP if kb_table is invalid.
249
250 KDSKBENT
251 Sets one entry in translation table. argp points to a struct
252 kbentry.
253
254 KDGKBSENT
255 Gets one function key string. argp points to a
256
257 struct kbsentry {
258 unsigned char kb_func;
259 unsigned char kb_string[512];
260 };
261
262 kb_string is set to the (null-terminated) string corresponding
263 to the kb_functh function key action code.
264
265 KDSKBSENT
266 Sets one function key string entry. argp points to a struct kb‐
267 sentry.
268
269 KDGKBDIACR
270 Read kernel accent table. argp points to a
271
272 struct kbdiacrs {
273 unsigned int kb_cnt;
274 struct kbdiacr kbdiacr[256];
275 };
276
277 where kb_cnt is the number of entries in the array, each of
278 which is a
279
280 struct kbdiacr {
281 unsigned char diacr;
282 unsigned char base;
283 unsigned char result;
284 };
285
286 KDGETKEYCODE
287 Read kernel keycode table entry (scan code to keycode). argp
288 points to a
289
290 struct kbkeycode {
291 unsigned int scancode;
292 unsigned int keycode;
293 };
294
295 keycode is set to correspond to the given scancode. (89 <=
296 scancode <= 255 only. For 1 <= scancode <= 88, keycode==scan‐
297 code.) (Since Linux 1.1.63.)
298
299 KDSETKEYCODE
300 Write kernel keycode table entry. argp points to a struct kbk‐
301 eycode. (Since Linux 1.1.63.)
302
303 KDSIGACCEPT
304 The calling process indicates its willingness to accept the sig‐
305 nal argp when it is generated by pressing an appropriate key
306 combination. (1 <= argp <= NSIG). (See spawn_console() in
307 linux/drivers/char/keyboard.c.)
308
309 VT_OPENQRY
310 Returns the first available (non-opened) console. argp points
311 to an int which is set to the number of the vt (1 <= *argp <=
312 MAX_NR_CONSOLES).
313
314 VT_GETMODE
315 Get mode of active vt. argp points to a
316
317 struct vt_mode {
318 char mode; /* vt mode */
319 char waitv; /* if set, hang on writes if not active */
320 short relsig; /* signal to raise on release req */
321 short acqsig; /* signal to raise on acquisition */
322 short frsig; /* unused (set to 0) */
323 };
324
325 which is set to the mode of the active vt. mode is set to one
326 of these values:
327
328 VT_AUTO auto vt switching
329 VT_PROCESS process controls switching
330 VT_ACKACQ acknowledge switch
331
332 VT_SETMODE
333 Set mode of active vt. argp points to a struct vt_mode.
334
335 VT_GETSTATE
336 Get global vt state info. argp points to a
337
338 struct vt_stat {
339 unsigned short v_active; /* active vt */
340 unsigned short v_signal; /* signal to send */
341 unsigned short v_state; /* vt bit mask */
342 };
343
344 For each vt in use, the corresponding bit in the v_state member
345 is set. (Linux 1.0 through Linux 1.1.92.)
346
347 VT_RELDISP
348 Release a display.
349
350 VT_ACTIVATE
351 Switch to vt argp (1 <= argp <= MAX_NR_CONSOLES).
352
353 VT_WAITACTIVE
354 Wait until vt argp has been activated.
355
356 VT_DISALLOCATE
357 Deallocate the memory associated with vt argp. (Since Linux
358 1.1.54.)
359
360 VT_RESIZE
361 Set the kernel's idea of screensize. argp points to a
362
363 struct vt_sizes {
364 unsigned short v_rows; /* # rows */
365 unsigned short v_cols; /* # columns */
366 unsigned short v_scrollsize; /* no longer used */
367 };
368
369 Note that this does not change the videomode. See resize‐
370 cons(8). (Since Linux 1.1.54.)
371
372 VT_RESIZEX
373 Set the kernel's idea of various screen parameters. argp points
374 to a
375
376 struct vt_consize {
377 unsigned short v_rows; /* number of rows */
378 unsigned short v_cols; /* number of columns */
379 unsigned short v_vlin; /* number of pixel rows
380 on screen */
381 unsigned short v_clin; /* number of pixel rows
382 per character */
383 unsigned short v_vcol; /* number of pixel columns
384 on screen */
385 unsigned short v_ccol; /* number of pixel columns
386 per character */
387 };
388
389 Any parameter may be set to zero, indicating "no change", but if
390 multiple parameters are set, they must be self-consistent. Note
391 that this does not change the videomode. See resizecons(8).
392 (Since Linux 1.3.3.)
393
394 The action of the following ioctls depends on the first byte in the
395 struct pointed to by argp, referred to here as the subcode. These are
396 legal only for the superuser or the owner of the current terminal.
397 Symbolic subcodes are available in <linux/tiocl.h> since Linux 2.5.71.
398
399 TIOCLINUX, subcode=0
400 Dump the screen. Disappeared in Linux 1.1.92. (With Linux
401 1.1.92 or later, read from /dev/vcsN or /dev/vcsaN instead.)
402
403 TIOCLINUX, subcode=1
404 Get task information. Disappeared in Linux 1.1.92.
405
406 TIOCLINUX, subcode=TIOCL_SETSEL
407 Set selection. argp points to a
408
409 struct {
410 char subcode;
411 short xs, ys, xe, ye;
412 short sel_mode;
413 };
414
415 xs and ys are the starting column and row. xe and ye are the
416 ending column and row. (Upper left corner is row=column=1.)
417 sel_mode is 0 for character-by-character selection, 1 for word-
418 by-word selection, or 2 for line-by-line selection. The indi‐
419 cated screen characters are highlighted and saved in a kernel
420 buffer.
421
422 TIOCLINUX, subcode=TIOCL_PASTESEL
423 Paste selection. The characters in the selection buffer are
424 written to fd.
425
426 TIOCLINUX, subcode=TIOCL_UNBLANKSCREEN
427 Unblank the screen.
428
429 TIOCLINUX, subcode=TIOCL_SELLOADLUT
430 Sets contents of a 256-bit look up table defining characters in
431 a "word", for word-by-word selection. (Since Linux 1.1.32.)
432
433 TIOCLINUX, subcode=TIOCL_GETSHIFTSTATE
434 argp points to a char which is set to the value of the kernel
435 variable shift_state. (Since Linux 1.1.32.)
436
437 TIOCLINUX, subcode=TIOCL_GETMOUSEREPORTING
438 argp points to a char which is set to the value of the kernel
439 variable report_mouse. (Since Linux 1.1.33.)
440
441 TIOCLINUX, subcode=8
442 Dump screen width and height, cursor position, and all the char‐
443 acter-attribute pairs. (Linux 1.1.67 through Linux 1.1.91 only.
444 With Linux 1.1.92 or later, read from /dev/vcsa* instead.)
445
446 TIOCLINUX, subcode=9
447 Restore screen width and height, cursor position, and all the
448 character-attribute pairs. (Linux 1.1.67 through Linux 1.1.91
449 only. With Linux 1.1.92 or later, write to /dev/vcsa* instead.)
450
451 TIOCLINUX, subcode=TIOCL_SETVESABLANK
452 Handles the Power Saving feature of the new generation of moni‐
453 tors. VESA screen blanking mode is set to argp[1], which gov‐
454 erns what screen blanking does:
455
456 0 Screen blanking is disabled.
457
458 1 The current video adapter register settings are saved,
459 then the controller is programmed to turn off the verti‐
460 cal synchronization pulses. This puts the monitor into
461 "standby" mode. If your monitor has an Off_Mode timer,
462 then it will eventually power down by itself.
463
464 2 The current settings are saved, then both the vertical
465 and horizontal synchronization pulses are turned off.
466 This puts the monitor into "off" mode. If your monitor
467 has no Off_Mode timer, or if you want your monitor to
468 power down immediately when the blank_timer times out,
469 then you choose this option. (Caution: Powering down
470 frequently will damage the monitor.) (Since Linux
471 1.1.76.)
472
473 TIOCLINUX, subcode=TIOCL_SETKMSGREDIRECT
474 Change target of kernel messages ("console"): by default, and if
475 this is set to 0, messages are written to the currently active
476 VT. The VT to write to is a single byte following subcode.
477 (Since Linux 2.5.36.)
478
479 TIOCLINUX, subcode=TIOCL_GETFGCONSOLE
480 Returns the number of VT currently in foreground. (Since Linux
481 2.5.36.)
482
483 TIOCLINUX, subcode=TIOCL_SCROLLCONSOLE
484 Scroll the foreground VT by the specified amount of lines down,
485 or half the screen if 0. lines is *(((int32_t *)&subcode) + 1).
486 (Since Linux 2.5.67.)
487
488 TIOCLINUX, subcode=TIOCL_BLANKSCREEN
489 Blank the foreground VT, ignoring "pokes" (typing): can only be
490 unblanked explicitly (by switching VTs, to text mode, etc.).
491 (Since Linux 2.5.71.)
492
493 TIOCLINUX, subcode=TIOCL_BLANKEDSCREEN
494 Returns the number of VT currently blanked, 0 if none. (Since
495 Linux 2.5.71.)
496
497 TIOCLINUX, subcode=16
498 Never used.
499
500 TIOCLINUX, subcode=TIOCL_GETKMSGREDIRECT
501 Returns target of kernel messages. (Since Linux 2.6.17.)
502
504 On success, 0 is returned (except where indicated). On failure, -1 is
505 returned, and errno is set to indicate the error.
506
508 EBADF The file descriptor is invalid.
509
510 EINVAL The file descriptor or argp is invalid.
511
512 ENOTTY The file descriptor is not associated with a character special
513 device, or the specified request does not apply to it.
514
515 EPERM Insufficient permission.
516
518 Warning: Do not regard this man page as documentation of the Linux con‐
519 sole ioctls. This is provided for the curious only, as an alternative
520 to reading the source. Ioctl's are undocumented Linux internals, li‐
521 able to be changed without warning. (And indeed, this page more or
522 less describes the situation as of kernel version 1.1.94; there are
523 many minor and not-so-minor differences with earlier versions.)
524
525 Very often, ioctls are introduced for communication between the kernel
526 and one particular well-known program (fdisk, hdparm, setserial,
527 tunelp, loadkeys, selection, setfont, etc.), and their behavior will be
528 changed when required by this particular program.
529
530 Programs using these ioctls will not be portable to other versions of
531 UNIX, will not work on older versions of Linux, and will not work on
532 future versions of Linux.
533
534 Use POSIX functions.
535
537 dumpkeys(1), kbd_mode(1), loadkeys(1), mknod(1), setleds(1), setmeta‐
538 mode(1), execve(2), fcntl(2), ioctl_tty(2), ioperm(2), termios(3), con‐
539 sole_codes(4), mt(4), sd(4), tty(4), ttyS(4), vcs(4), vcsa(4),
540 charsets(7), mapscrn(8), resizecons(8), setfont(8)
541
542 /usr/include/linux/kd.h, /usr/include/linux/vt.h
543
544
545
546Linux man-pages 6.05 2023-01-22 ioctl_console(2)