# 3.2.虚拟控制台和终端

如果没有配置 FreeBSD 在启动时自动进入图形环境，那么系统将启动到命令行登录提示界面，如下所示：

```sh
FreeBSD/amd64 (pc3.example.org) (ttyv0)

login:
```

第一行包含了一些系统信息。`amd64` 表示 FreeBSD 正运行在 64 位 x86 设备上。主机名是 `pc3.example.org`，而 `ttyv0` 表示这是“系统控制台”。第二行是登录提示符。

由于 FreeBSD 是款多用户系统，因此它需要一种方法来区分不同的用户。这是通过要求每个用户在访问系统上的程序之前先行登录来实现的。每位用户都有一个唯一的“用户名”及其对应的个人“密码”。

要登录系统控制台，请输入安装系统时配置的用户名（详见 [添加用户](https://docs.freebsd.org/en/books/handbook/bsdinstall/#bsdinstall-addusers)）并按下 <kbd>Enter</kbd> 键。然后输入与该用户名关联的密码并再次按下 <kbd>Enter</kbd>。出于安全原因，输入的密码*不会回显*。

若输入了正确的密码，将会显示“今日信息”（MOTD），随后出现命令提示符。根据用户创建时选择的 shell，此提示符可能是 `#`、`$` 或 `%` 字符。这个提示符表明用户已登录到 FreeBSD 系统控制台，并可开始尝试使用可用命令。

## 3.2.1. 虚拟控制台

虽然可以用系统控制台来与系统交互，但在 FreeBSD 系统的键盘上进行命令行操作的用户通常会登录到虚拟控制台。这是因为系统消息默认会输出到系统控制台上。这些信息会覆盖用户正在处理的命令和文件，从而妨碍工作。

FreeBSD 默认配置了多个虚拟控制台供用户输入命令。每个虚拟控制台都有自己的登录提示和 shell，用户可以方便地在它们之间切换。这实质上提供了图形环境中多窗口操作的命令行等价体验。

FreeBSD 保留了快捷键 <kbd>Alt</kbd>+<kbd>F1</kbd> 到 <kbd>Alt</kbd>+<kbd>F8</kbd> 用于切换虚拟控制台。使用 <kbd>Alt</kbd>+<kbd>F1</kbd> 可切换到系统控制台（`ttyv0`），<kbd>Alt</kbd>+<kbd>F2</kbd> 可访问第一个虚拟控制台（`ttyv1`），<kbd>Alt</kbd>+<kbd>F3</kbd> 可访问第二个虚拟控制台（`ttyv2`），依此类推。当使用 Xorg 作为图形控制台时，快捷键变为 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>F1</kbd> 返回文本模式虚拟控制台。

在控制台之间切换时，FreeBSD 会管理屏幕输出。这样产生了一种拥有多个虚拟屏幕和键盘的错觉，每个都可以用于输入 FreeBSD 要执行的命令。在一个虚拟控制台中启动的程序在切换到其他控制台时 *不会* 停止运行。

更详细的 FreeBSD 控制台与键盘驱动说明，可参考 [kbdcontrol(1)](https://man.freebsd.org/cgi/man.cgi?query=kbdcontrol\&sektion=1\&format=html)、[vidcontrol(1)](https://man.freebsd.org/cgi/man.cgi?query=vidcontrol\&sektion=1\&format=html)、[atkbd(4)](https://man.freebsd.org/cgi/man.cgi?query=atkbd\&sektion=4\&format=html)、[syscons(4)](https://man.freebsd.org/cgi/man.cgi?query=syscons\&sektion=4\&format=html) 和 [vt(4)](https://man.freebsd.org/cgi/man.cgi?query=vt\&sektion=4\&format=html)。

在 FreeBSD 中，可用虚拟控制台的数量配置在 `/etc/ttys` 文件的以下部分：

```sh
# name    getty                         type  status comments
#
ttyv0   "/usr/libexec/getty Pc"         xterm   on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv2   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv3   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv4   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv5   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv6   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv7   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure
```

要禁用某个虚拟控制台，在对应那一行的开头加上注释符号（`#`）。例如，要将虚拟控制台数量从八个减少到四个，可以在 `ttyv5` 到 `ttyv8` 这四行前添加 `#`。*不要*注释掉系统控制台 `ttyv0` 的那一行。注意最后一个虚拟控制台（`ttyv8`）用于在已安装并配置 Xorg 时访问图形环境，详见 [X 窗口系统](https://docs.freebsd.org/en/books/handbook/x11/#x11)。

关于该文件中每一列的详细说明以及虚拟控制台的可用选项，参见 [ttys(5)](https://man.freebsd.org/cgi/man.cgi?query=ttys\&sektion=5\&format=html)。

## 3.2.2. 单用户模式

FreeBSD 启动菜单提供了选项 “Boot Single User” 。如果选择此项，系统将启动到一种特殊模式，称为“单用户模式”。该模式通常用于修复无法启动的系统，或者在不知道 `root` 密码时重置该密码。在单用户模式下，网络功能和其他虚拟控制台不可用。但可以获得系统的完整 `root` 权限，并且默认不需要输入 `root` 密码。出于这些原因，启动到该模式需要对键盘有物理访问权限，因此在保护 FreeBSD 系统时，应考虑谁可以访问键盘这一问题。

控制单用户模式的设置位于 `/etc/ttys` 文件的以下部分：

```sh
# name  getty                           type  status  comments
#
# 如果控制台标记为“insecure”，则在进入单用户模式时，init 会要求输入 root 密码。
console none                            unknown  off  secure
```

在默认情况下，状态设为 `secure`。这意味着默认假设对键盘的物理访问要么不重要，要么由实体安全策略加以控制。如果将该设置改为 `insecure`，则说明当前环境是不安全的，因为任何人都可以访问键盘。当将这一行改为 `insecure` 时，FreeBSD 会在用户选择启动单用户模式时提示输入 `root` 密码。

> **注意**
>
> **更改此设置为 `insecure` 时请小心！** 如果忘记了 `root` 密码，虽然仍可启动到单用户模式，但对不熟悉 FreeBSD 启动流程的人来说可能会很困难。

## 3.2.3. 更改控制台显示模式

FreeBSD 控制台的默认显示模式可以调整为 1024x768、1280x1024 或任何显卡和显示器支持的分辨率。要使用不同的显示模式，需加载 `VESA` 模块：

```sh
# kldload vesa
```

要查看硬件支持哪些显示模式，请使用 [vidcontrol(1)](https://man.freebsd.org/cgi/man.cgi?query=vidcontrol\&sektion=1\&format=html)。运行以下命令可获取支持的显示模式列表：

```sh
# vidcontrol -i mode
```

此命令的输出列出了硬件支持的显示模式。要选择新的显示模式，使用 `root` 用户身份通过 [vidcontrol(1)](https://man.freebsd.org/cgi/man.cgi?query=vidcontrol\&sektion=1\&format=html) 指定模式：

```sh
# vidcontrol MODE_279
```

如果新的显示模式符合要求，可以通过在 `/etc/rc.conf` 中添加以下行，使其在启动时自动生效：

```sh
allscreens_flags="MODE_279"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-3-zhang-freebsd-ji-chu/3.2.-xu-ni-kong-zhi-tai-he-zhong-duan.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
