为什么有这么多虚拟控制台?

Hin*_*klo 32 tty virtual-console

有这么多虚拟控制台的原因是什么?

我会理解是否有一个以防 GUI 崩溃,但除了默认值之外还有 6 个?它们是为了什么?除了 GUI 冻结时,我什至看不到它们中的任何一个的用法。

Rma*_*ano 21

简短的回答:为什么不呢?(请含蓄微笑)

更长一点:我想这主要是历史问题。在getty我使用 VC 支持启动的第一个 linux 中配置了 6 个虚拟控制台,我真的忘记了(我想是 1990 年左右)。然后,当您启动图形环境(手动,使用startx)时,它会在第一个免费 VC 上自行打开,这恰好是 #7。那时我仍然在 VC 上完成大部分工作:编辑速度要快得多,有时我使用的 VC 比标准的 6 个还多,而且我的笔记本电脑并不是一个图形怪物......

例如,我曾经运行三个编辑器(一个程序,它的输入数据,一个描述它的 TeX 文件),一个用于编译的 VC,另一个用于阅读手册,另一个通过 telnet 连接到我的邮件服务器。

我怀疑仍然使用六个虚拟控制台的理由是让 #7 上的图形 VC 为每个人提供,因此您可以在手册上写“ Ctrl-Alt-F7”而不是“第一个免费 VCCtrl-Alt-Fx在哪里 x”。

作为旁注,您可以(我想 --- 从未尝试过)削减 VC。简单地做

sudo bash -c "echo 'manual' >> /etc/init/tty6.override"
Run Code Online (Sandbox Code Playgroud)

按照暴发户手册停止 VC#6 。


Mat*_*teo 11

为什么不多呢?运行tophtop在其中一个(提供 cpu/内存使用静态数据),ssh到 2 或 3 中的其他系统,在另一个系统中运行一些自动化任务,保持一个空闲以防万一,多登录多个用户,在一个上运行cmatrix,启动GUI 在另一个与 -

startx -- :1
Run Code Online (Sandbox Code Playgroud)

(某些图形对此有错误)

http://mostlylinux.wordpress.com/troubleshooting/ttysessions/

当您真正开始使用此功能时,7 个 tty(第七个是默​​认设置)似乎很少 - 您可以添加更多。

减少数量:如何减少 TTY 的数量?


Ser*_*nyy 11

根据 Unix 哲学,所有/dev/tty*条目都被称为device file。它们充当用户和实际设备之间的链接,但它们的目的可能略有不同。

虚拟控制台如何分配

每个控制台(4)手册

在内核版本 1.1.54 之前,虚拟控制台的数量被编译到内核中(在 tty.h 中:#define NR_CONSOLES 8)并且可以通过编辑和重新编译来更改。由于 1.1.54 版虚拟控制台是在需要时即时创建的。

pre-systemd 系统中的动态创建是通过/etc/default/console-setup变量控制的ACTIVE_CONSOLES。从控制台设置(5)手册

ACTIVE_CONSOLES 指定要配置的虚拟终端的/dev 中的设备文件。文件名通配符 (*, ?) 是允许的。在 Linux 上通常你可以把它设置为 /dev/tty[1-6] 而在 FreeBSD 上一个合理的值是 /dev/ttyv[0-8]。您也可以为该变量分配特殊值猜测。它会导致 setupcon(1) 尝试通过查看 /etc/inittab 和 /etc/ttys 等配置文件来猜测活动的虚拟控制台。这种猜测并不总是可靠的。

Systemd 配置依赖于/etc/systemd/logind.conf变量NAutoVTslogind.conf 文档

NAutoVTs= 取一个正整数。配置默认分配的虚拟终端 (VT) 数量,当切换到之前未使用时,会自动生成“autovt”服务。这些服务是从模板单元 autovt@.service 实例化的,用于相应的 VT TTY 名称,例如 autovt@tty4.service。默认情况下,autovt@.service 链接到 getty@.service。换句话说,当用户切换到未使用的虚拟终端时,登录提示是动态启动的。因此,此参数控制 VT 上可用的登录“getty”数量。如果某个 VT 已被某个其他子系统使用(例如,图形登录),则不会尝试这种激活。请注意,在 ReserveVT= 中配置的 VT 始终受到这种激活的影响,即使它不是使用 NAutoVTs= 指令配置的 VT 之一。默认为 6。设置为 0 时,禁用“autovt”服务的自动生成。

减少适合您环境的变量并重新启动将有助于减少 VT 的数量。可以通过以下命令手动删除这些设备:

sudo bash -c 'for num in $(seq 10 63 ) ; do MAKEDEV -v -d "tty$num" ; done'
Run Code Online (Sandbox Code Playgroud)

然而,这有点毫无意义——设备文件不占用任何空间,也不影响系统性能。

另见https://askubuntu.com/a/27975/295286

虚拟控制台一般信息

设备文件/dev/tty123可用于通过常规 shell 与系统交互。这些是虚拟终端。Ubuntu 系统默认配置打开 TTY 1 到 6 ,但可以手动打开更多,例如:

sudo openvt -c 9 -s "bash"
Run Code Online (Sandbox Code Playgroud)

这将bash在 /dev/tty9 上以 root 身份打开并立即将您切换到该 TTY(如果在本地终端上完成,但如果您通过远程ssh会话这样做,在这种情况下您可能需要使用chvt 99,/dev/tty9在本例中为 9 )。 ?要在没有sudo非 root 的情况下执行相同操作,您必须更改要打开的 tty 的所有权。例如,

$ sudo chown admin_user:tty /dev/tty8 
$ openvt -c 8 -l 
Run Code Online (Sandbox Code Playgroud)

这将使我使用 tty8 上的默认 shell 登录。然而,在我的测试中,这似乎只能通过 TTY 工作,所以如果您通过终端模拟器执行此操作,那可能不起作用(我收到Couldn't get a file descriptor referring to the console 错误并且只sudo openvt -c 8 -l从 emulator 为我工作)

从历史的角度来看,在创建所有花哨的终端多路复用器之前,这是一个有用的功能 - 您可以在这些控制台上生成多达 62 个命令(可能是服务器),并让它们运行,同时在 63rd 中工作。如今,它可能没有那么必要。

默认情况下会创建多个设备文件。活跃的是 1 到 6,但可以通过编辑改变它们的编号/etc/default/console-setup,特别是这部分:

# Setup these consoles.  Most people do not need to change this.
ACTIVE_CONSOLES="/dev/tty[1-6]"
Run Code Online (Sandbox Code Playgroud)

ttyS* 设备

这些是用于串行控制台的设备文件,又名 UART(也称为 RS-232)。过去,许多计算机系统都带有串行端口。如今,这主要可以在服务器类型的计算机上找到。多个 ttyS 设备可用于 RS-232 集线器,允许通过 USB 或以太网管理连接多个设备。

对于电气工程师(这是我在大学主修的),我们使用串行端口与微控制器和开发板(例如 Arduino)进行交互。单端口计算机,例如 Raspberry Pi,也使用它。现在,串行连接是使用 USB 到 UART 电缆建立的,并通过screen如下方式在终端中打开控制台:

screen /dev/ttyUSB0 115200 # the number is baud rate or speed
Run Code Online (Sandbox Code Playgroud)

请注意,Arduino 和 Raspberry 将为串行连接创建自己的设备文件,/dev/ttyUSB0或者/dev/ttyACM0

vcs* 设备

根据man vcs这些是控制台存储设备。简而言之,如果您这样做,sudo cat /dev/vcs1您将在 中看到屏幕上的内容/dev/tty1,至少达到该终端中的最大行数。


K7A*_*AAY 6

实用性是真实的。在真正的多用户 Linux 系统中可以同时运行多个程序,如果每个程序都运行在自己的虚拟终端中,您可以查看每个程序。当您登录每个用户时,您可以根据需要以不同的用户身份登录。现在,当然,许多人是从单用户的角度来到 Linux 的,但是由于 Linux 天生就是多用户的,所以这种功能从未被丢弃。