De cette réponse à Linux: Différence entre / dev / console, / dev / tty et / dev / tty0
De la documentation :
/dev/tty Current TTY device /dev/console System console /dev/tty0 Current virtual console
Dans le bon vieux temps
/dev/console
était la console Administrateur système. Et les ATS étaient des périphériques série d'utilisateurs connectés à un serveur. Maintenant/dev/console
et/dev/tty0
représentent l'affichage actuel et sont généralement les mêmes. Vous pouvez le remplacer par exemple en ajoutantconsole=ttyS0
àgrub.conf
. Après que votre/dev/tty0
est un moniteur et/dev/console
est/dev/ttyS0
.
Par « console système », /dev/console
ressemble au fichier de périphérique d'un terminal physique de texte, tout comme /dev/tty{1..63}
les fichiers de périphérique pour les consoles virtuelles.
Par " /dev/console
et /dev/tty0
représentent l'affichage actuel et sont généralement les mêmes", /dev/console
il me semble qu'il peut également s'agir du fichier de périphérique d'une console virtuelle. /dev/console
semble plus comme /dev/tty0
que comme /dev/tty{1..63}
( /dev/tty0
est la console virtuelle actuellement active, et peut être n'importe laquelle /dev/tty{1..63}
).
Qu'est-ce que c'est /dev/console
? A quoi cela sert?
Joue-t-il /dev/console
le même rôle pour le noyau Linux que /dev/tty
pour un processus? ( /dev/tty
est le terminal de contrôle de la session de processus du processus, et peut être un pts, /dev/ttyn
où n
est de 1 à 63, ou plus?)
L'autre réponse mentionne:
La documentation du noyau spécifie
/dev/console
un périphérique de caractères numéroté 5: 1. L'ouverture de ce périphérique de personnage ouvre la console "principale", qui est le dernier terminal de la liste des consoles.
Est-ce que "la liste des consoles" signifie tous les éléments console=
de l' option de démarrage ?
Par "en /dev/console
tant que périphérique de caractères numéroté 5: 1", cela signifie-t-il que /dev/console
le fichier de périphérique d'un terminal de texte physique, c'est-à-dire une console système? (Mais encore une fois, la première réponse que j'ai citée ci-dessus dit /dev/console
peut être la même que celle /dev/tty0
qui n'est pas un terminal de texte physique, mais une console virtuelle)
Merci.
Réponses:
/dev/console
existe principalement pour exposer la console du noyau à l'espace utilisateur. La documentation du noyau Linux sur les périphériques dit maintenant/dev/console
, le nœud de périphérique avec le majeur 5 et le mineur 1, donne accès à tout ce que le noyau considère comme son principal moyen d'interagir avec l'administrateur système; cela peut être une console physique connectée au système (avec l'abstraction de la console virtuelle en haut, de sorte qu'elle peut utilisertty0
ou n'importettyN
où où N est compris entre 1 et 63), ou une console série, ou une console d'hyperviseur, ou même un périphérique braille. Notez que le noyau lui-même n'utilise pas/dev/console
: les nœuds de périphériques sont pour l'espace utilisateur, pas pour le noyau; cependant, il vérifie qu'il/dev/console
existe et est utilisable, et seinit
configure avec son entrée, sa sortie et son erreur standard pointant vers/dev/console
.Comme décrit ici,
/dev/console
est un périphérique de caractères avec un majeur et un mineur fixes car c'est un périphérique distinct (comme dans, un moyen d'accéder au noyau; pas un périphérique physique), pas équivalent à/dev/tty0
ou tout autre périphérique. Ceci est quelque peu similaire à la situation avec/dev/tty
laquelle se trouve son propre appareil (5: 0) car il offre des fonctionnalités légèrement différentes de celles des autres consoles virtuelles ou terminaux.La «liste des consoles» est en effet la liste des consoles définies par les
console=
paramètres de démarrage (ou la console par défaut, s'il n'y en a pas). Vous pouvez voir les consoles ainsi définies en regardant/proc/consoles
./dev/console
donne en effet accès à la dernière d'entre elles :la source
"Qu'est-ce que c'est
/dev/console
?" est répondu dans la réponse précédente . Cette réponse est peut-être plus claire lorsque vous connaissez les réponses aux deux autres questions.Q1. "Quel est le fichier du périphérique représentant le terminal physique lui-même?"
Il n'y a pas un tel fichier de périphérique.
Q2. "A quoi ça
/dev/console
sert?"Sous Linux,
/dev/console
est utilisé pour afficher des messages lors du démarrage (et de l'arrêt). Il est également utilisé pour le "mode mono-utilisateur", comme l'a souligné la réponse de Stephen Kitt. Il n'y a pas grand-chose d'autre pour lequel il est logique de l'utiliser."Au bon vieux temps" d'Unix,
/dev/console
était un appareil physique dédié. Mais ce n'est pas le cas sous Linux.Preuve connexe
1. "Quel est le fichier d'appareil représentant le terminal physique lui-même?"
Le ou les périphériques sous-jacents
/dev/tty{1..63}
sontstruct con_driver
. Pour voir tous les pilotes possibles, consultez https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_consoleIl n'y a pas de fichier de périphérique pour ces périphériques sous-jacents!
Il n'y a qu'une interface d'espace utilisateur minimale pour les gérer.
Si vous voulez vraiment en savoir plus, le
(M)
module signifie . C'est-à-dire que la console factice n'est pas fournie par un module noyau chargeable; il fait partie de l'image initiale du noyau (aka "builtin").Deuxièmement, le
bind
fichier de chaque sous-répertoire de/sys/class/vtconsole
apparaît pour vous indiquer quel périphérique vtconsole est actif. Si j'écris0
sur celui qui est actif, il semble basculer sur celui factice. (Les VT GUI ne semblent pas affectés, mais les VT texte ne fonctionnent plus). Écrire1
pour le mannequin ne l’active pas. L'une ou l'autre méthode fonctionne pour revenir à la vraie. Si je lis le code correctement, l'astuce est que celaecho 1 > bind
ne devrait fonctionner que pour les pilotes de console qui sont construits en tant que module (?!).Pour les consoles framebuffer en particulier, il y a plus d'informations sur la liaison de différents périphériques framebuffer (
/dev/fb0
...) à des consoles virtuelles spécifiques dans https://kernel.org/doc/Documentation/fb/fbcon.txt . Cela implique une option du noyaufbcon:map=
ou une commande appeléecon2fbmap
.Bien sûr, les détails peuvent varier selon les différentes versions du noyau, architectures, firmwares, périphériques, pilotes, etc. Je n'ai jamais vraiment eu à utiliser l'une des interfaces ci-dessus. Le noyau laisse juste
i915
/inteldrmfb
/ ce que vous voulez l'appeler prendre le relais lors du chargement, en remplaçant par exemplevgacon
.On dirait que ma machine EFI ne l'a jamais fait
vgacon
. Donc, premièrement, il utilise une console factice, et deuxièmement après 1,2 seconde, il passe àfbcon
, en cours d'exécutionefifb
. Mais jusqu'à présent, je n'ai pas eu à me soucier des détails; ça marche juste.2. "À quoi
/dev/console
sert-on?"Vous pouvez utiliser / dev / console comme périphérique TTY. L'écriture, par exemple, écrit sur un périphérique sous-jacent spécifique, qui aura également un numéro de périphérique de caractère qui lui est propre.
Souvent / dev / console est lié à / dev / tty0, mais parfois il peut être lié à un périphérique différent.
Donc dans ce cas, écrire dans / dev / console va écrire dans / dev / tty0. Et à son tour, écrire dans / dev / tty0 équivaut à écrire dans le périphérique / dev / ttyN actuellement actif.
Mais cela soulève une question intéressante. L'
tty0
accès permettra d'accéder à différentes consoles virtuelles, selon celle qui est actuellement active. À quoi servent les genstty0
et à quoiconsole
sert-on sous Linux?Techniquement, vous pouvez lire et écrire à partir de
console
/tty0
, par exemple en exécutant ungetty
pour autoriser la connexiontty0
. Mais cela n'est utile que comme hack rapide. Parce que cela signifie que vous ne pouvez pas profiter des multiples consoles virtuelles de Linux.systemd
recherchesysfs
un attribut associé au périphérique / dev / console pour détecter le périphérique TTY sous-jacent. Cela permetsystemd
de générer automatiquement ungetty
et autoriser la connexion, par exemple sur une console série, lorsque l'utilisateur configure une console du noyau en démarrant avecconsole=ttyS0
. C'est pratique; cela évite d'avoir à configurer cette console à deux endroits différents. Encore une fois, voyezman systemd-getty-generator
. Cependant,systemd
ne s'ouvre pas réellement/dev/console
pour cela.Pendant l'amorçage du système, il se peut que vous n'ayez même pas encore monté sysfs. Mais vous voulez pouvoir afficher les messages d'erreur et de progression dès que possible! Nous tournons donc autour du point 1). Le noyau démarre le PID 1 avec stdin / stdout / stderr connecté à
/dev/console
. C'est très agréable d'avoir ce mécanisme simple mis en place dès le départ.Dans un conteneur Linux, le fichier at
/dev/console
peut être créé avec quelque chose de différent - pas le numéro de périphérique de caractère5:1
. Au lieu de cela, il peut être créé en tant que fichier de périphérique PTS. Il serait alors judicieux de se connecter via ce/dev/console
fichier.systemd
à l'intérieur d'un conteneur permettra de se connecter sur un tel appareil; voirman systemd-getty-generator
.Ce mécanisme est utilisé lorsque vous exécutez un conteneur avec la
systemd-nspawn
commande. (Je pense que lorsque vous utilisezsystemd-nspawn
un ATS, bien que je ne puisse pas le dire en recherchant la page de manuel).systemd-nspawn
crée le conteneur en/dev/console
tant que montage de liaison d'un périphérique PTS à partir de l'hôte. Cela signifie que ce dispositif PTS n'est pas visible à l'/dev/pts/
intérieur du conteneur.Les périphériques PTS sont locaux sur un
devpts
support spécifique . Les appareils PTS sont une exception à la règle normale, selon laquelle les appareils sont identifiés par leur numéro d'appareil. Les appareils PTS sont identifiés par la combinaison de leur numéro d'appareil et de leurdevpts
support.Vous pouvez écrire des messages urgents dans
console
/tty0
, pour écrire dans la console virtuelle actuelle de l'utilisateur. Cela pourrait être utile pour les messages d'erreur urgents de l'espace utilisateur, similaires aux messages urgents du noyau qui sont imprimés sur la console (voirman dmesg
). Cependant, il n'est pas courant de le faire, au moins une fois que le système a terminé le démarrage.rsyslog a un exemple sur cette page , qui imprime les messages du noyau à
/dev/console
; cela est inutile sous Linux car le noyau le fera déjà par défaut. Un exemple que je ne trouve pas encore dit que ce n'est pas une bonne idée de l'utiliser pour des messages non-noyau car il y a juste trop de messages syslog, vous inonder votre console et cela gêne trop.systemd-journald a également des options pour transférer tous les journaux vers la console. En principe, cela peut être utile pour le débogage dans un environnement virtuel. Cependant, pour le débogage, nous transmettons généralement à la
/dev/kmsg
place. Cela les enregistre dans le tampon de journal du noyau afin que vous puissiez les lire avecdmesg
. Comme les messages générés par le noyau lui-même, ces messages peuvent être répercutés sur la console en fonction de la configuration actuelle du noyau.la source
xconsole
pour garder une trace de ce qui se passait ;-). (Et pour éviter d'avoir des messages écrits directement dans le framebuffer, par exemple sur les stations SPARC.)/dev/tty{1..63}
et/dev/pts/n
sont des fichiers de périphériques représentant des périphériques eux-mêmes (bien qu'ils soient des émulations), sans relation avec le processus ou le noyau./dev/tty0
représente celui dans/dev/tty{1..63}
lequel est actuellement utilisé par quelque chose (peut-être un processus noyau ou shell?)./dev/tty
représente le terminal de contrôle actuellement utilisé par une session de processus./dev/console
représente le terminal actuellement utilisé par le noyau? Quel est le fichier de périphérique représentant le terminal physique lui-même, sans rapport avec le noyau ou le processus?