ioctl_console -
управление
вводом-выводом
(ioctl)
консольного
терминала
и
виртуальных
консолей
Для
терминалов
и
виртуальных
консолей
поддерживаются
Linux-ориентированные
запросы
ioctl(2),
перечисленные
далее. Для
каждого
запроса
требуется
третий
аргумент
argp.
- KDGETLED
- Получить
состояние
индикаторов.
argp
указывает
ячейку
типа char. В
младших
трёх битах
*argp
хранится
состояние
индикаторов:
LED_CAP |
0x04 |
индикатор
caps lock |
LED_NUM |
0x02 |
индикатор
num lock |
LED_SCR |
0x01 |
индикатор
scroll lock |
- KDSETLED
- Установить
состояние
индикаторов.
Состояние
индикаторов
устанавливается
в
соответствии
с тремя
младшими
битами
беззнакового
длинного
целого argp.
Однако,
если
установлен
старший
бит,
индикаторы
возвращаются
в исходное
состояние:
отображают
состояние
функций
клавиатуры
caps lock, num lock и scroll lock.
До Linux 1.1.54
индикаторы
состояния
отражались
только
соответствующими
флагами
клавиатуры
и KDGETLED/KDSETLED и также
могли
изменять
флаги
клавиатуры.
Начиная с Linux 1.1.54
индикаторы
могут
отображать
произвольную
информацию,
но по
умолчанию
показывают
флаги
клавиатуры.
Следующие
два 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
- Включить
ввод/вывод
на
видеокарту.
Эквивалентно
вызову ioperm(0x3b4,
0x3df-0x3b4+1, 1).
- KDDISABIO
- Выключить
ввод/вывод
на
видеокарту.
Эквивалентно
вызову ioperm(0x3b4,
0x3df-0x3b4+1, 0).
- KDSETMODE
- Установить
текстовый/графический
режим.
Беззнаковое
целое argp
содержит
одно из
двух
значений:
KD_TEXT |
0x00 |
KD_GRAPHICS |
0x01 |
- KDGETMODE
- Получить
тип режима
(текстовый/графический).
Значение
argp
указывает
на int,
равное
одному из
представленных
чуть ранее
в KDSETMODE.
- KDMKTONE
- Генерировать
тон
заданной
длительности.
Младшие 16
битов
беззнакового
длинного
целого argp
задают
частоту
тона
(период в
тактах),
старшие 16
битов
устанавливают
его
длительность
в мсек.
Если
длительность
равна нулю,
звук
выключается.
Управление
возвращается
немедленно.
Например,
argp = (125<<16) + 0x637
определяет
звук,
обычно
связанный
с ctrl-G
(работает
начиная с Linux
0.99pl1; не
работает в
Linux 2.1.49-50).
- KIOCSOUND
- Запустить
и
остановить
генерацию
звука.
Младшие 16
битов argp
определяют
период в
тактах (то
есть argp =
1193180/частота).
Значение
argp = 0
выключает
звук. В
обоих
случаях
управление
возвращается
немедленно.
- GIO_CMAP
- Получить
из ядра
текущую
цветовую
карту по
умолчанию.
argp
указывает
на массив
из 48 байтов
(начиная с Linux
1.3.3).
- PIO_CMAP
- Изменить
цветовую
карту по
умолчанию
для
текстового
режима. argp
указывает
на массив
из 48 байтов,
который
содержит,
по порядку,
значения
красного,
зеленого и
синего для
16-и
доступных
экранных
цветов: 0 —
составляющая
выключена,
255 — полная
интенсивность.
Цвета по
умолчанию,
по порядку:
чёрный,
тёмно-красный,
тёмно-зелёный,
коричневый,
тёмно-синий,
тёмно-сиреневый,
тёмно-голубой,
светло-серый,
тёмно-серый,
ярко-красный,
ярко-зелёный,
жёлтый,
ярко-синий,
ярко-сиреневый,
ярко-голубой
и белый
(начиная с Linux
1.3.3).
- GIO_FONT
- Получить
экранный
шрифт (256
символов) в
расширенном
виде. argp
указывает
на массив
из 8192 байтов.
Возвращает
код ошибки
EINVAL, если
текущий
загруженный
шрифт
содержит 512
символов
или
консоль
находится
не в
текстовом
режиме.
- GIO_FONTX
- Получить
экранный
шрифт и
связанную
с ним
информацию.
argp
указывает
на struct consolefontdesc (см.
PIO_FONTX). При
вызове
значение
поля charcount
должно
быть равно
максимальному
числу
символов,
которое
помещается
в буфер,
указываемый
chardata. При
возврате
charcount и charheight
содержат
информацию
о текущем
загруженном
шрифте, а
массив chardata
содержит
данные
шрифта,
если
согласно
начальному
значению
charcount для
этого
достаточно
места; в
противном
случае
буфер
остаётся
неизменным
и errno
присваивается
значение
ENOMEM (начиная
с Linux 1.3.1).
- PIO_FONT
- Установить
экранный
шрифт из 256
символов.
Шрифт
загружается
в
знакогенератор
EGA/VGA. argp
указывает
на карту
размером 8192
байта (32
байта на
символ).
Только
первые N из
них
используются
для шрифта
8x N (0 < N <= 32). Этот
вызов
также
отменяет
перекодировку
в Юникод.
- PIO_FONTX
- Установить
экранный
шрифт и
соответствующую
информацию
для
изображения.
argp
указывает
на
структуру:
-
struct consolefontdesc {
unsigned short charcount; /* число символов в шрифте
(256 или 512) */
unsigned short charheight; /* число линий сканирования на
символ (1-32) */
char *chardata; /* данные шрифта в
расширенном формате */
};
- Если
требуется,
соответственно
изменяются
размеры
экрана и
соответствующим
процессам
посылается
сигнал SIGWINCH.
Этот вызов
также
отменяет
перекодировку
в Юникод
(начиная с Linux
1.3.1).
- PIO_FONTRESET
- Сбросить
экранный
шрифт,
размер и
перекодировку
в Юникод в
начальные
значения,
использованные
при
загрузке.
Аргумент
argp не
используется,
но его
значение
должно
быть NULL,
чтобы эта
версия
была
совместима
с будущими
версиями Linux.
(Начиная с Linux
1.3.28).
- GIO_SCRNMAP
- Получить
разметку
экрана из
ядра. argp
указывает
на область
размером E_TABSZ,
которая
заполняется
позициями
символов
шрифта,
используемыми
при
отображении.
Вызов
возвращает
бесполезную
информацию,
если
текущий
загруженный
шрифт
содержит
более 256
символов.
- GIO_UNISCRNMAP
- Получить
полную
экранную
перекодировку
в Юникод из
ядра. argp
указывает
на область
размером
E_TABSZ*sizeof(unsigned short),
которая
заполняется
представлением
в Юникоде
каждого
символа.
Специальный
набор
Юникода,
начинающийся
с U+F000,
используется
для
перекодировки
«напрямую
в шрифт»
(начиная с Linux
1.3.1).
- PIO_SCRNMAP
- Загрузить
«определяемую
пользователем»
(четвёртую)
таблицу в
ядро, по
которой
перекодируются
байты в
символы
экрана
консоли. argp
указывает
на область
размером
E_TABSZ.
- PIO_UNISCRNMAP
- Загрузить
«определяемую
пользователем»
(четвёртую)
таблицу в
ядро,
перекодирующую
байты в
значения
Юникода,
которые
затем
транслируются
в экранные
символы
согласно
текущей
загруженной
карте
соответствия
символов
Юникода и
шрифта.
Специальные
коды
Юникода,
начинающиеся
с U+F000, могут
использоваться
для
непосредственного
перевода
байтов в
символы
шрифта
(начиная с Linux
1.3.1).
- GIO_UNIMAP
- Получить
соответствие
символов
Юникода
шрифту из
ядра. argp
указывает
на
структуру
-
struct unimapdesc {
unsigned short entry_ct;
struct unipair *entries;
};
- где entries
указывает
на массив
структур
-
struct unipair {
unsigned short unicode;
unsigned short fontpos;
};
- (начиная
с Linux 1.1.92)
- PIO_UNIMAP
- Поместить
соответствие
символов
Юникода и
экранного
шрифта в
ядро. argp
указывает
на struct unimapdesc
(начиная с Linux
1.1.92).
- PIO_UNIMAPCLR
- Очистить
таблицу,
возможно с
помощью
алгоритма
хэширования.
argp
указывает
на
структуру
-
struct unimapinit {
unsigned short advised_hashsize; /* 0, если не использовать */
unsigned short advised_hashstep; /* 0, если не использовать */
unsigned short advised_hashlevel; /* 0, если не использовать */
};
- (начиная
с Linux 1.1.92)
- KDGKBMODE
- Получить
текущий
режим
клавиатуры.
Значение
argp
указывает
на ячейку
типа long, в
которой
может быть
одно из
значений:
K_RAW |
0x00 /* режим
без
обработки
(скан-коды)
*/ |
K_XLATE |
0x01 /*
транслированные
с помощью
keymap коды
клавиш */ |
K_MEDIUMRAW |
0x02 /* режим
средней
обработки
(скан-коды)
*/ |
K_UNICODE |
0x03 /* режим
Юникода */ |
K_OFF |
0x04 /* режим
выключен;
начиная с
Linux 2.6.39 */ |
. |
|
- KDSKBMODE
- Установить
текущий
режим
клавиатуры.
Значение
argp
указывает
на ячейку
типа long,
значением
которой
может быть
любое из
представленных
чуть ранее
в KDGKBMODE.
- KDGKBMETA
- Получить
режим
обработки
метаклавиш.
argp
указывает
на ячейку
типа long, в
которой
может быть
одно из
значений:
K_METABIT |
0x03 |
установлен
старший
бит |
K_ESCPREFIX |
0x04 |
экранирующий
префикс |
- KDSKBMETA
- Установить
режим
обработки
клавиши
мета.
Значение
argp
указывает
на ячейку
типа long,
значением
которой
может быть
любое из
представленных
чуть ранее
в KDGKBMETA.
- KDGKBENT
- Получить
один
элемент из
таблицы
трансляции
клавиш (код
клавиши
для кода
действия).
argp
указывает
на
структуру
-
struct kbentry {
unsigned char kb_table;
unsigned char kb_index;
unsigned short kb_value;
};
- значения
двух
первых
полей
представляют
собой: kb_table —
выбранную
таблицу
клавиш (0 <= kb_table
< MAX_NR_KEYMAPS) и kb_index —
код
клавиши (0 <=
kb_index < NR_KEYS). kb_value
присваивается
соответствующий
код
действия
или K_HOLE, если
нет такой
клавиши,
или K_NOSUCHMAP, если
значение
kb_table
неверно.
- KDSKBENT
- Создать
элемент в
таблице
трансляции
клавиш. argp
указывает
на struct kbentry.
- KDGKBSENT
- Получить
значение
строки
функциональной
клавиши. argp
указывает
на
структуру
-
struct kbsentry {
unsigned char kb_func;
unsigned char kb_string[512];
};
-
kb_string равна
(заканчивающейся
null) строке,
соответствующей
коду
действия
функциональной
клавиши
kb_func.
- KDSKBSENT
- Создать
элемент
строки
функциональной
клавиши. argp
указывает
на struct 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;
};
-
keycode
устанавливается
в
соответствии
с заданным
scancode (только 89 <=
scancode <= 255. Для 1 <=
scancode <= 88, keycode==scancode;
начиная с Linux
1.1.63).
- KDSETKEYCODE
- Записать
элемент
таблицы
кодов
клавиш
ядра. argp
указывает
на struct kbkeycode
(начиная с Linux
1.1.63).
- KDSIGACCEPT
- Вызывающий
процесс
показывает
свою
готовность
к приёму
сигнала argp,
если он
генерируется
нажатием
соответствующей
комбинации
клавиш (1 <= argp
<= NSIG).
Смотрите
функцию
spawn_console() в linux/drivers/char/keyboard.c.
- VT_OPENQRY
- Получить
первую
доступную
(не
открытую)
консоль. argp
указывает
ячейку
типа int,
устанавливаемое
значение
которой
равно
номеру vt (1 <= *argp
<= MAX_NR_CONSOLES).
- VT_GETMODE
- Считывает
режим
активного
vt. argp
указывает
на
структуру
-
struct vt_mode {
char mode; /* режим vt */
char waitv; /* при установленном; остановка при записи, если терминал неактивен */
short relsig; /* послать сигнал при освобождении req */
short acqsig; /* послать сигнал при захвате */
short frsig; /* не используется (устанавливается в 0) */
};
- которая
задаёт
режим
активного
vt. mode имеет
одно из
значений:
VT_AUTO |
автоматическое
переключение
vt |
VT_PROCESS |
обрабатывать
управление
переключением |
VT_ACKACQ |
подтверждающий
переключатель |
- VT_SETMODE
- Установить
режим
активного
vt. argp
указывает
на struct vt_mode.
- VT_GETSTATE
- Получить
общую
информацию
о
состоянии
vt. argp
указывает
на
структуру
-
struct vt_stat {
unsigned short v_active; /* активный vt */
unsigned short v_signal; /* посылаемый сигнал */
unsigned short v_state; /* битовая маска vt */
};
- For each vt in use, the corresponding bit in the
v_state member is set. (Linux 1.0 through Linux 1.1.92.)
- VT_RELDISP
- Освободить
дисплей.
- VT_ACTIVATE
- Переключиться
на
виртуальный
терминал
argp (1 <= argp <= MAX_NR_CONSOLES).
- VT_WAITACTIVE
- Подождать,
пока
виртуальный
терминал
argp не
станет
активным.
- VT_DISALLOCATE
- Освободить
память,
выделенную
виртуальному
терминалу
argp (начиная
с Linux 1.1.54).
- VT_RESIZE
- Установить
представление
о размере
экрана в
ядре. argp
указывает
на
структуру
-
struct vt_sizes {
unsigned short v_rows; /* количество строк */
unsigned short v_cols; /* количество столбцов */
unsigned short v_scrollsize; /* не используется */
};
- Заметим,
что этот
вызов не
изменяет
видеорежим.
Смотрите
resizecons(8)
(начиная с Linux
1.1.54).
- VT_RESIZEX
- Установить
значение
различных
параметров
экрана в
ядре. argp
указывает
на
структуру
-
struct vt_consize {
unsigned short v_rows; /* количество строк */
unsigned short v_cols; /* количество столбцов */
unsigned short v_vlin; /* количество строк на экране
в пикселях */
unsigned short v_clin; /* количество строк в символе
в пикселях */
unsigned short v_vcol; /* количество столбцов на экране
в пикселях */
unsigned short v_ccol; /* количество столбцов в символе
в пикселях */
};
- Любому
параметру
может быть
присвоено
нулевое
значение,
указывающее
"оставить
без
изменений",
но, если
задано
несколько
параметров,
то они
должны
быть
согласованы.
Этот вызов
не
изменяет
видеорежим.
Смотрите
resizecons(8)
(начиная с Linux
1.3.3).
The action of the following ioctls depends on the first byte in the struct
pointed to by
argp, referred to here as the
subcode. These are
legal only for the superuser or the owner of the current terminal. Symbolic
subcodes are available in
<linux/tiocl.h> since Linux
2.5.71.
-
TIOCLINUX, subcode=0
- Dump the screen. Disappeared in Linux 1.1.92. (With Linux
1.1.92 or later, read from /dev/vcsN or /dev/vcsaN
instead.)
-
TIOCLINUX, subcode=1
- Получить
информацию
о задании.
Удалено в Linux
1.1.92.
-
TIOCLINUX, subcode=TIOCL_SETSEL
- Произвести
выделение.
Значение
argp
указывает
на
структуру
-
struct {
char subcode;
short xs, ys, xe, ye;
short sel_mode;
};
-
xs and ys are the starting column and row.
xe and ye are the ending column and row. (Upper left corner
is row=column=1.) sel_mode 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 a kernel
buffer.
-
TIOCLINUX, subcode=TIOCL_PASTESEL
- Вставить
выделение.
Символы
буфера
выделения
записываются
в fd.
-
TIOCLINUX,
subcode=TIOCL_UNBLANKSCREEN
- Убрать
заставку (blank
screen)
-
TIOCLINUX,
subcode=TIOCL_SELLOADLUT
- Установить
содержимое
256-битной
таблицы
поиска
определения
символов в
«word» для
выделения
«слово за
словом»
(начиная с Linux
1.1.32).
-
TIOCLINUX,
subcode=TIOCL_GETSHIFTSTATE
- Значение
argp
указывает
ячейку
типа char,
которая
устанавливает
значение
переменной
ядра shift_state
(начиная с Linux
1.1.32).
-
TIOCLINUX,
subcode=TIOCL_GETMOUSEREPORTING
- Значение
argp
указывает
ячейку
типа char,
которая
устанавливает
значение
переменной
ядра report_mouse
(начиная с Linux
1.1.33).
-
TIOCLINUX, subcode=8
- Dump screen width and height, cursor position, and all the
character-attribute pairs. (Linux 1.1.67 through Linux 1.1.91 only. With
Linux 1.1.92 or later, read from /dev/vcsa* instead.)
-
TIOCLINUX, subcode=9
- Restore screen width and height, cursor position, and all
the character-attribute pairs. (Linux 1.1.67 through Linux 1.1.91 only.
With Linux 1.1.92 or later, write to /dev/vcsa* instead.)
-
TIOCLINUX,
subcode=TIOCL_SETVESABLANK
- Обработчик
функций
энергосбережения
для нового
поколения
мониторов.
Режим
гашения (blanking)
экрана VESA
устанавливается
равным argp[1],
который
определяет
тип
гашения:
- 0
- Гашение
экрана
выключено.
- 1
- Текущие
установки
регистров
видеоадаптера
сохраняются,
затем
контроллер
программируется
на
отключение
вертикальной
синхронизации.
Происходит
перевод
монитора в
режим
«ожидания»
(standby). Если в
мониторе
есть
таймер Off_Mode,
то он может
в итоге сам
выключить
питание.
- 2
- Текущие
настройки
сохраняются,
а затем
вертикальная
и
горизонтальная
синхронизации
отключаются.
Происходит
перевод в
режим
«выключен»
(off). Если в
мониторе
нет
таймера Off_Mode
или вы
хотите
отключить
питание
сразу же по
истечении
времени blank_timer,
то можете
выбрать
это
значение.
Внимание:
частое
выключение
питания
может
повредить
монитор
(начиная с Linux
1.1.76).
-
TIOCLINUX,
subcode=TIOCL_SETKMSGREDIRECT
- Change target of kernel messages ("console"): by
default, and if this is set to 0, messages are written to the
currently active VT. The VT to write to is a single byte following
subcode. (Since Linux 2.5.36.)
-
TIOCLINUX,
subcode=TIOCL_GETFGCONSOLE
- Returns the number of VT currently in foreground. (Since
Linux 2.5.36.)
-
TIOCLINUX,
subcode=TIOCL_SCROLLCONSOLE
- Scroll the foreground VT by the specified amount of
lines down, or half the screen if 0. lines is
*(((int32_t *)&subcode) + 1). (Since Linux 2.5.67.)
-
TIOCLINUX,
subcode=TIOCL_BLANKSCREEN
- Blank the foreground VT, ignoring "pokes"
(typing): can only be unblanked explicitly (by switching VTs, to text
mode, etc.). (Since Linux 2.5.71.)
-
TIOCLINUX,
subcode=TIOCL_BLANKEDSCREEN
- Returns the number of VT currently blanked, 0 if
none. (Since Linux 2.5.71.)
-
TIOCLINUX, subcode=16
- Never used.
-
TIOCLINUX,
subcode=TIOCL_GETKMSGREDIRECT
- Returns target of kernel messages. (Since Linux
2.6.17.)
On success, 0 is returned (except where indicated). On failure, -1 is returned,
and
errno is set to indicate the error.
- EBADF
- Неправильный
файловый
дескриптор.
- EINVAL
- Неправильный
файловый
дескриптор
или argp.
- ENOTTY
- Файловый
дескриптор
не связан
со
специальным
символьным
устройством,
или
указанный
запрос к
нему
неприменим.
- EPERM
- Недостаточно
прав.
Предупреждение:
не
рассматривайте
эту
справочную
страницу
как
документацию
о ioctl консоли Linux
Она
предназначена
только для
любознательных,
как
альтернатива
исходному
коду. 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
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitriy S. Seregin
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]