Comment vérifier quel tty j'utilise actuellement?

22

Il y a 7 terminaux qui peuvent être utilisés dans notre système. tty7est basé sur une interface graphique.

Comment puis-je savoir quel tty est-ce que j'utilise actuellement?

comme, tty1, tty2 .... tty6?

luv.preet
la source
Pourquoi prétendez-vous que c'est un "pts" dans les commentaires? C'est totalement différent de ce que vous demandez ici. La session dans une interface graphique n'est PAS un tty.
Rinzwind
1
Je suis confus à propos de ce concept, c'est pourquoi
luv.preet
connexes: unix.stackexchange.com/questions/77796/…
Ciro Santilli 新疆 改造 中心 心 六四 事件

Réponses:

30

Il existe plusieurs façons de le savoir. J'irais avec la commande who am i(pas who):

$ who am i
ravexina    tty2        2017-04-10 11:19 (:0)

Quand je suis dans un terminal graphique, cela retournerait quelque chose comme:

ravexina    pts/0        2017-04-10 1:19 (:0)

Sous ssh, la session utilisant un terminal graphique est la même, mais au lieu de (: 0), j'obtiendra l'IP de ma machine (192.168.xx). d' autres commandes comme w, who, pgrep, ps, etc sont utiles aussi.

Par exemple, pour savoir à quel ttyendroit mon interface graphique fonctionne:

ps $(pgrep Xorg)

Ce qui dans mon cas, car je n'utilise aucun gestionnaire d'affichage comme gdm ou slim, il produira:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg
Ravexina
la source
4
+1, bien que dans mate-terminal who am ine renvoie rien, et whoamirenvoie zanna, (alors que whorenvoie toutes les sessions (je me souviens d'une question connexe (qui s'est avérée sans réponse) où nous avons remarqué que différents émulateurs produisaient une sortie différente de who)).
Zanna
graphical utilisera toujours tty7, car c'est le seul qui fournit un support graphique
luv.preet
1
@Zanna Je rencontre moi-même cette situation, mais je pense que cela vaut la peine d'être mentionné.
Ravexina
1
de toute façon, who am ifonctionnera toujours très bien dans un vt, et le pgrepest très intelligent (vous voudrez peut-être utiliser la $()syntaxe pour les sous-commandes). ...
Zanna
1
@ luv.preet qui est hors de portée de votre question mais voir Différence entre pts et tty :) - le post dont celui-ci est un doublon a une réponse impressionnante
Zanna
14

Utilisez la ttycommande.

Si j'ai raison, c'est la référence:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6
lithium_js
la source
il montre pts / 18.
luv.preet
ce pts pourrait fonctionner dans un tty, n'est-ce pas? Comment puis-je le savoir?
luv.preet
5
@ luv.preet qui est votre terminal. Voir "Différence entre pts et tty" .
Chai T. Rex
4
ptssignifie que vous utilisez un terminal à partir de l'interface graphique ou via SSH
lithium_js
3
Vous devrez poser une nouvelle question pour cela.
Chai T. Rex
6

Prenons un peu de recul et commençons par la confusion: qu'est-ce qu'un tty? À l'origine, tty était une abréviation de télétype qui est devenu un téléscripteur en verre qui est devenu n'importe quel terminal ou la connexion à un, en particulier un port série (ceux-ci sont toujours présents, le plus souvent / dev / ttyS0, / dev / ttyUSB0 et parfois / dev / ttyacm0). Ensuite, vous avez obtenu des pseudo ttys et des ttys virtuels. les anciennes mains Unix connaissent bien les pseudo ttys qui sont utilisés pour les terminaux distants (ssh et telnet), les terminaux virtuels (xterm et similaires) et les multiplexeurs de terminaux (screen et tmux). Les pseudo-ttys ont eu différents schémas de dénomination au fil du temps, mais le schéma actuel utilise des noms comme / dev / pts / 0. Les ttys virtuels, d'autre part, sont associés aux consoles virtuelles, en particulier lorsque vous utilisez les touches de fonction de contrôle alt, vous changez de consoles virtuelles, chacune étant associée à un tty virtuel.

Donc, si vous avez besoin de trouver votre pseudo tty (ou virtuel tty lorsque vous utilisez le mode texte), il existe toutes sortes de solutions comme who am iou ps ax|grep $$cela est relativement facile à faire car il existe plusieurs façons de le savoir lorsque le pseudo tty est ouvert sur io standard dans la plupart des cas et il existe d'autres méthodes qui fonctionnent même lorsque io est redirigé. cela a également l'avantage de faire la bonne chose lorsque vous utilisez des ports série et des ttys virtuels tant que vous n'utilisez pas d'émulateurs de terminaux graphiques ou de multiplexeurs de terminaux.

Mais que se passe-t-il si vous souhaitez identifier la console virtuelle? sudo fgconsolepeut être utile pour les cas interactifs. Ou ce que je fais, c'est simplement marcher sur les consoles car le changement est généralement assez rapide. Je ne connais pas de méthode programmatique qui fonctionne de manière fiable dans des cas non interactifs ou non originaux.

Regardons un exemple qui ne pourra jamais répondre de manière fiable à la console virtuelle. L'ordinateur que je suis devant (alpha) a un Xserver fonctionnant sur tty2 (: 1), j'ai trois fenêtres ouvertes deux xterms et un vncviewer (connecté à bravo: 2). Un xterm exécute l'écran, l'autre exécute ssh charley. L'écran a deux fenêtres ouvertes, ssh delta et who (qui identifie correctement le pseudo tty dans la colonne deux et fournit l'astuce (:1:S0)dans la colonne cinq qui nous indique que le pseudo tty est connecté à la première session d'écran qui est connectée au deuxième serveur X, mais ne donne aucune information sur la console virtuelle). L'exécution de qui sur l'une ou l'autre session ssh donne l'astuce(alpha)qui identifie la machine d'où provient la session ssh, ce qui est relativement bon pour les sessions distantes. Bien qu'il y ait peu d'informations sur ce qui est connecté au pseudo tty (et absolument aucune console virtuelle ni même d'informations tty distantes ne sont disponibles), l'hôte distant est au moins identifié. les informations sur l'écran peuvent être fausses car les sessions d'écran sont détachables et vnc ne fournit aucune information utile car la seule différence entre une session vnc et une session locale est le numéro d'affichage. Dans de nombreux cas, vous pouvez supposer que: 0 est sur tty7 mais pas toujours, et jamais sur le mien car bravo n'a pas du tout de carte graphique et: 0 est une session vnc (ce qui confond qui parce qu'il pense que c'est la console locale) et aucune des machines n'utilise tty7 comme session graphique, car je (pas seulement pour être contraire) vider les journaux vers tty7 (et tty5, tty6 et tty8 également) sessions graphiques religieuses ailleurs. Mais l'écran d'attente peut également agir comme un programme terminal vous permettant d'établir une session sur un câble série. Que signale une telle session quand qui est exécuté? Pourquoi rien d'autre que le port série, que ce soit via vnc, xterm, ssh, screen et un adaptateur série usb à la fois ou est connecté à mon téléviseur.

hildred
la source
6

Lorsque vous vous êtes connecté à un terminal, il indique automatiquement le terminal que vous utilisez sur la première ligne.


Si appuyer sur la combinaison de touches Ctrl+ Alt+ F3n'affiche qu'un écran noir, comme vous l'avez écrit dans un commentaire, il existe un autre moyen d'accéder à un shell racine lors du démarrage de l'ordinateur sans appuyer sur Ctrl+ Alt+ F3pour afficher un tty.

  1. Immédiatement après l'écran de démarrage BIOS / UEFI pendant le démarrage, avec le BIOS, appuyez et maintenez rapidement la Shifttouche, ce qui fera apparaître le menu GNU GRUB. (Si vous voyez le logo Ubuntu, vous avez raté le point où vous pouvez entrer dans le menu GRUB.) Avec UEFI appuyez (peut-être plusieurs fois) sur la Esctouche pour accéder au menu GRUB. Parfois, l'écran de démarrage du fabricant fait partie du chargeur de démarrage Windows, donc lorsque vous allumez la machine, il va directement à l'écran GRUB, puis il Shiftn'est pas nécessaire d' appuyer sur .

  2. Dans le premier écran violet GNU GRUB, sélectionnez Options avancées pour Ubuntu avec les touches ↑ et ↓ et appuyez sur Enter. Vous serez alors invité par un autre menu violet du menu GNU GRUB qui contient une liste d'options du noyau.

  3. Appuyez sur la flèche vers le bas jusqu'à ce que vous sélectionniez la deuxième entrée en haut (celle avec le mode de récupération dans la description), puis appuyez sur Enter.

    Maintenant, vous devriez voir ce menu de récupération:

    menu de récupération

  4. À l'aide des touches fléchées, faites défiler vers le bas jusqu'à root , puis appuyez sur Enter.

    Vous devriez maintenant voir une invite racine, quelque chose comme ceci:

    root@ubuntu:~#
    
  5. À ce stade, vous devriez avoir un système de fichiers en lecture seule. Vous devez le remonter avec des autorisations d'écriture:

    mount -o rw,remount /  
    

    Vous pouvez maintenant exécuter les commandes de la même manière que dans un terminal.

Karel
la source
Est-ce que cela ouvre toujours tty1?
luv.preet
Non, il n'ouvre aucun tty. Au lieu de cela, il monte le système de fichiers racine d'Ubuntu que vous avez installé sur votre disque dur en tant que shell interactif avec des autorisations d'écriture, vous permettant d'exécuter des commandes dessus.
karel
3

Je suppose que vous cherchez autre chose que les autres réponses fournies. Exécutez sudo fgconsole pour découvrir quel tty réel est maintenant actif.

marian adam
la source
@karel Il est facile d'imaginer une situation où vous manquez l'annonce TTY actuelle. Par exemple, votre profil bash efface l'écran. J'ai proposé une commande qui peut être utilisée à tout moment, non seulement immédiatement après la connexion. WRT Ctrl + Alt + F1 ne fonctionne pas - il existe une solution rapide: utilisez chvt ou openvt.
marian adam
Et BTW, exécutez-le avec sudo. C'est pourquoi vous avez eu l'erreur.
marian adam
1

Utilisez la commande tty, cela fonctionne sous Linux et macOS et donne une sortie assez simple à lire, uniquement le nom du tty dans lequel vous vous trouvez.

Exemple:

$ tty
/dev/pts/0

Il est facile de l'écrire ou de l'inclure dans l'invite, par exemple:

$ PS1='`tty`: '
/dev/pts/0: _

De cette façon, vous saurez toujours dans quel terminal vous vous trouvez.

André
la source
1

À l'exception de l'interface graphique, auquel cas vous obtenez un pts, cela montre la sortie souhaitée:

ls -l `tty` | awk '{print $10}'
Ferroao
la source