NOME¶
console ioctl - ioctl's para terminais de console e consoles virtuais
DESCRIÇÃO¶
ADVERTÊNCIA: Se você usar a informação seguintes
você pode queimar a si mesmo.
ADVERTÊNCIA: ioctl's são chamadas internas do Linux sem
documentação, propensa em ser altera sem nenhum aviso. Usar
as funções POSIX.
As seguintes requisição peculiar
ioctl() do linux são
suportadas. Cada requer um terçeiro argumento, presumido aqui para ser
argp.
- KDGETLED
- Obtém os estados dos LEDs. argp aponta para um
inteiro longo. Os três menores bits de *argp são
selecionados para o estado dos LEDs, como segue:
LED_CAP 0x04 caps lock led
LEC_NUM 0x02 num lock led
LED_SCR 0x01 scroll lock led
- KDSETLED
- Seleciona os LEDs. Os LEDs são selecionados para os
três menores bits de argp. De outra forma, se um bit de ordem
maior é selecionado, os LEDs são revertidos para o estado
normal: mostrando o estado das funções do teclado de caps lock,
num lock, e scroll lock.
Antes da versão 1.1.54, os LEDs devolvia justamente o estado do
correspondente do sinalizador do teclado, e KDGETLED/KDSETLED além disso
alteraria o sinalizador do teclado. Desde a versão 1.1.54 os leds podem
ser usados para exibir informações arbitrárias, mas por
padrão eles mostram o sinalizador de teclado. As duas seguintes ioctl's
são usadas para acessar o sinalizador de teclado.
- KDGKBLED
- Obtém o sinalizador de teclado CapsLock, NumLock,
ScrollLock (sem luzes). argp aponta para um caracter no qual é
marcado o estado do sinalizador. Os três bits de menor ordem (mask
0x7) recebem o estado atual do sinalizador, e os bits de menor ordem nos
próximos quatro bits (mask 0x70) obtém o estado padrão do
sinalizador. (Desde a versão 1.1.54.)
- KDSKBLED
- Seleciona o sinalizador do teclado CapsLock, NumLock,
ScrollLock (sem luzes). argp tem o estado do sinalizador que é
desejado. Os três bits de menor ordem (mask 0x7) tem o estado do
sinalizador, e os bits de menor ordem nos próximos 4 bits (mask 0x70)
tem o estado padrão do sinalizador. (Desde a versão 1.1.54.)
- KDGKBTYPE
- Obtém o tipo de teclado. Este retorna o valor KB_101,
definido como 0x02.
- KDADDIO
- Adiciona uma porta de I/O como válida. Equivalente a
ioperm(arg,1,1).
- KDDELIO
- Remove uma porta de I/O como válida. Equivalente a
ioperm(arg,1,0).
- KDENABIO
- Habilita a I/O para a placa de vídeo. Equivalente a
ioperm(0x3b4, 0x3df-0x3b4+1, 1).
- KDDISABIO
- Desabilita a I/O para a placa de vídeo. Equivalente a
ioperm(0x3b4, 0x3df-0x3b4+1, 0).
- KDSETMODE
- Seleciona o modo texto/gráfico. argp é um
destes:
KD_TEXT 0x00
KD_GRAPHICS 0x01
- KDGETMODE
- Obtém o modo text/graphics. argp aponta para um
tipo longo o qual é selecionado para um dos valores abaixo.
- KDMKTONE
- Gera um som de comprimento especificado. Os 16 bits mais
baixos de argp especificado o periodo em ciclos de relógio, e
os 16 bits mais altos entrega a duração em in msec. Se a
duração é zero, o som é desligado. O controle retorna
imediatamente. Por exemplo, argp = (125<<16) + 0x637
especificaria o beep normalmente associado com ctrl-G. (Desta forma desde
a versão 0.99pl1; interrompido em 2.1.49-50.)
- KIOCSOUND
- Inicia ou termina a geração do som. O 16 bits
mais baixos de argp especificam o periodo em ciclos de relógio
(que é, argp = 1193180/freqüencia). argp = 0
desliga o som. Em ambos os casos, o controle retorna imediatamente.
- GIO_CMAP
- Obtém o atual mapa de cores padrão a partir do
kernel. argp aponta para um vetor de 48 bytes. (Desde 1.3.3.)
- PIO_CMAP
- Altera o mapa de cores padrão no modo texto.
argp aponta para um vetor de 48 bytes o qual contém, em ordem,
os valores Vermelho, Verde, e Azul para as 16 cores disponíveis da
tela: 0 é desligado, e 255 é intensidade máxima. As cores
padrão são, em ordem: preto, vermelho escuro, verde escuro,
marrom, azul escuro, violeta escuro, ciano escuro, cinza claro, cinza
escuro, vermelho brilhante, verde brilhante, amarelo, azul brilhante,
violeta brilhante, ciano brilhante e branco. (Desde 1.3.3.)
- GIO_FONT
- Obtém os 256 caracteres da fonte da tela em forma
expandida. argp aponta para um vetor de 8192 bytes. Falha com
código de erro EINVAL se a fonte atualmente carregado é
uma fonte de 512 caracteres, ou se o console não está em modo
texto.
- GIO_FONTX
- Obtém a fonte da tela e informações
associadas. argp aponta para uma estrutua consolefontdesc (veja
PIO_FONTX). Na chamada, o campo charcount precisaria ser
selecionado para o número máximo de caracteres que poderia
combinar no buffer apontado por chardata. No retorno, o
charcount e charheight são recheados dos respectivos
dados para a fonte atualmente carregada, e o vetor chardata
contém o dados da fonte se o valor inicial de charcount
indicava espaço suficiente disponível; de outra forma o buffer
fica intocado e errno é selecionado para ENOMEM. (Desde
1.3.1.)
- PIO_FONT
- Seleciona uma fonte da tela de 256 caracteres. Carrega a
fonte dentro do gerador de caracteres EGA/VGA. argp aponta para um
mapa de bits de 8192, com 32 bytes por caractere. Somente o primeiro
N deles são usados para uma fonte 8x N (0 < N
<= 32). Esta chamada também elimina o mapeamento Unicode.
- PIO_FONTX
- Seleciona a fonte da tela e associa informações
de desenho. argp aponta para uma
struct consolefontdesc {
u_short charcount; /* caracteres na fonte (256 ou 512) */
u_short charheight; /* linhas rastreadas por caracteres (1-32) */
char * chardata; /* dados da fone em forma expandida */
};
Se necessário a tela será apropriadamente redimensionada, e
SIGWINCH envia para o processo apropriado. Esta chamada também
elimina o mapeamento Unicode. (Desde 1.3.1.)
- PIO_FONTRESET
- Repões o fonte da tela, tamanho e mapeamento Unicode
para a incialização padrão. argp não é
usado, mas seria selecinado para NULL para assegurar
compatibilidade com futuras versões do Linux. (Desde 1.3.28.)
- GIO_SCRNMAP
- Obtém o mapeamento da tela a partir do kernel.
argp aponta para uma área de tamanho E_TABSZ, o qual é
carregado com a posicionamento da fonte usada para exibir cada caractere.
Esta chamada é provavelmente para retornar informações
imprestáveis se a fonte atualmente carregada é maior que 256
caracteres.
- GIO_UNISCRNMAP
- Obtém o mapeamento completo Unicode da tela a partir
do kernel. argp aponta para uma área de tamanho
E_TABSZ*sizeof(unsigned short), o qual é carregado com a
representação Unicode de cada caractere. Um conjunto especial de
Unicode, começando em U+F000, são usados para representar o
mapeamento ``direto para a fonte''. (Desde 1.3.1.)
- PIO_SCRNMAP
- Carrega o ``definível pelo usuário'' (quatro)
tabelas no kernel o qual mapeia bytes dentro dos simbolos da tela da
console. argp aponta para uma área de tamanho E_TABSZ.
- PIO_UNISCRNMAP
- Carrega o ``definível pelo usuário'' (quatro)
tabelas no kernel a qual mapeia bytes dentro dos Unicodes, o qual são
então traduzidos em símbolos da tela de acordo com o mapa
atualmente carregado de Unicode para fonte. Unicodes especiais iniciam em
U+F000 e podem ser usados para mapear diretamente para os símbolos da
fonte. (Desde 1.3.1.)
- GIO_UNIMAP
- Obtém o mapeamento Unicode para fonte a partir do
kernel. argp aponta para uma
struct unimapdesc {
u_short entry_ct;
struct unipair * entries;
};
aonde entries aponta para um vetor de
struct unipair {
u_short unicode;
u_short fontpos;
};
(Desde 1.1.92.)
- PIO_UNIMAP
- Coloca o mapeamento unicode para fonte no kernel.
argp aponta para uma estrutura unimapdesc. (Desde 1.1.92)
- PIO_UNIMAPCLR
- Limpa a tabela, possivelmente um algoritmo picado.
argp aponta para uma
struct unimapinit {
u_short advised_hashsize; /* 0 if no opinion */
u_short advised_hashstep; /* 0 if no opinion */
u_short advised_hashlevel; /* 0 if no opinion */
};
(Desde 1.1.92.)
- KDGKBMODE
- Obtém o modo atual do teclado. argp aponta para
um longo o qual é selecionado para um destes:
K_RAW 0x00
K_XLATE 0x01
K_MEDIUMRAW 0x02
K_UNICODE 0x03
- KDSKBMODE
- Seleciona o modo atual do teclado. argp é um
longo igual a um dos valores acima.
- KDGKBMETA
- Obtém o modo de manipulação da tecla meta.
argp aponta para um longo o qual é selecionado para um destes:
K_METABIT 0x03 set high order bit
K_ESCPREFIX 0x04 escape prefix
- KDSKBMETA
- Seleciona o modo de manipulação da tecla meta.
argp é um longo igual a um dos valores acima.
- KDGKBENT
- Obtém uma entrada na tabela de translação da
tecla (keycode para action code). argp aponta para uma
struct kbentry {
u_char kb_table;
u_char kb_index;
u_short kb_value;
};
com o primeito dos dos membros preenchido em: kb_table seleciona a
tabela de tecla (0 <= kb_table < MAX_NR_KEYMAPS), e
kb_index é o keycode (0 <= kb_index < NR_KEYS).
kb_value é selecionado para o correspondente action code, ou
K_HOLE se não havia tecla semelhante, ou K_NOSUCHMAP se
kb_table é invalido.
- KDSKBENT
- Seleciona uma entrada na tabela de tradução.
argp aponta para uma estrutura kbentry.
- KDGKBSENT
- Obtém uma tecla de função. argp
aponta para uma
struct kbsentry {
u_char kb_func;
u_char kb_string[512];
};
kb_string é selecionada para a (terminação NULA)
seqüencia correspondente para a tecla de função
kb_func action code.
- KDSKBSENT
- Seleciona uma entrada para uma tecla de função.
argp aponta para uma struct kbsentry.
- KDGKBDIACR
- Lê a tabela de acentuação do kernel.
argp aponta para uma
struct kbdiacrs {
unsigned int kb_cnt;
struct kbdiacr kbdiacr[256];
};
onde kb_cnt é o número de entradas no vetor, cada qual
é uma
struct kbdiacr { u_char diacr, base, result; };
- KDGETKEYCODE
- Lê a tabela de entrada keycode do kernel (rastrei o
code para keycode). argp aponta para uma
struct kbkeycode { unsigned int scancode, keycode; };
keycode é selecionada para corresponder ao scancode
fornecido. (89 <= scancode <= 255 somente. Para 1 <=
scancode <= 88, keycode==scancode.) (Desde
1.1.63.)
- KDSETKEYCODE
- Escreve no kernel a entrada da tabela keycode. argp
aponta para uma estrutura kbkeycode. (Desde 1.1.63.)
- KDSIGACCEPT
- O processo chamante indicado dele concordância para
aceita o sinal argp quandop ele é gerado pelo presionamento de
uma combinação de teclas apropriadas. (1 <= argp <=
NSIG). (Veja spawn_console() em linux/drivers/char/keyboard.c.)
- VT_OPENQRY
- Devolve o primeiro console disponivel (fechado).
argp aponta para um int o qual é selecionado para um
número de vt (1 <= *argp <= MAX_NR_CONSOLES).
- VT_GETMODE
- Obtém o modo de ativação do vt. argp
aponta para uma
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) */
};
mode é selecionada para um destes valores:
VT_AUTO auto vt switching
VT_PROCESS process controls switching
VT_ACKACQ acknowledge switch
- VT_SETMODE
- Seleciona o modo de ativação do vt. argp
aponta para uma struct vt_mode.
- VT_GETSTATE
- Obtém a informação global do estado vt.
argp aponta para uma
struct vt_stat {
ushort v_active; /* active vt */
ushort v_signal; /* signal to send */
ushort v_state; /* vt bitmask */
};
Para cada vt em uso, o bit correspondente no membro v_state é
selecionado. (Kerneis 1.0 direto 1.1.92.)
- VT_RELDISP
- Libera um monitor.
- VT_ACTIVATE
- Troca para o vt argp (1 <= argp <=
MAX_NR_CONSOLES).
- VT_WAITACTIVE
- Aguarda até o vt argp ser ativado.
- VT_DISALLOCATE
- Desalocar a memória associada com o vt argp.
(Desde 1.1.54.)
- VT_RESIZE
- Seleciona o tamanho ideal da tela kernel. argp
aponta para um
struct vt_sizes {
ushort v_rows; /* # rows */
ushort v_cols; /* # columns */
ushort v_scrollsize; /* no longer used */
};
Note que isto não é alterado para o modo de video. Veja
resizecons(8). (Desde 1.1.54.)
- VT_RESIZEX
- Seleciona os vários parâmetros ideais da tela do
kernel. argp aponta para um
struct vt_consize {
ushort v_rows; /* number of rows */
ushort v_cols; /* number of columns */
ushort v_vlin; /* number of pixel rows on screen */
ushort v_clin; /* number of pixel rows per character */
ushort v_vcol; /* number of pixel columns on screen */
ushort v_ccol; /* number of pixel columns per character */
};
Qualquer parâmetro pode ser selecionada para zero, indicando ``nenhuma
alteração'', mas se multiplos parâmetros são
alterados, eles devem ser auto consistentes. Note que isto não mudou
o modo de video. Veja resizecons(8). (Desde 1.3.3.)
A ação das seguintes following dependia do primeiro byte na estrutura
apontada pelo
argp, relativo a este lugar como o
subcode. Estes
são somente válido para o superusuário ou o proprietário
do tty atual.
- TIOCLINUX, subcode=0
- Esvazia a tela. Desapareçeu em 1.1.92. (Com o kernel
1.1.92 ou posterior, lê a partir de /dev/vcsN ou /dev/vcsaN ao invez
de.)
- TIOCLINUX, subcode=1
- Obtém a informação da tarefa.
Desapareçeu em 1.1.92.
- TIOCLINUX, subcode=2
- Seleciona a seleção. argp aponta para uma
struct {char subcode;
short xs, ys, xe, ye;
short sel_mode;
}
xs e ys estão começando as colunas e linhas.
xe e ye estão terminando as colunas e linhas. (O canto
superior esquerdo é a linha=coluna=1.) sel_mode é 0 para
uma seleção caractere por caractere, 1 para uma
seleção palavra por palavra, ou 2 para uma seleção
linha por linha. Os caracteres indicados na tela são brilhantes e
guardados no vetor estático sel_buffer em devices/char/console.c.
- TIOCLINUX, subcode=3
- Cola a seleção. Os caracteres no buffer são
escritos para fd.
- TIOCLINUX, subcode=4
- Tela não vazia.
- TIOCLINUX, subcode=5
- Seleciona o conteúdo de uma tabela de
visualização de caracteres de 256 bits definida na
"palavra", para seleção palavra por palavra. (Desde
1.1.32.)
- TIOCLINUX, subcode=6
- argp aponta para um char oq qual é selecionada
para o valor da variável do kernel shift_state. (Desde
1.1.32.)
- TIOCLINUX, subcode=7
- argp aponta para um caractere o qual é
selecionado para o valor da variável do kernel report_mouse.
(Desde 1.1.33.)
- TIOCLINUX, subcode=8
- Esvazia a tela na largura e comprimento, posição
do cursor, e todos os pares de atributos de caracteres. (Somente os
kerneis 1.1.67 direto 1.1.91. Com o kernel 1.1.92 ou mais novos, lê a
partir /dev/vcsa* ao invez de.)
- TIOCLINUX, subcode=9
- Restaura o comprimento e largura da tela, posição
do cursor, e todos os pares de atributos de caracteres. (Somente os
kerneis 1.1.67 direto 1.1.91. Com o kernel 1.1.92 ou mais novos, lê a
partir /dev/vcsa* ao invez de.)
- TIOCLINUX, subcode=10
- Manipulação da caracteristíca de Power
Saving da nova geração de monitores. Tela VESA em modo vazio
é selecionado para argp[1], o qual governa o que a tela em
branco fará:
0: Tela em branco é desabilitada.
1: O adptador de vídeo atual ``registra a seleções
guardadas, então o controlador é programada para desligar os
pulsos de sincronização vertical. Isto coloca o monitor em mode
"standby". Se o monitor tem um temporizador Off_Mode, então
ele irá eventualmente desligar a enegia de si mesmo.
2: As seleções atuais são guardadas, então ambos
os pulsos de sincronização vertical e horizontal são
desligados. Isto coloca o monitor em modo "off". Se o monitor
tem um temporizador Off_Mode, ou se você procura que seu monitor
desligue imediadamente quando o tempo de blank_timer termina, então
você preferirá esta opção. ( Cuidado: Desligar
o monitor freqünetemente irá danificr o monitor.)
(Desde 1.1.76.)
VALORES DE RETORNO¶
-1 para erro, e
errno é selecionado.
ERRORS¶
errno pode ter um destes valores:
- EBADF
- descritor de arquivo é inválido.
- ENOTTY
- descritor de arquivo não é associado com um
dispositivo especial de caractere, ou a requesição especificada
não se aplica para ele.
- EINVAL
- descritor de arquivo ou argp é invalido.
- EPERM
- violação de permissão.
ADVERTÊNCIAS¶
Não respeite esta página de manual como documentação das
chamadas de console ioctl's do Linux. Isto é fornecido para curiosos
somente, com um alternativa para estudar o fonte. Ioctl's são chamadas
não documentadas do Linux, propensa em ser alterada sem nenhum aviso. (E
de fato, esta página descreve mais ou menos a situação da
versão do kernel 1.1.94; tem pequenas e muitas e não somente
pequenas diferenças com as versão mais recentes.)
Muito frequentemente, são introduzidas para comunicação ente o
kernel e um programa particular bem conhecido, (fdisk, hdparm, setserial,
tunelp, loadkeys, selection, setfont, etc.), e o comportamento deles será
alterado quando requerido por este programa particular.
Programas usando estas ioctl's podem não ser portáveis para outras
versões de Unix, podem não trabalhar em versões antiguas do
Linux, e podem não trabalhar nas futuras versões do Linux.
Usar as funções POSIX.
VEJA TAMBÉM¶
kbd_mode(1),
loadkeys(1),
dumpkeys(1),
mknod(1),
setleds(1),
setmetamode(1),
ioperm(2),
termios(2),
execve(2),
fcntl(2),
console(4),
console_codes(4),
mt(4),
sd(4),
tty(4),
ttys(4),
vcs(4),
vcsa(4),
charsets(7),
mapscrn(8),
setfont(8),
resizecons(8),
/usr/include/linux/kd.h,
/usr/include/linux/vt.h
TRADUZIDO POR LDP-BR em 21/08/2000.¶
André L. Fassone Canova <lonelywolf@blv.com.br> (tradução)
Carlos Augusto Horylka <horylka@conectiva.com.br> (revisão)