IOCTL_CONSOLE - Linux手册页
Linux程序员手册 第2部分
更新日期: 2017-09-15
名称
ioctl_console-用于控制台终端和虚拟控制台的ioctl
说明
控制台终端和虚拟控制台支持以下特定于Linux的ioctl(2)请求。每个参数都需要第三个参数,此处假定为argp。
- KDGETLED
获取LED的状态。 argp指向一个字符。 * argp的低三位被设置为LED的状态,如下所示:
LED_CAP 0x04 caps lock led LED_NUM 0x02 num lock led LED_SCR 0x01 scroll lock led - KDSETLED
设置指示灯。 LED设置为与argp中无符号长整数的低三位相对应。但是,如果设置了更高的位,则LED会恢复正常:显示大写锁定,数字锁定和滚动锁定的键盘功能状态。
在Linux 1.1.54之前,LED只是反映了相应键盘标志的状态,而KDGETLED / KDSETLED也会更改键盘标志。从Linux 1.1.54开始,LED可以显示任意信息,但是默认情况下,它们显示键盘标志。以下两个ioctl用于访问键盘标志。
- KDGKBLED
获取键盘标志CapsLock,NumLock,ScrollLock(不亮)。 argp指向设置为标志状态的char。低三位(掩码0x7)获得当前标志状态,下一个半字节(掩码0x70)的低位获得默认标志状态。 (从Linux 1.1.54开始。)
- KDSKBLED
设置键盘标志CapsLock,NumLock,ScrollLock(不亮)。 argp是具有所需标志状态的无符号长整数。低三位(掩码0x7)具有标志状态,下一个半字节(掩码0x70)的低位具有默认标志状态。 (从Linux 1.1.54开始。)
- KDGKBTYPE
获取键盘类型。这将返回值KB_101,定义为0x02。
- KDADDIO
将I / O端口添加为有效端口。等效于ioperm(arg,1,1)。
- KDDELIO
删除I / O端口为有效端口。等效于ioperm(arg,1,0)。
- KDENABIO
启用对视频板的I / O。等效于ioperm(0x3b4,0x3df-0x3b4 + 1,1)。
- KDDISABIO
禁用视频板的I / O。等效于ioperm(0x3b4,0x3df-0x3b4 + 1,0)。
- KDSETMODE
设置文本/图形模式。 argp是一个无符号整数,包含以下之一:
KD_TEXT 0x00 KD_GRAPHICS 0x01 - KDGETMODE
获取文本/图形模式。 argp指向一个int,该int设置为KDSETMODE上面显示的值之一。
- KDMKTONE
产生指定长度的音调。 argp中无符号长整数的低16位指定以时钟周期为单位的周期,高16位给出以毫秒为单位的持续时间。如果持续时间为零,则声音将关闭。控制权立即返回。例如,argp =(125
- KIOCSOUND
开始或停止声音生成。 argp的低16位指定时钟周期的周期(即argp = 1193180 / frequency)。 argp = 0关闭声音。无论哪种情况,控制权都会立即返回。
- GIO_CMAP
从内核获取当前的默认颜色图。 argp指向48字节数组。 (从Linux 1.3.3开始)
- PIO_CMAP
更改默认的文本模式颜色图。 argp指向一个48字节的数组,该数组按顺序包含16种可用屏幕颜色的Red,Green和Blue值:0为关闭,255为全亮度。默认颜色依次为:黑色,深红色,深绿色,棕色,深蓝色,深紫色,深青色,浅灰色,深灰色,鲜红色,鲜绿色,黄色,鲜蓝色,鲜紫色,鲜青和白色。 (从Linux 1.3.3开始)
- GIO_FONT
以扩展形式获取256个字符的屏幕字体。 argp指向8192字节的数组。如果当前加载的字体是512个字符的字体,或者控制台未处于文本模式,则失败,并显示错误代码EINVAL。
- GIO_FONTX
获取屏幕字体和相关信息。 argp指向结构consolefontdesc(请参阅PIO_FONTX)。在调用时,应将charcount字段设置为chardata指向的缓冲区中可容纳的最大字符数。返回时,charcount和charheight填充有当前加载字体的相应数据,并且如果charcount的初始值指示有足够的空间,则chardata数组将包含字体数据。否则,缓冲区保持不变,并且将errno设置为ENOMEM。 (从Linux 1.3.1开始)
- PIO_FONT
设置256个字符的屏幕字体。将字体加载到EGA / VGA字符生成器中。 argp指向8192字节的映射,每个字符32字节。仅其中的前N个用于8x N字体(0 <N
- PIO_FONTX
设置屏幕字体和关联的渲染信息。 argp指向一个
struct consolefontdesc { unsigned short charcount; /* characters in font (256 or 512) */ unsigned short charheight; /* scan lines per character (1-32) */ char *chardata; /* font data in expanded form */ };
如有必要,将适当调整屏幕大小,并将SIGWINCH发送到适当的进程。此调用还会使Unicode映射无效。 (从Linux 1.3.1开始)
- PIO_FONTRESET
将屏幕字体,大小和Unicode映射重置为启动默认值。 argp尚未使用,但应设置为NULL以确保与Linux的未来版本兼容。 (从Linux 1.3.28开始。)
- GIO_SCRNMAP
从内核获取屏幕映射。 argp指向E_TABSZ大小的区域,该区域装有用于显示每个字符的字体位置。如果当前加载的字体超过256个字符,则此调用可能返回无用的信息。
- GIO_UNISCRNMAP
从内核获取完整的Unicode屏幕映射。 argp指向大小为E_TABSZ * sizeof(unsigned short)的区域,该区域装有每个字符代表的Unicode。从U + F000开始的一组特殊的Unicode用于表示"直接到字体"的映射。 (从Linux 1.3.1开始)
- PIO_SCRNMAP
加载内核中的"用户可定义"(第四)表,该表将字节映射到控制台屏幕符号。 argp指向大小为E_TABSZ的区域。
- PIO_UNISCRNMAP
加载内核中的"用户可定义"(第四)表,该表将字节映射为Unicode,然后根据当前加载的Unicode字体映射将其转换为屏幕符号。从U + F000开始的特殊Unicode可用于直接映射到字体符号。 (从Linux 1.3.1开始)
- GIO_UNIMAP
从内核获取Unicode到字体的映射。 argp指向一个
struct unimapdesc { unsigned short entry_ct; struct unipair *entries; };
条目指向的数组
struct unipair { unsigned short unicode; unsigned short fontpos; };
(从Linux 1.1.92开始。)
- PIO_UNIMAP
将unicode到字体的映射放入内核。 argp指向结构unimapdesc。 (从Linux 1.1.92开始)
- PIO_UNIMAPCLR
清除表,可能建议使用哈希算法。 argp指向一个
struct unimapinit { unsigned short advised_hashsize; /* 0 if no opinion */ unsigned short advised_hashstep; /* 0 if no opinion */ unsigned short advised_hashlevel; /* 0 if no opinion */ };
(从Linux 1.1.92开始。)
- KDGKBMODE
获取当前的键盘模式。 argp指向一个long整型的值,值设置为以下之一:
K_RAW 0x00 /* Raw (scancode) mode */ K_XLATE 0x01 /* Translate keycodes using keymap */ K_MEDIUMRAW 0x02 /* Medium raw (scancode) mode */ K_UNICODE 0x03 /* Unicode mode */ K_OFF 0x04 /* Disabled mode; since Linux 2.6.39 */ - KDSKBMODE
设置当前的键盘模式。 argp的长度等于KDGKBMODE所示的值之一。
- KDGKBMETA
获取元密钥处理模式。 argp指向一个设置为以下值之一的long型:
K_METABIT 0x03 set high order bit K_ESCPREFIX 0x04 escape prefix - KDSKBMETA
设置元密钥处理模式。 argp的长度等于KDGKBMETA上面显示的值之一。
- KDGKBENT
在键转换表中获取一个条目(键代码到操作代码)。 argp指向一个
struct kbentry { unsigned char kb_table; unsigned char kb_index; unsigned short kb_value; };
前两个成员均已填写:kb_table选择密钥表(0
- KDSKBENT
在转换表中设置一个条目。 argp指向结构kbentry。
- KDGKBSENT
获取一个功能键字符串。 argp指向一个
struct kbsentry { unsigned char kb_func; unsigned char kb_string[512]; };
kb_string设置为与第kb_func个功能键操作代码相对应的(空终止)字符串。
- KDSKBSENT
设置一个功能键字符串条目。 argp指向kbsentry结构。
- KDGKBDIACR
阅读内核口音表。 argp指向一个
struct kbdiacrs { unsigned int kb_cnt; struct kbdiacr kbdiacr[256]; };
其中kb_cnt是数组中的条目数,每个条目都是一个
struct kbdiacr { unsigned char diacr; unsigned char base; unsigned char result; };
- KDGETKEYCODE
读取内核键码表条目(将代码扫描到键码)。 argp指向一个
struct kbkeycode { unsigned int scancode; unsigned int keycode; };
键码设置为与给定的扫描码相对应。 (89
- KDSETKEYCODE
编写内核键码表条目。 argp指向结构kbkeycode。 (从Linux 1.1.63开始。)
- KDSIGACCEPT
当通过按下适当的组合键生成信号argp时,调用过程表明它愿意接受信号argp。 (1
- VT_OPENQRY
返回第一个可用(未打开)的控制台。 argp指向一个整数,该整数设置为vt的数字(1
- VT_GETMODE
获取活动vt的模式。 argp指向一个
struct vt_mode { char mode; /* vt mode */ char waitv; /* if set, hang on writes if not active */ short relsig; /* signal to raise on release req */ short acqsig; /* signal to raise on acquisition */ short frsig; /* unused (set to 0) */ };
设置为活动vt的模式。模式设置为以下值之一:
VT_AUTO auto vt switching VT_PROCESS process controls switching VT_ACKACQ acknowledge switch - VT_SETMODE
设置活动vt的模式。 argp指向结构vt_mode。
- VT_GETSTATE
获取全局vt状态信息。 argp指向一个
struct vt_stat { unsigned short v_active; /* active vt */ unsigned short v_signal; /* signal to send */ unsigned short v_state; /* vt bit mask */ };
对于使用中的每个vt,将设置v_state成员中的相应位。 (内核1.0到1.1.92。)
- VT_RELDISP
释放显示器。
- VT_ACTIVATE
切换到vt argp(1
- VT_WAITACTIVE
等待直到vt argp被激活。
- VT_DISALLOCATE
取消分配与vt argp关联的内存。 (从Linux 1.1.54开始。)
- VT_RESIZE
设置内核的screensize概念。 argp指向一个
struct vt_sizes { unsigned short v_rows; /* # rows */ unsigned short v_cols; /* # columns */ unsigned short v_scrollsize; /* no longer used */ };
请注意,这不会更改视频模式。参见resizecons(8)。 (从Linux 1.1.54开始。)
- VT_RESIZEX
设置内核对各种屏幕参数的想法。 argp指向一个
struct vt_consize { unsigned short v_rows; /* number of rows */ unsigned short v_cols; /* number of columns */ unsigned short v_vlin; /* number of pixel rows on screen */ unsigned short v_clin; /* number of pixel rows per character */ unsigned short v_vcol; /* number of pixel columns on screen */ unsigned short v_ccol; /* number of pixel columns per character */ };
可以将任何参数设置为零,表示"无更改",但是如果设置了多个参数,则它们必须是自洽的。请注意,这不会更改视频模式。参见resizecons(8)。 (从Linux 1.3.3开始)
以下ioctl的操作取决于argp所指向的结构中的第一个字节,这里称为子代码。这些仅对超级用户或当前终端的所有者合法。
- TIOCLINUX, subcode=0
转储屏幕。在Linux 1.1.92中消失。 (对于内核1.1.92或更高版本,请改为从/ dev / vcsN或/ dev / vcsaN中读取。)
- TIOCLINUX, subcode=1
获取任务信息。在Linux 1.1.92中消失。
- TIOCLINUX, subcode=2
设置选择。 argp指向一个
struct { char subcode; short xs, ys, xe, ye; short sel_mode; };
xs和ys是起始列和行。 xe和ye是结尾的列和行。 (左上角为row = column = 1。)sel_mode为0(逐个字符选择),1(逐个单词选择)或2(逐行选择)。所指示的屏幕字符将突出显示并保存在devices / char / console.c中的静态数组sel_buffer中。
- TIOCLINUX, subcode=3
粘贴选择。选择缓冲区中的字符被写入fd。
- TIOCLINUX, subcode=4
打开屏幕空白。
- TIOCLINUX, subcode=5
设置一个256位查找表的内容,该表定义"单词"中的字符,以逐字选择。 (从Linux 1.1.32开始。)
- TIOCLINUX, subcode=6
argp指向一个char,该char被设置为内核变量shift_state的值。 (从Linux 1.1.32开始。)
- TIOCLINUX, subcode=7
argp指向一个char,该char设置为内核变量report_mouse的值。 (从Linux 1.1.33开始。)
- TIOCLINUX, subcode=8
转储屏幕的宽度和高度,光标位置以及所有字符-属性对。 (仅内核1.1.67到1.1.91。对于内核1.1.92或更高版本,请改读/ dev / vcsa *。)
- TIOCLINUX, subcode=9
恢复屏幕的宽度和高度,光标位置以及所有字符-属性对。 (仅内核1.1.67至1.1.91。对于内核1.1.92或更高版本,请改写到/ dev / vcsa *。)
- TIOCLINUX, subcode=10
- Handles the Power Saving
feature of the new generation of monitors.
VESA screen blanking mode is set to
argp[1],
which governs what
screen blanking does:- 0:
屏幕空白被禁用。
- 1:
保存当前的视频适配器寄存器设置,然后将控制器编程为关闭垂直同步脉冲。这会将显示器置于"待机"模式。如果您的监视器具有Off_Mode计时器,则它将最终自行关闭电源。
- 2:
保存当前设置,然后关闭垂直和水平同步脉冲。这会将显示器置于"关闭"模式。如果您的显示器没有Off_Mode计时器,或者您希望显示器在blank_timer超时后立即关闭电源,则可以选择此选项。 (警告:频繁关闭电源会损坏显示器。)(从Linux 1.1.76开始。)
返回值
成功时,将返回0。错误时,返回-1,并设置errno。
错误说明
errno可以采用以下值:
- EBADF
文件描述符无效。
- EINVAL
文件描述符或argp无效。
- ENOTTY
文件描述符未与字符特殊设备关联,或者指定的请求不适用于该设备。
- EPERM
权限不足。
备注
警告:请勿将此手册页视为Linux控制台ioctl的文档。仅出于好奇提供此功能,作为阅读源代码的替代方法。 Ioctl是未记录的Linux内部组件,可能会在无警告的情况下进行更改。 (的确,此页面或多或少地描述了内核版本1.1.94的情况;与早期版本有许多小的和不太小的差异。)
通常,会引入ioctl来在内核和一个特定的知名程序(fdisk,hdparm,setserial,tunelp,loadkeys,selection,setfont等)之间进行通信,并且在此特定程序要求时,它们的行为也会更改。
使用这些ioctl的程序不能移植到其他版本的UNIX,不能在较旧的Linux上运行,也不能在将来的Linux版本上运行。
使用POSIX函数。
另外参见
dumpkeys(1),kbd_mode(1),loadkeys(1),mknod(1),setleds(1),setmetamode(1),execve(2),fcntl(2),ioctl_tty(2),ioperm(2), termios(3),console_codes(4),mt(4),sd(4),tty(4),ttyS(4),vcs(4),vcsa(4),charsets(7),mapscrn(8), resizecons(8),setfont(8)
/usr/include/linux/kd.h、/usr/include/linux/vt.h
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。