¿Cómo verificar qué tty estoy usando actualmente?

22

Hay 7 terminales que se pueden usar en nuestro sistema. tty7está basado en GUI.

¿Cómo puedo saber qué tty estoy usando actualmente?

como, tty1, tty2 ... tty6?

luv.preet
fuente
¿Por qué afirmas que es un "pts" en los comentarios? Eso es totalmente diferente de lo que preguntas aquí. La sesión en una GUI NO es una tty.
Rinzwind
1
Estoy confundido acerca de este concepto, es por eso
luv.preet
relacionado: unix.stackexchange.com/questions/77796/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

30

Hay varias formas de descubrir esto. Yo iría con el comando who am i(no who):

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

Cuando estoy en una terminal gráfica, devolvería algo como:

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

En una sesión ssh, usar un resultado de terminal gráfico es el mismo, pero en lugar de (: 0), obtendré la IP de mi máquina (192.168.xx). otros comandos como w, who, pgrep, ps, etc, son útiles también.

Por ejemplo, para averiguar en qué se ttyestá ejecutando mi interfaz gráfica:

ps $(pgrep Xorg)

Lo que en mi caso, debido a que no uso ningún administrador de pantalla como gdm o slim, producirá:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg
Ravexina
fuente
44
+1, aunque en mate-terminal who am ino devuelve nada, y whoamiregresa zanna, (mientras whodevuelve todas las sesiones (recuerdo una pregunta relacionada (que resultó sin respuesta) en la que notamos que diferentes emuladores producían diferentes resultados who)).
Zanna
gráfica siempre utilizará tty7, ya que es el único 1 que proporciona soporte gráfico
luv.preet
1
@Zanna Me encuentro con esta situación yo mismo, pero creo que vale la pena mencionarlo.
Ravexina
1
de todos modos, who am isiempre funcionará bien en un vt, y pgrepes muy inteligente (es posible que desee utilizar la $()sintaxis para subtítulos de comando puede ser un poco confuso en la reducción), por lo que su respuesta es muy agradable y quien haya votado negativamente no debería haberlo hecho. ...
Zanna
1
@ luv.preet que está fuera del alcance de su pregunta, pero vea Diferencia entre pts y tty :) - la publicación de la cual este es un duplicado tiene una respuesta increíble
Zanna
14

Usa el ttycomando.

Si estoy en lo cierto, esta es la referencia:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6
litio_js
fuente
está mostrando pts / 18.
luv.preet
este pts podría estar ejecutándose en un tty, ¿no? ¿Cómo puedo saber eso?
luv.preet
55
@ luv.preet esa es tu terminal. Consulte "Diferencia entre pts y tty" .
Chai T. Rex
44
ptssignifica que está utilizando la terminal desde la GUI o mediante SSH
lithium_js
3
Tendrá que hacer una nueva pregunta para eso.
Chai T. Rex
6

Retrocedamos un paso y comencemos con la confusión: ¿qué es un tty? Originalmente, tty era una abreviatura de teletipo que se convirtió en teletipo de vidrio que se convirtió en cualquier terminal o la conexión a uno, específicamente un puerto serie (estos todavía están presentes, más comúnmente / dev / ttyS0, / dev / ttyUSB0 y a veces / dev / ttyacm0). Entonces tienes pseudo ttys y ttys virtuales. las viejas manos de Unix están familiarizadas con los pseudo ttys que se utilizan para terminales remotos (ssh y telnet), terminales virtuales (xterm y similares) y multiplexores de terminales (pantalla y tmux). Los pseudo ttys han tenido varios esquemas de nombres a lo largo del tiempo, pero el actual usa nombres como / dev / pts / 0. Los ttys virtuales, por otro lado, están asociados con las consolas virtuales, específicamente cuando usa las teclas de función alt de control, está cambiando las consolas virtuales, cada una de las cuales está emparejada con un tty virtual.

Entonces, si necesita encontrar su pseudo tty (o tty virtual cuando usa el modo de texto), hay todo tipo de soluciones, who am io ps ax|grep $$esto es relativamente fácil de hacer, ya que hay varias formas de averiguarlo a medida que se abre el pseudo tty en io estándar en la mayoría de los casos y existen otros métodos que funcionan incluso cuando io se redirige. Esto también tiene la ventaja de hacer lo correcto cuando se usan puertos serie y ttys virtuales siempre que no se utilicen emuladores de terminal gráficos o multiplexores de terminal.

Pero, ¿qué sucede si desea identificar la consola virtual? sudo fgconsolePuede ser útil para casos interactivos. O lo que hago es caminar por las consolas, ya que el cambio suele ser lo suficientemente rápido. No conozco un método programático que funcione de manera confiable en casos no interactivos o sin antecedentes.

Veamos un ejemplo que garantiza que nunca podrá responder de manera confiable a la consola virtual. La computadora en la que estoy sentado (alpha) tiene un servidor X que se ejecuta en tty2 (: 1), tengo tres ventanas abiertas, dos xterms y un vncviewer (conectado a bravo: 2). Un xterm está ejecutando la pantalla, el otro está ejecutando ssh charley. La pantalla tiene dos ventanas abiertas, ssh delta y who (quién identifica correctamente el pseudo tty en la columna dos y proporciona la pista(:1:S0) en la columna cinco que nos dice que el pseudo tty está conectado a la primera sesión de pantalla que está conectada al segundo servidor X, pero no proporciona ninguna información de consola virtual). Ejecutar quién en cualquiera de las sesiones ssh da la pista(alpha)que identifica la máquina de la que proviene la sesión ssh, que es relativamente buena para sesiones remotas. Aunque hay poca información sobre lo que está conectado a la pseudo tty (y absolutamente ninguna consola virtual o incluso información remota de tty está disponible), al menos se identifica el host remoto. la información sobre la pantalla puede ser incorrecta ya que las sesiones de pantalla son desmontables, y vnc no proporciona información útil, ya que la única diferencia entre una sesión de vnc y una sesión local es el número de pantalla. En muchos casos, puede suponer que: 0 está en tty7 pero no siempre, y nunca en el mío, ya que bravo no tiene una tarjeta gráfica y: 0 es una sesión de vnc (que confunde a quién porque cree que es la consola local) y ninguna de las máquinas usa tty7 como sesión gráfica, porque yo (no solo para ser contrario) vuelco los registros a tty7 (y tty5, tty6 y tty8 también) religando sesiones gráficas en otros lugares. Pero la pantalla de espera también puede actuar como un programa de terminal que le permite establecer una sesión a través de un cable serie. ¿Qué informa tal sesión cuando se ejecuta? ¿Por qué nada más que el puerto serie ya sea a través de vnc, xterm, ssh, pantalla y un adaptador serie usb todo a la vez o está conectado a mi televideo?

hildred
fuente
6

Cuando haya iniciado sesión en un tty, muestra qué tty está utilizando en la primera línea automáticamente.


Si al presionar la combinación de teclado Ctrl+ Alt+ F3solo se muestra una pantalla en negro, como escribió en un comentario, hay una forma alternativa de obtener acceso a un shell raíz al iniciar la computadora sin presionar Ctrl+ Alt+ F3para que aparezca un tty.

  1. Inmediatamente después de la pantalla de inicio BIOS / UEFI durante el arranque, con BIOS, presione y mantenga presionada la Shifttecla rápidamente , lo que abrirá el menú GNU GRUB. (Si ve el logotipo de Ubuntu, se ha perdido el punto en el que puede ingresar al menú de GRUB). Con UEFI presione (quizás varias veces) la Esctecla para acceder al menú de GRUB. A veces, la pantalla de inicio del fabricante es parte del gestor de arranque de Windows, por lo que cuando enciende la máquina va directamente a la pantalla de GRUB, y luego no Shiftes necesario presionar .

  2. Desde la primera pantalla púrpura de GNU GRUB, seleccione Opciones avanzadas para Ubuntu con las teclas ↑ y ↓ y presione Enter. Luego aparecerá otro menú de menú de GNU GRUB púrpura que tiene una lista de opciones de kernel.

  3. Presione la tecla de flecha hacia abajo hasta que seleccione la segunda entrada desde arriba (la que tiene el modo de recuperación en la descripción) y luego presione Enter.

    Ahora debería ver este menú de recuperación:

    menú de recuperación

  4. Con las teclas de flecha, desplácese hacia abajo hasta la raíz y luego presione Enter.

    Ahora debería ver un mensaje raíz, algo como esto:

    root@ubuntu:~#
    
  5. En esta etapa, debe tener un sistema de archivos de solo lectura. Tienes que volver a montarlo con permisos de escritura:

    mount -o rw,remount /  
    

    Ahora puede ejecutar comandos de la misma manera que en una terminal.

karel
fuente
¿esto siempre abre tty1?
luv.preet
No, no abre ningún tty. En su lugar, monta el sistema de archivos raíz de Ubuntu que instaló en su disco duro como un shell interactivo con permisos de escritura, lo que le permite ejecutar comandos en él.
karel
3

Supongo que estás buscando algo más que las otras respuestas proporcionadas. Ejecute sudo fgconsole para descubrir qué tty real está ahora activo.

marian adam
fuente
@karel Es fácil imaginar una situación en la que te pierdas el anuncio TTY actual. Por ejemplo, su perfil bash borra la pantalla. Ofrecí un comando que puede usarse en cualquier momento, no solo inmediatamente después de iniciar sesión. WRT Ctrl + Alt + F1 no funciona: hay una solución rápida: use chvt o openvt.
marian adam
Y por cierto, ejecútalo con sudo. Por eso tienes el error.
marian adam
1

Use el comando tty, funciona en Linux y macOS y proporciona una salida bastante simple para leer, solo el nombre del tty en el que se encuentra.

Ejemplo:

$ tty
/dev/pts/0

Es fácil escribir esto o incluirlo en la solicitud, por ejemplo:

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

De esta manera siempre sabrás en qué terminal estás.

André
fuente
1

Excepto por la GUI, en cuyo caso obtienes un pts, esto muestra el resultado deseado:

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