第 7 章 GUI（图形用户界面）系统

# 第 7 章 GUI（图形用户界面）系统

## 7.1. GUI（图形用户界面）桌面环境

在 Debian 系统上，有几个功能全面的 GUI 桌面环境选择。

表 7.1. 桌面环境列表

任务软件包 | 流行度 | 大小 | 说明
--- | --- | --- | ---
`task-gnome-desktop` | I:200 | 9 | GNOME 桌面环境
`task-xfce-desktop` | I:91 | 9 | Xfce 桌面环境
`task-kde-desktop` | I:96 | 6 | KDE Plasma 桌面环境
`task-mate-desktop` | I:35 | 9 | MATE 桌面环境
`task-cinnamon-desktop` | I:39 | 9 | Cinnamon 桌面环境
`task-lxde-desktop` | I:22 | 9 | LXDE 桌面环境
`task-lxqt-desktop` | I:17 | 9 | LXQt 桌面环境
`task-gnome-flashback-desktop` | I:11 | 6 | GNOME Flashback 桌面环境

| 提示

选择的任务元软件包的依赖软件包，在 Debian `非稳定版`/`测试版` 环境下，由于最新的软件包变迁状态，可能没有及时同步。对于 `task-gnome-desktop`，你可以按下面的方法调整软件包选择：

- 用 `sudo aptitude -u` 启动 `aptitude`(8)。

- 移动光标到"Tasks"并按回车键。

- 移动光标到 "End-user" 并按回车键。

- 移动光标到 "GNOME" 并按回车键。

- 移动光标到 `task-gnome-desktop` 并按回车键。

- 移动光标到 "Depends" 并按 "m"（手工选择）。

- 移动光标到 "Recommends"并按"m" （手工选择）。

- 移动光标到 "`task-gnome-desktop` 并按"-"。（删除）

- 调整选择的软件包，并删除造成软件包冲突的问题软件包。

- 按"g" 来开始安装。

本章将大部分关注 Debian 默认的桌面环境： `task-gnome-desktop`，在 wayland 上提供 GNOME。

## 7.2. GUI（图形用户界面）通信协议

在 GNOME 桌面使用的 GUI 通信协议可以为：

- Wayland (服务端显示协议) (原生)

- X 窗口系统核心协议 (通过 `xwayland`)

请查看 freedesktop.org 站点来了解 Wayland 架构和 X 窗口架构是如何不同。

从用户的观点，不同能够被通俗的概况为：

- Wayland 是在同一个主机上的 GUI 通信协议：新、简单、快速，不需要 setuid root 二进制

- X Window 是一个具备网络功能的 GUI 通信协议：传统、复杂、慢，需要 setuid root 二进制

对于使用 Wayland 协议的应用，由 VNC 或 RDP 来支持从一个远程主机上访问它们显示的内容。参见 第 7.8 节 “远程桌面”

现代 X 服务器具有 MIT 共享内存扩展 ，他们和本地 X 客户端通过本地共享内存进行通讯. 这就绕过了网络透明的 Xlib 进程间通讯通道，获得了性能。这个情况，也是创建 Wayland 作为本地 GUI 通信协议的背景。

使用从 GNOME 终端启动的 `xeyes` 程序，你能够检查每个 GUI（图形用户界面）应用程序使用的 GUI 通信协议。

     $ xeyes

- 如果鼠标是在使用 Wayland 服务端显示协议的应用程序上，比如“GNOME 终端”，眼睛不会跟随鼠标移动。

- 如果鼠标是在使用 X 窗口系统核心协议的应用程序上，比如“xterm”，眼睛会跟随鼠标移动，暴露出不是那么孤立的 X 窗口架构的特性。

到 2021 年 4 月，许多流行的 GUI 应用程序，比如 GNOME 和 LibreOffice (LO) 已经被移植到了 Wayland 服务端显示协议。我发现 `xterm`, `gitk`, `chromium`, `firefox`, `gimp`, `dia` 和 KDE 应用程序任然使用 X 窗口系统核心协议。

| 注意
对于 Wayland 之上的 xwayland 或 原生的 X 窗口系统，这两个上面的旧的 X 服务端配置文件 "`/etc/X11/xorg.conf`" 不应当在系统上存在。显卡和输入设备目前是由内核的 DRM、KMS 和 udev 配置。原生的 X 服务端已经重写来使用它们。参见 Linux 内核文档的 "modedb default video mode support"。

## 7.3. GUI（图形用户界面）架构

这里是 Wayland 环境上用于 GNOME 的著名的 GUI 架构软件包。

表 7.2. 著名的 GUI 架构软件包列表

软件包 | 流行度 | 软件包大小 | 说明
--- | --- | --- | ---
`mutter` | V:0, I:28 | 222 | GNOME 的 mutter 窗口管理器 [auto]
`xwayland` | V:255, I:346 | 2541 | 运行在 wayland 之上的一个 X 服务端 [auto]
`gnome-remote-desktop` | V:122, I:250 | 2215 | 使用 PipeWire 的 GNOME 远程桌面后台守护进程（daemon） [auto]
`gnome-tweaks` | V:19, I:242 | 1145 | GNOME 的高级配置设置
`gnome-shell-extension-prefs` | V:9, I:145 | 83 | 启用/禁用 GNOME 外壳扩展的工具

这里，"[auto]" 表示这些软件包在 `task-gnome-desktop` 安装时会自动安装。

| 提示

`gnome-tweaks` 是一个不可缺少的配置工具。例如：

- 你能强制调整声音音量，从“General（普通） ”到 "Over-Amplification（过分放大）"。

- 你能够强迫"Caps"键变成"Esc"键，从"Keyboard & Mouse" -> "Keyboard" -> "Additional Layout Option".

| 提示
GNOME 桌面环境的详细特征能够使用工具来配置，在按下 `Super`-键后，通过选择 "`settings`", "`tweaks`"或 "`extensions`" 来启动配置。

## 7.4. GUI（图形用户界面）应用

现在在 Debian 上，有许多有用的 GUI 应用存在。如果在 GNOME 桌面环境中没有相应功能的软件，那么安装例如 `scribus`（KDE）这样的软件包是完全可以接受的。但安装过多功能重复的软件包，会使你的系统凌乱。

这里是一份捕获我眼球的 GUI（图形用户界面）程序列表。

表 7.3. 著名的的 GUI（图形用户界面）应用列表

软件包 | 流行度 | 软件包大小 | 类型 | 说明
--- | --- | --- | --- | ---
`evolution` | V:28, I:240 | 492 | GNOME | 个人信息管理（群组软体和电子邮件）
`thunderbird` | V:46, I:109 | 274692 | GTK | 电子邮件客户端 (Mozilla Thunderbird（雷鸟）)
`kontact` | V:1, I:11 | 2298 | KDE | 个人信息管理（群组软体和电子邮件）
`libreoffice-writer` | V:120, I:441 | 33269 | LO | 文字处理软件
`abiword` | V:1, I:5 | 3601 | GNOME | 文字处理软件
`calligrawords` | V:0, I:3 | 6937 | KDE | 文字处理软件
`scribus` | V:1, I:13 | 32052 | KDE | 编辑 PDF 文件的 desktop publishing 编辑器
`glabels` | V:0, I:2 | 1283 | GNOME | 标签编辑器
`libreoffice-calc` | V:116, I:438 | 28287 | LO | 电子表格
`gnumeric` | V:3, I:11 | 9958 | GNOME | 电子表格
`calligrasheets` | V:0, I:2 | 13593 | KDE | 电子表格
`libreoffice-impress` | V:97, I:436 | 2459 | LO | 演示文稿
`calligrastage` | V:0, I:2 | 6017 | KDE | 演示文稿
`libreoffice-base` | V:24, I:77 | 5004 | LO | 数据库管理
`kexi` | V:0, I:0 | 7565 | KDE | 数据库管理
`libreoffice-draw` | V:98, I:437 | 11003 | LO | 矢量图形编辑器（绘图）
`inkscape` | V:13, I:85 | 113183 | GNOME | 矢量图形编辑器（绘图）
`karbon` | V:0, I:3 | 3962 | KDE | 矢量图形编辑器（绘图）
`dia` | V:1, I:18 | 3812 | GTK | 流程图和示意图编辑器
`gimp` | V:35, I:229 | 31748 | GTK | 位图图形编辑器 (绘图)
`shotwell` | V:15, I:258 | 6334 | GTK | 数码照片管理器
`digikam` | V:1, I:9 | 302 | KDE | 数码照片管理器
`darktable` | V:3, I:12 | 35895 | GTK | 摄影师的虚拟灯台和暗房
`planner` | V:0, I:4 | 1400 | GNOME | 项目管理
`calligraplan` | V:0, I:3 | 23545 | KDE | 项目管理
`gnucash` | V:2, I:7 | 29395 | GNOME | 个人会计
`homebank` | V:0, I:1 | 3194 | GTK | 个人会计
`lilypond` | V:0, I:6 | 16924 | - | 音乐排版
`kmymoney` | V:0, I:2 | 18826 | KDE | 个人会计
`librecad` | V:1, I:14 | 9100 | Qt 应用 | 计算机辅助设计(CAD) 系统 (2D)
`freecad` | V:0, I:20 | 110 | Qt 应用 | 计算机辅助设计(CAD) 系统 (3D)
`kicad` | V:3, I:15 | 163907 | GTK | 电路图和 PCB 设计软件
`xsane` | V:10, I:135 | 1512 | GTK | 扫描仪前段
`libreoffice-math` | V:90, I:439 | 1928 | LO | 数学方程/公式编辑器
`calibre` | V:8, I:26 | 65584 | KDE | 电子书转换器和库管理
`fbreader` | V:0, I:6 | 3783 | GTK | 电子书阅读器
`evince` | V:80, I:302 | 952 | GNOME | 文档（pdf）阅读器
`okular` | V:44, I:135 | 4415 | KDE | 文档（pdf）阅读器
`x11-apps` | V:33, I:464 | 2461 | 单纯的 X 应用 | `xeyes`(1)等。
`x11-utils` | V:227, I:568 | 651 | 单纯的 X 应用 | `xev`(1)、 `xwininfo`(1)等。

## 7.5. 用户目录

用户目录，比如"`~/Desktop`"、"`~/Documents`"……，其默认的名字，使用系统安装时桌面环境的语言。你能够把它们重置为英语：

     $ LANGUAGE=C xdg-user-dirs-update --force

然后你手工移到所有数据到新的目录。参加 `xdg-user-dirs-update`(1)。

通过编辑 "`~/.config/user-dirs.dirs`"，你也能够把它们设置为任何名字。参见 `user-dirs.dirs`(5)。

## 7.6. 字体

对于 Debian 的用户，有许多有用的矢量字体存在。用户关注是怎样避免冗余，怎样配置禁用部分已经安装的字体。此外，无用的字体选择可以搞乱你的 GUI（图形用户界面）应用程序菜单。

Debian 系统使用 FreeType 2.0 库来栅格化许多矢量字体格式，用于屏幕和打印：

- Type 1 (PostScript) 字体 使用三次 贝塞尔曲线 (差不多废弃的格式)

- TrueType 字体 使用二次 贝塞尔曲线 (好的选择格式)

- OpenType 字体 使用三次 贝塞尔曲线 (最佳选择格式)

### 7.6.1. 基础字体

下面的编撰的表格希望帮助用户选择适当的矢量字体，并清楚的理解 排版指标兼容（metric compatibility） 和 字形覆盖。大部分字体覆盖了所有拉丁、希腊和 Cyril 字符。最终选择的激活字体也受你的审美观影响。这些字体能够被用于屏幕显示和纸张打印。

表 7.4. 著名的 TrueType 和 OpenType 字体列表

软件包 | 流行度 | 大小 | sans | serif | mono | 字体注释
--- | --- | --- | --- | --- | --- | ---
fonts-cantarell | V:182, I:305 | 227 | 59 | - | - | Cantarell (GNOME 3, 显示)
fonts-noto | I:157 | 31 | 61 | 63 | 40 | Noto fonts (Google, 有 CJK 的多语言)
fonts-dejavu | I:405 | 35 | 58 | 68 | 40 | DejaVu (GNOME 2, MCM:Verdana, 扩展 Bitstream Vera)
fonts-liberation2 | V:63, I:218 | 15 | 56 | 60 | 40 | Liberation 字体 用于 LibreOffice (Red Hat, MCMATC)
fonts-croscore | V:21, I:38 | 5274 | 56 | 60 | 40 | Chrome OS: Arimo, Tinos 和 Cousine (Google, MCMATC)
fonts-crosextra-carlito | V:20, I:98 | 2696 | 57 | - | - | Chrome 操作系统: Carlito (Google, MCM:Calibri )
fonts-crosextra-caladea | V:11, I:93 | 347 | - | 55 | - | Chrome 操作系统: Caladea (Google, MCM:Cambria ) (只有拉丁字符 )
fonts-freefont-ttf | V:82, I:207 | 14460 | 57 | 59 | 40 | GNU FreeFont (扩展 URW Nimbus)
fonts-quicksand | V:209, I:465 | 392 | 56 | - | - | Debian 任务桌面, Quicksand (显示，只有拉丁字符)
fonts-hack | V:33, I:140 | 2507 | - | - | 40 P | 给源代码设计的一个字体 Hack (Facebook)
fonts-sil-gentiumplus | I:30 | 14345 | - | 54 | - | Gentium SIL
fonts-sil-charis | I:29 | 6704 | - | 59 | - | Charis SIL
fonts-urw-base35 | V:194, I:541 | 15560 | 56 | 60 | 40 | URW Nimbus (Nimbus Sans, Roman No. 9 L, Mono L, MCAHTC)
fonts-ubuntu | V:2, I:5 | 4339 | 58 | - | 33 P | Ubuntu 字体 (显示)
fonts-terminus | V:0, I:4 | 452 | - | - | 33 | Cool retro 终端字体
ttf-mscorefonts-installer | V:0, I:42 | 85 | 56? | 60 | 40 | 下载微软非开源字体（见下）

这里：

- "MCM"表示"与微软提供的字体是排版指标兼容的"

- "MCMATC"表示和"微软提供的字体： Arial, Times New Roman, Courier New 排版指标兼容"

- "MCAHTC" 表示 "和 Adobe 提供的字体: Helvetica, Times, Courier 排版指标兼容"

- 在字体类型列的数字表示对相同磅数的字体与 M 字重的相对粗细程度（译注：M 表示 Medium 适中，字体粗细程度的适中值）。

- 在 mono 字体类型列中的"P" 表示用于编程中，能够清晰的区分 "0"/"O" 和 "1"/"I"/"l"。

- `ttf-mscorefonts-installer` 软件包下载微软的 "Core fonts for the Web" 并安装 Arial, Times New Roman, Courier New, Verdana, ... 。这些安装的字体数据，是非开源的数据。

许多开源的拉丁字体，有 URW Nimbus 家族或 Bitstream Vera 的血统痕迹。

| 提示
如果你的语言环境所需要的字体没有在上面的字体中涵盖，请使用 aptitude 在 "Tasks" -> "Localization" 下面检查任务软件包列表。字体软件包作为 "Depends:" 或 "Recommends:" 列出，在本地化任务软件包里面是首要候选软件包。

### 7.6.2. 字体栅格化

Debian 使用 FreeType 来栅格化字体。它的字体选择架构由 Fontconfig 字体配置库提供。

表 7.5. 著名的字体环境和相关软件包列表

软件包 | 流行度 | 大小 | 说明
--- | --- | --- | ---
`libfreetype6` | V:580, I:997 | 1021 | FreeType 字体栅格化库
`libfontconfig1` | V:569, I:827 | 344 | Fontconfig 字体配置库
`fontconfig` | V:462, I:706 | 415 | `fc-*`: Fontconfig 命令行命令
`font-manager` | V:2, I:7 | 1118 | Font 管理器: Fontconfig GUI（图形用户界面）命令
`nautilus-font-manager` | V:0, I:0 | 40 | Font 管理器 的 Nautilus 扩展

| 提示
一些字体软件包，比如说 `fonts-noto*`，会安装太多的字体。你可以保持某些字体软件包的安装，但在通常使用的情况下禁用。由于 Han unification 中日韩统一表意文字， 一些 Unicode 码点被期望有多个 字形，不希望的字形变体会被没有配置的 Fontconfig 库选择。一个最令人讨厌的情形是在 CJK 中日韩国家中的 "U+3001 IDEOGRAPHIC COMMA" 和 "U+3002 IDEOGRAPHIC FULL STOP"。你能够使用 GUI（图形用户界面）字体管理器 (font-manager) 简单的配置存在的字体来避免这个问题情形。

你也可以从命令行列出字体配置状态。

- 使用 “`fc-match(1)`” 查看 fontconfig 的默认字体

- 使用 “`fc-list(1)`” 查看所有可用的 fontconfig 字体

你能够从文本编辑器配置字体配置状态，但这是琐碎的。参见 `fonts.conf`(5)。

## 7.7. 沙盒

Linux 上大部分 GUI（图形用户界面）应用在非 Debian 的源上，是以二进制格式存在。

- AppImage -- 任何地方运行的 Linux 应用

- FLATHUB -- Linux 应用，就是这里

- snapcraft -- Linux 应用商店

| 警告
从这些站点来的二进制软件包，有可能包括私有的非开源软件。

对使用 Debian 的自由软件的狂热爱好者，这些二进制格式的分发，有一些存在的理由。因为这能够得到一个干净的库集合，由 Debian 提供的库和由每个应用程序相应的上游开发者使用的库，独立开来。

运行外部二进制的固有风险，能够使用 沙盒环境 减少，它有现代 Linux 安全特性的手段。（参见 第 4.7.5 节 “Linux 安全特性”）。

- 对于 AppImage 和一些上游站点来的二进制，在 手工配置 后的 firejail 里运行。

- 对于从 FLATHUB 来的二进制，在 Flatpak 里运行它们。（不需要手工配置。）

- 对于从 snapcraft 来的二进制，在 Snap 里面运行它们。（不需要手工配置。和后台守护进程（daemon）兼容。）

`xdg-desktop-portal` 软件包为通用的桌面特性提供一个标准的 API。参见 xdg-desktop-portal (flatpak) 和 xdg-desktop-portal (snap) 。

表 7.6. 著名的沙盒环境和相关软件包列表

软件包 | 流行度 | 大小 | 说明
--- | --- | --- | ---
`flatpak` | V:101, I:107 | 8280 | Flatpak 桌面应用程序配置框架
`gnome-software-plugin-flatpak` | V:29, I:41 | 285 | GNOME 软件 管理器的 Flatpak 支持
`snapd` | V:65, I:69 | 72012 | 启用 snap 软件包的后台守护进程（daemon）和工具
`gnome-software-plugin-snap` | V:1, I:2 | 148 | GNOME 软件 管理器的 Snap 支持
`xdg-desktop-portal` | V:364, I:449 | 2166 | Flatpak 和 Snap 的桌面集成门户
`xdg-desktop-portal-gtk` | V:332, I:447 | 715 | gtk (GNOME) 的 xdg-desktop-portal 后端
`xdg-desktop-portal-kde` | V:79, I:112 | 2688 | Qt (KDE) 的 xdg-desktop-portal 后端
`xdg-desktop-portal-wlr` | V:1, I:6 | 160 | wlroots (Wayland) 的 xdg-desktop-portal 后端
`firejail` | V:1, I:4 | 1881 | 和 AppImage 一起使用的 SUID 安全沙盒程序 firejail

这个沙盒环境技术和在智能手机操作系统上的应用程序非常相像，这里的应用程序也是在资源访问受到控制下执行的。

一些大的 GUI（图形用户界面）应用程序，比如说 Debian 上的网页浏览器，也在内部使用了沙盒环境技术，这样让它们安全性更好。

## 7.8. 远程桌面

表 7.7. 著名的远程访问服务端列表

访问在远程主机上使用 Wayland 协议的桌面和应用，由远程主机上的 GNOME 远程桌面 软件提供，通过 VNC 或 RDP 到本地客户端。

访问所有 QEMU 虚拟机桌面的能力是由 SPICE (the Simple Protocol for Independent Computing Environments) 协议提供。

软件包 | 流行度 | 大小 | 协议 | 说明
--- | --- | --- | --- | ---
`gnome-remote-desktop` | V:122, I:250 | 2215 | RDP | GNOME 远程桌面 服务端
`xrdp` | V:24, I:28 | 4502 | RDP | xrdp, 远程桌面协议 (RDP) 服务器
`x11vnc` | V:8, I:42 | 1863 | RFB (VNC) | x11vnc, 远程帧缓存协议 (VNC) 服务器
`tigervnc-standalone-server` | V:5, I:14 | 2967 | RFB (VNC) | TigerVNC, 远程帧缓存协议 (VNC) 服务器
`gnome-connections` | V:6, I:125 | 1599 | RDP, RFB (VNC) | GNOME 远程桌面客户端
`vinagre` | V:1, I:28 | 4249 | RDP, RFB (VNC), SPICE, SSH | Vinagre: GNOME 远程桌面客户端
`remmina` | V:15, I:64 | 971 | RDP, RFB (VNC), SPICE, SSH, ... | Remmina: GTK 远程桌面客户端
`krdc` | V:1, I:16 | 4113 | RDP, RFB (VNC) | KRDC: KDE 远程桌面客户端
`virt-viewer` | V:5, I:44 | 1278 | RFB (VNC), SPICE | 虚拟机管理器 下的客户机操作系统的 GUI 显示客户端

## 7.9. X 服务端连接

有几种方法从远程主机上的应用连接到 X 服务端（包括本地主机的 `xwayland` ）。

表 7.8. 连接到 X 服务端的方式

软件包 | 流行度 | 大小 | 命令 | 说明
--- | --- | --- | --- | ---
`openssh-server` | V:745, I:804 | 3502 | `sshd` 使用选项 `X11-forwarding` | SSH 服务端（安全）
`openssh-client` | V:898, I:996 | 5133 | `ssh -X` | SSH 客户端（安全）
`xauth` | V:186, I:971 | 81 | `xauth` | X 授权文件工具
`x11-xserver-utils` | V:312, I:542 | 559 | `xhost` | X 服务端访问控制

### 7.9.1. X 服务端本地连接

使用 X 核心协议的本地应用，能够通过本地 UNIX 域名套接字进行本地连接，来访问本地的 X 服务端。这可以通过拥有 access cookie 的授权文件来授权。 授权文件的位置通过"`$XAUTHORITY`"环境变量确定，X 显示通过"`$DISPLAY`" 环境变量确定。由于这些环境变量通常会被自动设置，不需要另行指定。 例如，下面的 "`gitk`"。

    username $ gitk

| 注意
对于 `xwayland`, `XAUTHORITY` 有类似 "`/run/user/1000/.mutter-Xwaylandauth.YVSU30`"的值。

### 7.9.2. X 服务端远程连接

使用 X 核心协议的远程应用访问本地的 X 服务器显示，由 X11 转发特性支持。

- 在本地主机中打开一个 `gnome 终端`。

- 通过下列命令，运行带 `-X` 选项的 `ssh`(1)，建立与远程站点的连接。

      localname @ localhost $ ssh -q -X loginname@remotehost.domain
      Password:

- 通过下列命令，在远程站点运行一个 X 应用程序，例如 “`gitk`”。

      loginname @ remotehost $ gitk

这个方法可以显示来自远程 X 客户端的输出，相当于它是通过一个本地 UNIX 域名套接字进行本地的连接。

参见介绍 SSH/SSHD 的 第 6.3 节 “服务器远程访问和工具 (SSH)” 。

| 警告
由于安全的原因，在 Debian 系统上，远程 TCP/IP 连接到 X 服务端，是默认被禁用的。不要通过简单的设置 "`xhost +`"来启用它们。如果能够避免的话，也不要启用 XDMCP 连接。

### 7.9.3. X 服务端 chroot 连接

在同一个环境下（比如 chroot），使用 X 核心协议的应用访问同一主机的 X 服务端，授权文件无法访问，能够使用 `xhost` 进行安全的授权，通过使用 User-based access ，例如下面的 "`gitk`"。

    username $ xhost + si:localuser:root ; sudo chroot /path/to
    # cd /src
    # gitk
    # exit
    username $ xhost -

## 7.10. 剪贴板

剪贴文本到剪贴板，参见 第 1.4.4 节 “鼠标操作”。

剪贴图像到剪贴板，参见 第 11.6 节 “图形数据工具”。

一些命令行的命令也能操作字符剪贴板（主要键和剪贴板）。

表 7.9. 操作字符剪贴板相关程序列表

软件包 | 流行度 | 软件包大小 | 当前目标 | 说明
--- | --- | --- | --- | ---
`xsel` | V:7, I:43 | 55 | X | X 选择的命令行接口（剪贴板）
`xclip` | V:15, I:74 | 62 | X | X 选择的命令行接口（剪贴板）
`wl-clipboard` | V:7, I:23 | 162 | Wayland | `wl-copy` `wl-paste`: Wayland 剪贴板 的命令行接口
`gpm` | V:9, I:9 | 526 | Linux 控制台 | 在 Linux 控制台上捕获鼠标事件的后台守护进程（daemon）

第 6 章 网络应用 |  | 第 8 章 国际化和本地化