ioctl_console - Ioctls pour les consoles et terminaux virtuels
Les requêtes ioctl(2) spécifiques à
Linux suivantes 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ère 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
- Configure 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éfinit 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ère le type de clavier. Retourne la valeur KB_101,
définie comme 0x02.
- KDADDIO
- Ajoute un port aux ports d'entrée/sortie valables.
Équivalent à ioperm(arg,1,1).
- KDDELIO
- Supprime un port des ports d'entrée/sortie valables.
Équivalent à ioperm(arg,1,0).
- KDENABIO
- Active les entrées/sorties vers la carte vidéo.
Équivalent à ioperm(0x3b4, 0x3df-0x3b4+1,
1).
- KDDISABIO
- Désactive les entrées/sorties vers la carte vidéo.
Équivalent à ioperm(0x3b4, 0x3df-0x3b4+1, 0).
- KDSETMODE
- Définit le mode texte/graphique. argp est un entier non
signé qui peut valoir :
KD_TEXT |
0x00 |
KD_GRAPHICS |
0x01 |
- KDGETMODE
- Récupère le mode texte/graphique. argp pointe vers un
int qui prend une des valeurs précédentes de
KDSETMODE.
- KDMKTONE
- Génère 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 en nombre de cycles, 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émarre et arrête la génération du son. Les
16 bits de poids faible de argp indiquent la période
en nombre de cycles (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ère 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
- Modifie 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, le vert, le jaune, le bleu, le violet, le
cyan 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 8xN (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ère 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ère 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ère 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éfinit l'association Unicode/fonte du noyau. argp pointe
vers une struct unimapdesc. (Depuis Linux 1.1.92)
- PIO_UNIMAPCLR
- Vide 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 |
positionne 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
- Lit 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
- Lit 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
- Écrit 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ère 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éfinit l'état du terminal virtuel actif. argp pointe
vers une struct vt_mode.
- VT_GETSTATE
- Récupère 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é. (noyaux 1.0 à
1.1.92.)
- VT_RELDISP
- Libère un affichage.
- VT_ACTIVATE
- Passe au terminal virtuel argp (1 <= argp <=
MAX_NR_CONSOLES).
- VT_WAITACTIVE
- Attend jusqu'à ce que le terminal virtuel argp soit
activé.
- VT_DISALLOCATE
- Libère la mémoire associée au terminal virtuel
argp. (Depuis Linux 1.1.54.)
- VT_RESIZE
- Informe 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
- Informe 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.)
Les actions des ioctls suivants dépendent du premier octet
de la structure pointée par 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.
- TIOCLINUX,
subcode=0
- Fait 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ère les informations sur la tâche. A disparu
dans Linux 1.1.92.
- TIOCLINUX,
subcode=2
- Définit 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 le tableau statique sel_buffer de
devices/char/console.c.
- TIOCLINUX,
subcode=3
- Colle la sélection. Les caractères dans le tampon de la
sélection sont écrits dans fd.
- TIOCLINUX,
subcode=4
- Arrête l'économiseur d'écran.
- TIOCLINUX,
subcode=5
- 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=6
- argp pointe vers un caractère qui prend la valeur de la
variable shift_state du noyau. (Depuis Linux 1.1.32.)
- TIOCLINUX,
subcode=7
- 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
- Fait un cliché de largeur et de la hauteur de l'écran, de la
position du curseur et de toutes les paires caractère-attribut.
(Noyaux 1.1.67 à 1.1.91 uniquement. Avec les
noyaux 1.1.92 et suivants, lisez /dev/vcsa* à la
place.)
- TIOCLINUX,
subcode=9
- Restaure la largeur et la hauteur de l'écran, la position du
curseur et toutes les paires caractère-attribut.
(Noyaux 1.1.67 à 1.1.91 uniquement. Avec les
noyaux 1.1.92 et suivants, écrivez dans /dev/vcsa*
à la place.)
- TIOCLINUX,
subcode=10
- 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)
En cas de succès, 0 est renvoyé. En cas
d'erreur, -1 est renvoyé, et errno est
positionné.
errno peut prendre une de ces valeurs :
- 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 documentés à
l'intérieur de Linux 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 plus récentes.
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
Cette page fait partie de la publication 5.10 du projet
man-pages Linux. Une description du projet et des instructions pour
signaler des anomalies et la dernière version de cette page peuvent
être trouvées à l'adresse
https://www.kernel.org/doc/man-pages/.
La traduction française de cette page de manuel a
été créée par Christophe Blaess
<https://www.blaess.fr/christophe/>, Stéphan Rafin
<stephan.rafin@laposte.net>, Thierry Vignaud
<tvignaud@mandriva.com>, François Micaux, Alain Portal
<aportal@univ-montp2.fr>, Jean-Philippe Guérard
<fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh)
<jean-luc.coulon@wanadoo.fr>, Julien Cristau
<jcristau@debian.org>, Thomas Huriaux
<thomas.huriaux@gmail.com>, Nicolas François
<nicolas.francois@centraliens.net>, Florentin Duneau
<fduneau@gmail.com>, Simon Paillard
<simon.paillard@resel.enst-bretagne.fr>, Denis Barbier
<barbier@debian.org>, David Prévot <david@tilapin.org>,
Cédric Boutillier <cedric.boutillier@gmail.com>,
Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe
MENGUAL <jpmengual@debian.org>
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 à
debian-l10n-french@lists.debian.org.