如何检查我当前正在使用哪个 tty?

如何检查我当前正在使用哪个 tty?

我们的系统中有 7 个可以使用的终端。tty7基于 GUI。

我如何检查tty当前正在使用哪一个?

答案1

有几种方法可以找到答案。我会使用who am i(not who) 命令:

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

当我在图形终端中时,它会返回类似这样的内容:

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

在 ssh 会话下使用图形终端的结果是相同的,但不是 (:0),而是我将获取我的机器 IP (192.168.xx)。其他命令如、、、w等也很有帮助。whopgrepps

例如,找出tty我的图形界面正在运行:

ps $(pgrep Xorg)

就我的情况而言,因为我不使用任何显示管理器(如 gdm 或 slim),所以它会生成:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg

答案2

使用tty命令。

如果我是对的,这是参考:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6

答案3

让我们退一步,从令人困惑的地方开始:什么是 tty?最初,tty 是 teletype 的缩写,后来变成了 glass teletype,后者变成了任何终端或与终端的连接,特别是串行端口(这些仍然存在,最常见的是 /dev/ttyS0、/dev/ttyUSB0,有时是 /dev/ttyacm0)。然后您得到了伪 tty 和虚拟 tty。老 unix 专家熟悉伪 tty,它们用于远程终端(ssh 和 telnet)、虚拟终端(xterm 等)和终端多路复用器(screen 和 tmux)。伪 tty 随着时间的推移有各种命名方案,但当前方案使用 /dev/pts/0 之类的名称。另一方面,虚拟 tty 与虚拟控制台相关联,具体来说,当您使用控制 alt 功能键时,您正在切换虚拟控制台,每个虚拟控制台都与一个虚拟 tty 配对。最著名的虚拟 tty 是 /dev/tty7,它通常用于图形会话(因为前六个通常是文本登录),tty7 没有什么特别之处,因为您可以在任何虚拟控制台上运行 X 服务器(尽管在 /dev/tty1 上运行一个非常困难,因为内核会打开它进行启动日志记录,但我已经这样做了),您可以在任何虚拟 tty 上进行文本登录,包括 tty7(尽管需要 init 配置,并且 systemd 的动态分配使事情变得有趣,切换到 tty13 及更高版本可能需要更改键盘映射)。

因此,如果您需要找到伪 tty(或使用文本模式时的虚拟 tty),那么有各种各样的解决方案,who am i或者ps ax|grep $$这相对容易做到,因为有多种方法可以找出它,因为伪 tty 在大多数情况下是在标准 io 上打开的,并且即使 io 被重定向,还有其他方法也可以工作。只要您不使用图形终端仿真器或终端多路复用器,这也具有在使用串行端口和虚拟 tty 时做正确的事情的优势。

但是,如果你想识别虚拟控制台怎么办?sudo fgconsole对于交互式情况可能很有用。或者我所做的只是走动控制台,因为切换通常足够快。我不知道在非交互式或非前台情况下可靠工作的编程方法。

让我们看一个肯定无法可靠地响应虚拟控制台的示例。我坐在前面的计算机 (alpha) 有一个在 tty2(:1) 上运行的 Xserver,我打开了三个窗口,两个 xterm 和一个 vncviewer(连接到 bravo:2)。一个 xterm 正在运行 screen,另一个正在运行 ssh charley。Screen 打开了两个窗口,ssh delta 和 who(who 正确地识别了第二列中的伪 tty,并(:1:S0)在第五列中提供了提示,告诉我们伪 tty 连接到了第一个 screen 会话,该会话连接到了第二个 X 服务器,但没有提供任何虚拟控制台信息)。在任一 ssh 会话上运行 who 都会给出提示,(alpha)该提示可识别 ssh 会话来自的机器,这对于远程会话来说比较好。虽然关于连接到伪 tty 的是什么的信息很少(并且绝对没有虚拟控制台甚至远程 tty 信息可用),但至少可以识别远程主机。有关屏幕的信息可能是错误的,因为屏幕会话是可分离的,而 vnc 根本不提供任何有用的信息,因为 vnc 会话和本地会话之间的唯一区别是显示号。在许多情况下,您可以假设 :0 在 tty7 上,但并非总是如此,而且永远不会在我的 tty7 上,因为 bravo 根本没有显卡,而 :0 是一个 vnc 会话(这会让 who 感到困惑,因为它认为它是本地控制台),并且没有一台机器使用 tty7 作为图形会话,因为我(不仅仅是相反)将日志转储到 tty7(以及 tty5、tty6 和 tty8)将图形会话重新绑定到其他地方。但等待屏幕也可以充当终端程序,允许您通过串行电缆建立会话。当 who 运行时,这样的会话会报告什么?为什么除了串行端口之外什么都没有,无论是通过 vnc、xterm、ssh、screen 和 usb 串行适配器同时还是连接到我的 televideo。

答案4

我猜你正在关注其他答案以外的其他内容。运行sudo fgconsole 以找出哪个真实 tty 当前处于活动状态。

相关内容