ioctl_console - Ioctls pour les consoles et terminaux virtuels
Les requêtes
ioctl(2) suivantes spécifiques à Linux
sont disponibles pour les consoles et terminaux virtuels. Chacune d'entre
elles nécessite un troisième paramètre, ici noté
argp.
- KDGETLED
- Récupérer l'état des LED. argp
pointe vers un char. L'état des LED est enregistré
dans les trois bits de poids le plus faible de *argp, comme
indiqué ci-dessous :
LED_CAP |
0x04 |
LED du verrouillage des majuscules |
LED_NUM |
0x02 |
LED du verrouillage du pavé numérique |
LED_SCR |
0x01 |
LED du verrouillage du défilement |
- KDSETLED
- Configurer l'état des LED. Les LED sont
configurées suivant la valeur des trois bits de poids faible de
l'entier non signé dans argp. Cependant, si un bit de poids
plus fort est défini, les LED reviennent dans leur état
normal, affichant l'état des fonctions du clavier :
verrouillage des majuscules, verrouillage du pavé numérique
et verrouillage du défilement.
Avant la version 1.1.54 du noyau, les LED reflétaient seulement
l'état fonctionnel du clavier, modifiable par KDGETLED/KDSETLED. Depuis
la version 1.1.54, les LED peuvent être utilisées pour
afficher des informations arbitraires, mais affichent par défaut
l'état fonctionnel du clavier. Les deux ioctls ci-dessous permettent
d'accéder à cet état.
- KDGKBLED
- Récupère l'état du clavier (et non des
LED) : verrouillage des majuscules, verrouillage du pavé
numérique et verrouillage du défilement. argp pointe
vers un char stockant l'état. Les trois bits de poids faible
(masque 0x7) indiquent l'état actuel, alors que les trois bits de
poids faible de l'autre demi-octet (masque 0x70) indiquent l'état
par défaut (depuis Linux 1.1.54).
- KDSKBLED
- Définir l'état du clavier (et non des
LED) : verrouillage des majuscules, verrouillage du pavé
numérique et verrouillage du défilement. argp est un
entier long non signé qui indique les états voulus. Les
trois bits de poids faible (masque 0x7) indiquent les états et les
trois bits de poids faible de l'autre demi-octet suivant (masque 0x70)
indiquent les états par défaut. (Depuis
Linux 1.1.54).
- KDGKBTYPE
- Récupérer le type de clavier. Cela renvoie la
valeur KB_101, définie comme 0x02.
- KDADDIO
- Ajouter un port aux ports d'entrée/sortie valables.
Équivalent à ioperm(arg,1,1).
- KDDELIO
- Supprimer un port des ports d'entrée/sortie
valables. Équivalent à ioperm(arg,1,0).
- KDENABIO
- Activer les entrées/sorties vers la carte
vidéo. Équivalent à ioperm(0x3b4, 0x3df-0x3b4+1,
1).
- KDDISABIO
- Désactiver les entrées/sorties vers la carte
vidéo. Équivalent à ioperm(0x3b4, 0x3df-0x3b4+1,
0).
- KDSETMODE
- Définir le mode texte/graphique. argp est un
entier non signé qui peut valoir :
KD_TEXT |
0x00 |
KD_GRAPHICS |
0x01 |
- KDGETMODE
- Récupèrer le mode texte/graphique.
argp pointe vers un int qui prend une des valeurs
précédentes de KDSETMODE.
- KDMKTONE
- Générer un son d'une durée
donnée. Les 16 bits de poids faible de l'entier long non
signé argp indiquent la période des cycles
d’horloge et les 16 bits de poids fort indiquent la
durée en milliseconde. Une durée nulle correspond à
un son coupé. Le contrôle est immédiatement rendu.
Par exemple,
argp = (125<<16) + 0x637
indiquerait le bip normalement associé à Ctrl-G (il en est
ainsi depuis Linux 0.99pl1 ; cassé depuis
Linux 2.1.49-50.
- KIOCSOUND
- Démarrer ou arrêter la
génération du son. Les 16 bits de poids faible de
argp indiquent la période des cycles d’horloge
(c'est-à-dire
argp = 1193180/fréquence).
argp = 0 coupe le son. Dans les deux cas, le
contrôle de la ligne de commande est rendu
immédiatement.
- GIO_CMAP
- Récupérer du noyau la table de correspondance
actuelle des couleurs par défaut. argp pointe vers un
tableau de 48 octets. (Depuis Linux 1.3.3.)
- PIO_CMAP
- Modifier le plan par défaut des couleurs du mode
texte. argp pointe vers un tableau de 48 octets contenant,
dans l'ordre, les valeurs rouge, vert et bleu, des 16 couleurs
disponibles de l'écran : 0 pour aucune, 255 pour
l'intensité maximale. Les couleurs par défaut sont dans
l'ordre : le noir, le rouge foncé, le vert foncé, le
marron, le bleu foncé, le violet foncé, le cyan
foncé, le gris clair, le gris foncé, le rouge brillant, le
vert brillant, le jaune, le bleu brillant, le violet brillant, le cyan
brillant et le blanc (Depuis Linux 1.3.3).
- GIO_FONT
- Récupère la fonte de l'écran de
256 caractères sous sa forme étendue. argp
pointe vers un tableau de 8192 octets. Le code d'erreur
EINVAL est renvoyé si la fonte alors chargée est
définie sur 512 caractères ou si la console n'est pas
en mode texte.
- GIO_FONTX
- Récupère la fonte de l'écran et ses
informations afférentes. argp pointe vers une struct
consolefontdesc (consultez PIO_FONTX). Lors de l'appel, le
champ charcount devrait être configuré au nombre
maximal de caractères correspondant à la taille du tampon
vers lequel pointe chardata. Lors du retour, charcount et
charheight sont remplis des données respectives de la fonte
actuellement chargée, et le tableau chardata contient les
données de la fonte si la valeur initiale de charcount
indique un espace disque suffisant, sinon le tampon reste intact et
errno contient ENOMEM. (Depuis Linux 1.3.3.)
- PIO_FONT
- Définit la fonte (de 256 caractères)
de l'écran et charge la fonte dans le générateur de
caractères EGA/VGA. argp pointe vers un tableau de
correspondance de 8192 octets, comprenant 32 octets par
caractère. Seuls les N premiers d'entre eux sont
utilisés pour une fonte 8x N (0 < N
<= 32). Cet appel invalide également la correspondance
Unicode.
- PIO_FONTX
- Définit la fonte de l'écran et les
informations pour le rendu. argp pointe vers une
-
struct consolefontdesc {
unsigned short charcount; /* caractères de la fonte
(256 ou 512) */
unsigned short charheight; /* lignes par caractère
(1-32) */
char *chardata; /* données de la fonte
forme étendue */
};
- Si nécessaire, la taille de l'écran sera
modifiée et un signal SIGWINCH sera envoyé aux
processus appropriés. Cet appel invalide également la
correspondance Unicode. (Depuis Linux 1.3.1.)
- PIO_FONTRESET
- Rétablit la fonte, la taille et la correspondance
Unicode de l'écran aux valeurs par défaut de
démarrage (boot). argp n'est pas utilisé, mais doit
valoir NULL pour la compatibilité avec les futures versions de
Linux. (Depuis Linux 1.3.28.)
- GIO_SCRNMAP
- Récupérer la correspondance de l'écran
du noyau. argp pointe vers un espace de taille E_TABSZ, qui recevra
les positions de la fonte utilisées pour afficher chaque
caractère. Les informations renvoyées par cet appel ne
seront sûrement pas intéressantes si la fonte chargée
a plus de 256 caractères.
- GIO_UNISCRNMAP
- Récupérer la correspondance Unicode
complète du noyau. argp pointe vers un espace de taille
E_TABSZ*sizeof(unsigned short), qui recevra la
représentation Unicode de chaque caractère. Un jeu
spécial d'Unicode, démarrant à U+F000, est
utilisé pour représenter les correspondances directes avec
les fontes (« direct to font mappings »).
(Depuis Linux 1.3.1.)
- PIO_SCRNMAP
- Charge dans le noyau la table
« définissable par l'utilisateur » (la
quatrième), qui fait la correspondance entre octets et symboles sur
l'écran de la console. argp pointe vers un espace de taille
E_TABSZ.
- PIO_UNISCRNMAP
- Charge dans le noyau la table
« définissable par l'utilisateur » (la
quatrième), qui fait la correspondance entre octets et Unicode, qui
sont alors convertis en symboles à l'écran d'après la
table de correspondance déjà chargée entre Unicode et
fonte. Les Unicode spéciaux, démarrant à U+F000,
peuvent être utilisés pour une correspondance directe avec
les symboles de la fonte. (Depuis Linux 1.3.1.)
- GIO_UNIMAP
- Récupérer la correspondance Unicode/fonte du
noyau. argp pointe vers une structure de type :
-
struct unimapdesc {
unsigned short entry_ct;
struct unipair *entries;
};
- où entries pointe vers un tableau de
-
struct unipair {
unsigned short unicode;
unsigned short fontpos;
};
- (Depuis Linux 1.1.92.)
- PIO_UNIMAP
- Définir l'association Unicode/fonte du noyau.
argp pointe vers une struct unimapdesc. (Depuis
Linux 1.1.92)
- PIO_UNIMAPCLR
- Vider la table, éventuellement en informant
l'algorithme de hachage. argp pointe vers une structure de
type :
-
struct unimapinit {
unsigned short advised_hashsize; /* 0 si sans opinion */
unsigned short advised_hashstep; /* 0 si sans opinion */
unsigned short advised_hashlevel; /* 0 si sans opinion */
};
- (Depuis Linux 1.1.92.)
- KDGKBMODE
- Récupère le mode courant du clavier.
argp pointe vers un long qui prend une de ces
valeurs :
K_RAW |
0x00 /* mode brut (scancode) */ |
K_XLATE |
0x01 /* Traduire les codes de touches avec les plans de touches
*/ |
K_MEDIUMRAW |
0x02 /* mode brut intermédiaire (scancode) */ |
K_UNICODE |
0x03 /* mode Unicode */ |
K_OFF |
0x04 /* mode inactif ; depuis Linux 2.6.39 */ |
. |
|
- KDSKBMODE
- Définit le mode actuel du clavier. argp est
un long égal à une des valeurs affichées dans
KDGKBMODE.
- KDGKBMETA
- Récupère le mode de gestion des touches
méta. argp pointe vers un long qui prend une des
valeurs suivantes :
K_METABIT |
0x03 |
positionner le bit de poids fort |
K_ESCPREFIX |
0x04 |
préfixe d'échappement |
- KDSKBMETA
- Définit le mode de gestion des touches méta.
argp est un long égal à une des valeurs
décrites ci-dessus pour KDGKBMETA.
- KDGKBENT
- Récupère une entrée dans la table de
traduction des touches (code de touche vers code d'action). argp
pointe vers une structure de type :
-
struct kbentry {
unsigned char kb_table;
unsigned char kb_index;
unsigned short kb_value;
};
- dont les deux premiers membres sont
renseignés : kb_table sélectionne la table de
touches (0<= kb_table < MAX_NR_KEYMAPS), et kb_index
est le code de touche (0 <= kb_index < NR_KEYS).
kb_value est positionné avec le code d'action correspondant
ou K_HOLE si la touche n'existe pas ou encore K_NOSUCHMAP si
kb_table n'est pas valable.
- KDSKBENT
- Définit une entrée de la table de traduction.
argp pointe vers une struct kbentry.
- KDGKBSENT
- Récupère la chaîne d'une touche
fonction. argp pointe vers une structure de type :
-
struct kbsentry {
unsigned char kb_func;
unsigned char kb_string[512];
};
-
kb_string fournit la chaîne (terminée
par un octet NULL ) correspondant au code d'action de la
kb_funcième touche fonction.
- KDSKBSENT
- Définit la chaîne d'une touche fonction.
argp pointe vers une struct kbsentry.
- KDGKBDIACR
- Lire la table des accents du noyau. argp pointe vers
une structure de type :
-
struct kbdiacrs {
unsigned int kb_cnt;
struct kbdiacr kbdiacr[256];
};
- où kb_cnt est le nombre d'entrées dans
le tableau, chaque entrée étant une structure de
type :
-
struct kbdiacr {
unsigned char diacr;
unsigned char base;
unsigned char result;
};
- KDGETKEYCODE
- Lire une entrée de la table des codes touche du
noyau (« scan code » vers code touche).
argp pointe vers une structure de type :
-
struct kbkeycode {
unsigned int scancode;
unsigned int keycode;
};
-
keycode fournit le code touche correspondant
à scancode. (89 <= scancode <= 255 seulement.
Pour 1 <= scancode <= 88, keycode==scancode.)
(Depuis Linux 1.1.63.)
- KDSETKEYCODE
- Écrire une entrée de la table des codes
touche du noyau. argp pointe vers une struct kbkeycode.
(Depuis Linux 1.1.63.)
- KDSIGACCEPT
- Le processus signale sa volonté d'accepter le signal
argp quand il est généré en pressant une
certaine combinaison de touches. (1 <= argp <= NSIG).
(Consultez spawn_console() dans
linux/drivers/char/keyboard.c)
- VT_OPENQRY
- Renvoie la première console disponible (non
ouverte). argp pointe vers un int auquel est affecté
le numéro du terminal virtuel (1 <= *argp <=
MAX_NR_CONSOLES).
- VT_GETMODE
- Récupérer le mode du terminal virtuel
(« vt ») actif. argp pointe vers une
structure de type :
-
struct vt_mode {
char mode; /* mode du terminal virtuel */
char waitv; /* si positionné, met les écritures en attente
et permet les écritures, sinon */
short relsig; /* signal à lever en cas de libération */
short acqsig; /* signal à lever en cas d'acquisition */
short frsig; /* pas utilisé (mis à 0) */
};
- qui indique le mode du terminal virtuel actif. mode
prend une des valeurs :
VT_AUTO |
changement de vt automatique |
VT_PROCESS |
changement de contrôles de processus |
VT_ACKACQ |
changement de contexte |
- VT_SETMODE
- Définir l'état du terminal virtuel actif.
argp pointe vers une struct vt_mode.
- VT_GETSTATE
- Récupérer l'information globale sur
l'état du terminal virtuel. argp pointe vers une structure
de type :
-
struct vt_stat {
unsigned short v_active; /* terminal virtuel actif */
unsigned short v_signal; /* signal à envoyer */
unsigned short v_state; /* masque de bits de terminaux virtuels */
};
- Pour chaque terminal virtuel utilisé, le bit
correspondant de v_state est positionné. (Linux 1.0
à Linux 1.1.92.)
- VT_RELDISP
- Libérer un affichage.
- VT_ACTIVATE
- Passer au terminal virtuel argp (1 <= argp
<= MAX_NR_CONSOLES).
- VT_WAITACTIVE
- Attendre jusqu'à ce que le terminal virtuel
argp soit activé.
- VT_DISALLOCATE
- Libérer la mémoire associée au
terminal virtuel argp. (Depuis Linux 1.1.54.)
- VT_RESIZE
- Informer le noyau sur la taille de l'écran.
argp pointe vers une structure de type :
-
struct vt_sizes {
unsigned short v_rows; /* nombre de lignes */
unsigned short v_cols; /* nombre de colonnes */
unsigned short v_scrollsize; /* n'est plus utilisé */
};
- Notez que ça ne change pas le mode vidéo.
Consultez resizecons(8). (Depuis Linux 1.1.54.)
- VT_RESIZEX
- Informer le noyau de divers paramètres de
l'écran. argp pointe vers une structure de
type :
-
struct vt_consize {
unsigned short v_rows; /* nombre de lignes */
unsigned short v_cols; /* nombre de colonnes */
unsigned short v_vlin; /* lignes de pixels
sur l'écran */
unsigned short v_clin; /* lignes de pixels
par caractère */
unsigned short v_vcol; /* colonnes de pixels
sur l'écran */
unsigned short v_ccol; /* colonnes de pixels
par caractère */
};
- Tout paramètre peut être mis à
zéro pour indiquer qu'aucun changement n'est souhaité. Si
plusieurs paramètres sont positionnés, ils doivent
être cohérents. Notez que ça ne change pas le mode
vidéo. Consultez resizecons(8). (Depuis
Linux 1.3.3.)
L'action des ioctls suivants dépend du premier octet de la structure vers
laquelle pointe
argp, qui sera appelé
subcode par la
suite. Elles ne sont autorisées que pour le superutilisateur ou pour le
propriétaire du terminal courant. Les
subcodes symboliques sont
disponibles dans
<linux/tiocl.h> depuis Linux 2.5.71.
-
TIOCLINUX, subcode=0
- Faire un cliché de l'écran. A disparu dans
Linux 1.1.92. (Avec Linux 1.1.92 et suivants, lit
/dev/vcsN ou /dev/vcsaN à la place.)
-
TIOCLINUX, subcode=1
- Récupérer les informations sur la
tâche. A disparu dans Linux 1.1.92.
-
TIOCLINUX, subcode=TIOCL_SETSEL
- Définir la sélection. argp pointe vers
une structure de type :
-
struct {
char subcode;
short xs, ys, xe, ye;
short sel_mode;
};
-
xs et ys sont la colonne et la ligne de
début. xe et ye la colonne et la ligne de fin. (Le
coin en haut à gauche a pour coordonnées ligne=colonne=1.)
sel_mode vaut 0 pour les sélections caractère
par caractère, 1 pour les sélections mot à mot
ou 2 pour les sélections ligne à ligne. Les
caractères de l'écran indiqués sont surlignés
et sauvés dans un tampon du noyau.
-
TIOCLINUX, subcode=TIOCL_PASTESEL
- Coller la sélection. Les caractères dans le
tampon de la sélection sont écrits dans fd.
-
TIOCLINUX,
subcode=TIOCL_UNBLANKSCREEN
- Arrête l'économiseur d'écran.
-
TIOCLINUX,
subcode=TIOCL_SELLOADLUT
- Définit le contenu de la table de correspondance (de
256 bits) définissant les caractères d'un
« mot » pour une sélection mot à
mot. (Depuis Linux 1.1.32.)
-
TIOCLINUX,
subcode=TIOCL_GETSHIFTSTATE
-
argp pointe vers un caractère qui prend la
valeur de la variable shift_state du noyau. (Depuis
Linux 1.1.32.)
-
TIOCLINUX,
subcode=TIOCL_GETMOUSEREPORTING
-
argp pointe vers un caractère qui prend la
valeur de la variable report_mouse du noyau. (Depuis
Linux 1.1.33.)
-
TIOCLINUX, subcode=8
- Faire un cliché de la largeur et hauteur de
l'écran, de la position du curseur et de toutes les paires
caractère-attribut. (Linux 1.1.67 à Linux 1.1.91
uniquement. Avec les Linux 1.1.92 et suivants, lit
/dev/vcsa* à la place.)
-
TIOCLINUX, subcode=9
- Restaurer la largeur et la hauteur de l'écran, la
position du curseur et toutes les paires caractère-attribut.
(Linux 1.1.67 à Linux 1.1.91 uniquement. Avec
Linux 1.1.92 et suivants, écrit dans /dev/vcsa*
à la place.)
-
TIOCLINUX,
subcode=TIOCL_SETVESABLANK
- Gère les fonctionnalités de gestion
d'énergie de la nouvelle génération de moniteurs. Le
mode de veille d'écran VESA est défini à
argp[1], qui définit ce que la veille produit :
- 0
- La veille de l'écran est
désactivée.
- 1
- Les paramètres du registre de l'adaptateur
vidéo sont enregistrés, puis le contrôleur est
programmé pour couper les pulsations de synchronisation verticales.
Cela place le moniteur en mode « standby ». Si
votre moniteur a un minuteur, il finira par s'éteindre de
lui-même.
- 2
- Les paramètres courants sont enregistrés,
puis les pulsations de synchronisation verticales et horizontales sont
coupées. Cela place votre moniteur en mode
« off ». Si votre moniteur n'a pas de minuteur
ou si vous souhaitez que votre moniteur s'éteigne
immédiatement quand le minuteur de veille (blank_timer) arrive
à bout, vous devriez choisir cette option. (
Prudence : Des extinctions fréquentes
abîmeront votre moniteur.) (Depuis Linux 1.1.76)
-
TIOCLINUX,
subcode=TIOCL_SETKMSGREDIRECT
- Modifier la cible des messages du noyau
(« console ») : par défaut et
s'il est positionné sur 0, les messages sont écrits
sur le terminal virtuel (VT) actuellement actif. Le terminal sur lequel
écrire est un octet unique suivant subcode (depuis
Linux 2.5.36).
-
TIOCLINUX,
subcode=TIOCL_GETFGCONSOLE
- Renvoit le nombre de terminaux virtuels (VT) actuellement
au premier plan (depuis Linux 2.5.36).
-
TIOCLINUX,
subcode=TIOCL_SCROLLCONSOLE
- Faire défiler vers le bas le terminal (VT) au
premier plan par le nombre de lines indiqué ou par
moitié d'écran si 0. lines vaut *(((int32_t
*)&subcode) + 1) (depuis Linux 2.5.67).
-
TIOCLINUX,
subcode=TIOCL_BLANKSCREEN
- Mettre en veille le terminal (VT) au premier plan en
ignorant les « coups » (frappes) : ne
peut être annulé qu'explicitement (en changeant de terminal,
vers le mode texte, etc) (depuis Linux 2.5.71).
-
TIOCLINUX,
subcode=TIOCL_BLANKEDSCREEN
- Renvoit le nombre de terminaux (VT) actuellement en veille,
0 si aucun (depuis Linux 2.5.71).
-
TIOCLINUX, subcode=16
- Jamais utilisé.
-
TIOCLINUX,
subcode=TIOCL_GETKMSGREDIRECT
- Renvoit la cible des messages du noyau (depuis Linux
2.6.17).
En cas de succès,
0 est renvoyé (sauf autrement
indiqué). En cas d'erreur,
-1 est renvoyé et
errno
est positionné pour indiquer l'erreur.
- EBADF
- Le descripteur de fichier n’est pas valable.
- EINVAL
- Le descripteur de fichier ou argp n'est pas
valable.
- ENOTTY
- Le descripteur de fichier n'est pas associé à
un périphérique spécial de type caractère ou
la requête spécifiée ne peut pas lui être
appliquée.
- EPERM
- Droits insuffisants.
Attention : ne considérez pas cette page de manuel comme
une documentation des ioctls des consoles Linux. Elle n'existe que pour
satisfaire votre curiosité, et pour vous éviter de lire les
sources. Les ioctls sont des choses internes à Linux non
documentées et peuvent changer à tout moment sans notification.
(En réalité, cette page décrit la situation au moment du
noyau 1.1.94 ; il existe des différences mineures, voire
plus importantes, avec les versions plus récentes.)
Très souvent, les ioctls sont ajoutés pour la communication entre
le noyau et un programme particulier connu (fdisk, hdparm, setserial, tunelp,
loadkeys, selection, setfont, etc.), et leurs comportements changeront
quand ce programme particulier le nécessitera.
Les programmes qui utilisent ces ioctls ne seront pas portables vers d'autres
versions d'UNIX, et ne fonctionneront pas avec des versions de Linux plus
anciennes ou futures.
Utilisez les fonctions 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
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Philippe
MENGUAL <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]