Sous UNIX, un tty (comme beaucoup d'autres choses) apparaît sous forme de fichier. Les données écrites sur le périphérique tty vont au terminal et les données provenant du terminal sont disponibles pour lecture sur le tty.
Si le tty est un port série matériel, les données qui y sont écrites sont envoyées sur le fil et les données provenant du fil apparaissent sur le tty.
Si le tty est la console vidéo d'une machine, les données qui y sont écrites s'affichent à l'écran et les données provenant du clavier apparaissent sur le tty.
Si le tty est un pseudo-tty (terminal virtuel) connecté à un émulateur de terminal X tel que les gnome-terminal
données qui y sont écrites sont livrées au logiciel d'émulation de terminal X et sont à leur tour affichées dans une fenêtre, tandis que les données saisies dans cette fenêtre sont disponibles pour lire sur le terminal virtuel. Le logiciel serait connecté à l'extrémité "maître" du pseudo-terminal. Les vrais terminaux n'ont pas de fin "maître" car il y a un vrai périphérique derrière eux (comme le port série), pas un périphérique virtuel implémenté par un logiciel.
Vous pouvez donc déjà voir qu'il ne serait pas logique de demander à un émulateur de terminal X de fonctionner sur un périphérique tty arbitraire tel que /dev/ttyS0
(un vrai port série, sous Linux). Ce doit être un pseudo-tty.
Mais l'émulateur de terminal peut-il choisir l'ID numérique du pseudo-terminal qu'il utilise? En principe, il serait possible pour un noyau de permettre cela, mais en fait l'interface du noyau pour allouer un nouveau pseudo-terminal ne le supporte pas: le noyau fait son propre choix. (Dans le modèle SysV, les terminaux de pesudo sont créés en ouvrant un périphérique spécial appelé /dev/ptmx
et le pseudo-terminal disponible au numéro le plus bas est automatiquement attribué.)
Mais: pourquoi auriez-vous besoin de choisir le numéro du pseudo-terminal alloué? Le noyau choisit un noyau inutilisé qui est garanti d'être disponible et utilisable. Avez-vous une raison pour laquelle vous préféreriez en choisir une autre?
Quant à vous autre question:
J'ai vu beaucoup de fichiers tty dans / dev et beaucoup de fichiers pts dans / dev / pts / Je ne sais pas pourquoi il y en a tellement. Sont-ils tous utilisés?
Cela dépend du système. Sur certains systèmes, tous les périphériques pseudo-terminaux possibles sont pré-créés dans /dev/pts
ou /dev
, qu'ils soient utilisés ou non. Sur d'autres, les nœuds de périphérique n'existent que si le pseudo-terminal est en cours d'utilisation. Vous dites que vous utilisez Ununbu, qui utilise Linux, qui est le dernier type. Donc, oui, tous les nœuds de périphériques que vous voyez /dev/pts
sont actuellement utilisés.
Mais pour un accès temporaire, ce n'est pas très pratique. Je veux utiliser socat pour transmettre un tty ou pty au client. Le client peut alors démarrer un terminal avec ce pty ou tty.
Si vous souhaitez que socat
tout autre logiciel se connecte à l'extrémité principale d'un pseudo-terminal, vous devez que ce logiciel prenne spécifiquement en charge cette opération. Mais vous avez de la chance, car c'est le socat
cas. Par exemple, si je lance:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Je peux obtenir un shell en me connectant au port 2222 ailleurs. Très dangereux du point de vue de la sécurité !!!