ИМЯ
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 из
них
используются
для шрифта
8xN (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 */
};
- Для
каждого
используемого
vt
устанавливается
соответствующий
бит в поле
v_state. (В
версиях с 1.0
до 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).
Действие
следующих
ioctl зависит
от первого
байта
структуры,
указываемой
argp, далее
называемой
subcode.
Доступны
только
суперпользователю
или
владельцу
текущего
терминала.
- TIOCLINUX,
subcode=0
- Сделать
дамп
экрана.
Удалено в Linux
1.1.92 (c ядром 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 —
конечные
столбец и
строка (у
левого
верхнего
угла
строка=столбец=1).
Значение
sel_mode равно 0
для
выделения
«символ за
символом»,
1 для
выделения
«слово за
словом»
или 2 для
выделения
«строки за
строкой».
Выделенные
символы
подсвечиваются
и
сохраняются
в
статическом
массиве sel_buffer
из devices/char/console.c.
- TIOCLINUX,
subcode=3
- Вставить
выделение.
Символы
буфера
выделения
записываются
в fd.
- TIOCLINUX,
subcode=4
- Убрать
заставку (blank
screen)
- TIOCLINUX,
subcode=5
- Установить
содержимое
256-битной
таблицы
поиска
определения
символов в
«word» для
выделения
«слово за
словом»
(начиная с Linux
1.1.32).
- TIOCLINUX,
subcode=6
- Значение
argp
указывает
ячейку
типа char,
которая
устанавливает
значение
переменной
ядра shift_state
(начиная с Linux
1.1.32).
- TIOCLINUX,
subcode=7
- Значение
argp
указывает
ячейку
типа 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
- Обработчик
функций
энергосбережения
для нового
поколения
мониторов.
Режим
гашения (blanking)
экрана VESA
устанавливается
равным argp[1],
который
определяет
тип
гашения:
- 0:
- Гашение
экрана
выключено.
- 1:
- Текущие
установки
регистров
видеоадаптера
сохраняются,
затем
контроллер
программируется
на
отключение
вертикальной
синхронизации.
Происходит
перевод
монитора в
режим
«ожидания»
(standby). Если в
мониторе
есть
таймер Off_Mode,
то он может
в итоге сам
выключить
питание.
- 2:
- Текущие
настройки
сохраняются,
а затем
вертикальная
и
горизонтальная
синхронизации
отключаются.
Происходит
перевод в
режим
«выключен»
(off). Если в
мониторе
нет
таймера Off_Mode
или вы
хотите
отключить
питание
сразу же по
истечении
времени blank_timer,
то можете
выбрать
это
значение.
Внимание:
частое
выключение
питания
может
повредить
монитор
(начиная с Linux
1.1.76).
ВОЗВРАЩАЕМОЕ
ЗНАЧЕНИЕ
При
успешном
выполнении
возвращается
0. В случае
ошибки
возвращается
-1, а errno
устанавливается
в
соответствующее
значение.
ОШИБКИ
Переменная
errno может
принимать
следующие
значения:
- 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