AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 760249
Accepted
apadana
apadana
Asked: 2023-10-31 14:10:28 +0800 CST2023-10-31 14:10:28 +0800 CST 2023-10-31 14:10:28 +0800 CST

文本模式和模拟文本模式:它们如何工作?

  • 772

我想知道通过在 GNOME 中打开“终端”获得的文本模式与在没有 GUI 的服务器 Linux 发行版中交互的文本模式之间的区别。

我知道名为“terminal”的程序是一个模拟器。我想了解幕后的机制。scanf()例如,在这两种情况下如何调用管理?如果“终端”实现了基于GUI的文本模式,那么另一种文本模式的来源是什么?(我的意思是显示闪烁光标并移动它等的代码)BIOS?内核?用户空间中的进程?

user-interface
  • 2 2 个回答
  • 74 Views

2 个回答

  • Voted
  1. telcoM
    2023-10-31T14:59:25+08:002023-10-31T14:59:25+08:00

    在所有情况下,shell 都会看到 TTY 或 PTY 设备以及 TERM 环境变量,该变量将识别要使用的正确的终端控制代码集。

    当使用 GNOME 的终端窗口时,设备是 UNIX 98 风格的 PTY:/dev/pts/*。当终端窗口处于活动状态并接收 X11/Wayland 键盘事件时,GNOME 终端进程会将它们转换为 UTF-8 字符并将它们输入 PTY 设备的“主”端,因此 CLI 进程从另一端获取它们(传统上) PTY 设备的一侧(称为“从属”)。

    输出的处理方式相同:CLI 进程将 UTF-8 字符和终端控制代码(由 TERM 环境变量标识的正确代码集)写入 PTY 设备,GNOME 终端进程从 PTY 设备的其一侧读取它们,使用它们作为模拟终端的输入,并将模拟视图渲染为 X11/Wayland 图形。

    在 Linux 虚拟控制台设备 ( ) 上时/dev/tty[1..n],过程大致相同,只是终端仿真在内核中运行,因此不存在对用户空间可见的“主”PTY 设备的等效项。

    如果您在串行控制台上操作,CLI 进程将获得一个“真正的”TTY 设备:串行端口 ( /dev/ttyS[0..n])。无论串行电缆另一端是什么,都将负责其余部分:如今,它可能是另一个终端仿真器,例如运行 Linux 的笔记本电脑或minicom包含串行端口支持的相当新版本的 PuTTY。或者它可能是一个真实的终端:可能是一个真实的 Digital VT 系列终端,或者是 HP 700/96。

    或者,如果您热衷于逆向计算,它可能是1930 年代的机电怪物。

    • 5
  2. Best Answer
    Stephen Kitt
    2023-10-31T15:50:50+08:002023-10-31T15:50:50+08:00

    telcoM 的答案解释了程序如何与终端对话(真实的或其他的)。

    您的问题还有另一部分,即当图形终端模拟器未提供终端处理时,终端处理所在的位置。目前存在三种可能性。

    1. 硬件文本模式,内核终端仿真。这依赖于硬件提供文本模式支持,顶部有一个薄控制台层(例如 vgacon或什至mdacon)。内核将实际字符(带有属性)写入视频缓冲区,然后使用硬件字符生成器将它们转换为屏幕上显示的像素。光标也由硬件处理(包括闪烁;有关详细信息,请参阅MS-DOS 光标是什么字符?)。在此设置中,不可能有“图形”输出(尽管创造性地使用了字体)。终端仿真本身,例如将 VT 转义码转换为字符移动,由内核处理。

    2. 帧缓冲区、内核终端仿真。它使用通用的帧缓冲区抽象 ( fbcon) 来提供使用图形帧缓冲区的文本模式控制台。在此变体中,内核将字符转换为像素,处理光标,并且显示不限于文本 - 图形程序也可以运行(无论是特定于帧缓冲区的,如 fbida ,还是使用具有 SDL 等库的帧缓冲区后端或 Gtk)。终端仿真的处理方式与第一个变体相同。

    3. 帧缓冲区,用户空间终端仿真。它使用与之前的变体相同的图形支持,但添加了用户空间终端模拟器,例如kmscon。在这种情况下,从文本输出到屏幕上像素的转换是在程序内部完成的,而不是内核。

    • 2

相关问题

  • 什么错误“X不在sudoers文件中。这个事件将被报告。” 哲学上/逻辑上是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve