Provided by: manpages-ru-dev_4.23.1-1_all bug

ИМЯ

       ioctl_console - управление вводом-выводом (ioctl) консольного терминала и виртуальных консолей

ОПИСАНИЕ

       The  following  Linux-specific  ioctl(2)   operations  are  supported  for  console terminals and virtual
       consoles.  Each operation requires a third argument, assumed here to be 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 mode */
                      char  waitv;   /* if set, hang on writes if not active */
                      short relsig;  /* signal to raise on release op */
                      short acqsig;  /* signal to raise on acquisition */
                      short frsig;   /* unused (set to 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.

              Since Linux 6.7, using this subcode requires the CAP_SYS_ADMIN capability.

       TIOCLINUX, subcode=TIOCL_PASTESEL
              Вставить выделение. Символы буфера выделения записываются в fd.

              Since Linux 6.7, using this subcode requires the CAP_SYS_ADMIN capability.

       TIOCLINUX, subcode=TIOCL_UNBLANKSCREEN
              Убрать заставку (blank screen)

       TIOCLINUX, subcode=TIOCL_SELLOADLUT
              Установить содержимое 256-битной таблицы поиска определения символов в «word» для выделения «слово
              за словом» (начиная с Linux 1.1.32).

              Since Linux 6.7, using this subcode requires the CAP_SYS_ADMIN capability.

       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 The  file descriptor is not associated with a character special device, or the specified operation
              does not apply to it.

       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 <azamat.hackimov@gmail.com>, Dmitriy
       S. Seregin <dseregin@59.ru>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.

Linux man-pages 6.8                               2 мая 2024 г.                                 ioctl_console(2)