在Debian系统中,图形界面(GUI)为用户提供了直观、易于操作的工作环境。本章节将详细介绍Debian图形界面系统的各个组成部分,包括桌面环境、通信协议、架构、应用等。此外,还将探讨字体的处理方式,如基础字体和字体栅格化等。
一、GUI桌面环境
在 Debian 系统上,有几个功能全面的 GUI 桌面环境选择。
桌面环境列表:
任务软件包 | 流行度 | 大小 | 说明 |
task-gnome-desktop | I:196 | 9 | GNOME 桌面环境 |
task-xfce-desktop | I:97 | 9 | Xfce 桌面环境 |
task-kde-desktop | I:79 | 6 | KDE Plasma 桌面环境 |
task-mate-desktop | I:43 | 9 | MATE 桌面环境 |
task-cinnamon-desktop | I:40 | 9 | Cinnamon 桌面环境 |
task-lxde-desktop | I:29 | 9 | LXDE 桌面环境 |
task-lxqt-desktop | I:18 | 9 | LXQt 桌面环境 |
task-gnome-flashback-desktop | I:12 | 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” 来开始安装。
二、GUI通信协议
在 GNOME 桌面使用的 GUI 通信协议可以为:
- Wayland (服务端显示协议) (原生);
- X 窗口系统核心协议 (通过 xwayland)。
从用户的观点,不同能够被通俗的概况为:
- Wayland 是在同一个主机上的 GUI 通信协议:新、简单、快速,不需要 setuid root 二进制;
- X Window 是一个具备网络功能的 GUI 通信协议:传统、复杂、慢,需要 setuid root 二进制。
对于使用 Wayland 协议的应用,由 VNC 或 RDP 来支持从一个远程主机上访问它们显示的内容。
现代 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”。
三、GUI架构
这里是 Wayland 环境上用于 GNOME 的著名的 GUI 架构软件包。
著名的 GUI 架构软件包列表:
软件包 | 流行度 | 软件包大小 | 说明 |
mutter | V:1, I:66 | 186 | GNOME 的 mutter 窗口管理器 [auto] |
xwayland | V:230, I:310 | 2388 | 运行在 wayland 之上的一个 X 服务端 [auto] |
gnome-remote-desktop | V:38, I:211 | 1063 | 使用 PipeWire 的 GNOME 远程桌面后台守护进程(daemon) [auto] |
gnome-tweaks | V:20, I:225 | 1200 | GNOME 的高级配置设置 |
gnome-shell-extension-prefs | V:11, I:205 | 60 | 启用/禁用 GNOME 外壳扩展的工具 |
这里,”[auto]” 表示这些软件包在 task-gnome-desktop 安装时会自动安装。
gnome-tweaks 是一个不可缺少的配置工具。例如:
- 能强制调整声音音量,从“General(普通) ”到 “Over-Amplification(过分放大)”;
- 能够强迫”Caps”键变成”Esc”键,从”Keyboard & Mouse” -> “Keyboard” -> “Additional Layout Option”。
GNOME 桌面环境的详细特征能够使用工具来配置,在按下 Super-键后,通过选择 “settings”, “tweaks”或 “extensions” 来启动配置。
四、GUI应用
现在在 Debian 上,有许多有用的 GUI 应用存在。如果在 GNOME 桌面环境中没有相应功能的软件,那么安装例如 scribus(KDE)这样的软件包是完全可以接受的。但安装过多功能重复的软件包,会使系统凌乱。
著名的的 GUI(图形用户界面)应用列表:
软件包 | 流行度 | 软件包大小 | 类型 | 说明 |
evolution | V:30, I:236 | 484 | GNOME | 个人信息管理(群组软体和电子邮件) |
thunderbird | V:52, I:121 | 224527 | GTK | 电子邮件客户端 (Mozilla Thunderbird(雷鸟)) |
kontact | V:1, I:12 | 2208 | KDE | 个人信息管理(群组软体和电子邮件) |
libreoffice-writer | V:111, I:432 | 30969 | LO | 文字处理软件 |
abiword | V:1, I:8 | 3467 | GNOME | 文字处理软件 |
calligrawords | V:0, I:7 | 6097 | KDE | 文字处理软件 |
scribus | V:1, I:17 | 30242 | KDE | 编辑 PDF 文件的 desktop publishing 编辑器 |
glabels | V:0, I:3 | 1338 | GNOME | 标签编辑器 |
libreoffice-calc | V:104, I:429 | 25688 | LO | 电子表格 |
gnumeric | V:3, I:15 | 9909 | GNOME | 电子表格 |
calligrasheets | V:0, I:5 | 11396 | KDE | 电子表格 |
libreoffice-impress | V:70, I:426 | 2542 | LO | 演示文稿 |
calligrastage | V:0, I:5 | 5339 | KDE | 演示文稿 |
libreoffice-base | V:28, I:128 | 5038 | LO | 数据库管理 |
kexi | V:0, I:1 | 7118 | KDE | 数据库管理 |
libreoffice-draw | V:71, I:427 | 10405 | LO | 矢量图形编辑器(绘图) |
inkscape | V:15, I:118 | 99852 | GNOME | 矢量图形编辑器(绘图) |
karbon | V:0, I:6 | 3610 | KDE | 矢量图形编辑器(绘图) |
dia | V:3, I:23 | 3908 | GTK | 流程图和示意图编辑器 |
gimp | V:38, I:255 | 19303 | GTK | 位图图形编辑器 (绘图) |
shotwell | V:17, I:252 | 6237 | GTK | 数码照片管理器 |
digikam | V:2, I:10 | 293 | KDE | 数码照片管理器 |
darktable | V:4, I:13 | 30563 | GTK | 摄影师的虚拟灯台和暗房 |
planner | V:0, I:4 | 1394 | GNOME | 项目管理 |
calligraplan | V:0, I:2 | 19013 | KDE | 项目管理 |
gnucash | V:2, I:8 | 28309 | GNOME | 个人会计 |
homebank | V:0, I:2 | 1218 | GTK | 个人会计 |
lilypond | V:0, I:7 | 16092 | – | 音乐排版 |
kmymoney | V:0, I:2 | 13937 | KDE | 个人会计 |
librecad | V:1, I:15 | 8798 | Qt 应用 | 计算机辅助设计(CAD) 系统 (2D) |
freecad | I:18 | 53 | Qt 应用 | 计算机辅助设计(CAD) 系统 (3D) |
kicad | V:2, I:14 | 235913 | GTK | 电路图和 PCB 设计软件 |
xsane | V:12, I:145 | 2339 | GTK | 扫描仪前段 |
libreoffice-math | V:52, I:429 | 1960 | LO | 数学方程/公式编辑器 |
calibre | V:6, I:28 | 62167 | KDE | 电子书转换器和库管理 |
fbreader | V:1, I:9 | 3783 | GTK | 电子书阅读器 |
evince | V:93, I:313 | 941 | GNOME | 文档(pdf)阅读器 |
okular | V:40, I:121 | 17728 | KDE | 文档(pdf)阅读器 |
x11-apps | V:31, I:460 | 2460 | 单纯的 X 应用 | xeyes(1)等。 |
x11-utils | V:195, I:565 | 651 | 单纯的 X 应用 | xev(1)、 xwininfo(1)等。 |
五、字体
对于 Debian 的用户,有许多有用的矢量字体存在。用户关注是怎样避免冗余,怎样配置禁用部分已经安装的字体。此外,无用的字体选择可以搞乱 GUI(图形用户界面)应用程序菜单。
Debian 系统使用 FreeType 2.0 库来栅格化许多矢量字体格式,用于屏幕和打印:
- Type 1 (PostScript) 字体 使用三次 贝塞尔曲线 (差不多废弃的格式);
- TrueType 字体 使用二次 贝塞尔曲线 (好的选择格式);
- OpenType 字体 使用三次 贝塞尔曲线 (最佳选择格式)。
1、基础字体
下面的编撰的表格希望帮助用户选择适当的矢量字体,并清楚的理解 排版指标兼容(metric compatibility) 和 字形覆盖。大部分字体覆盖了所有拉丁、希腊和 Cyril 字符。最终选择的激活字体也受审美观影响。这些字体能够被用于屏幕显示和纸张打印。
著名的 TrueType 和 OpenType 字体列表:
软件包 | 流行度 | 大小 | sans | serif | mono | 字体注释 |
fonts-cantarell | V:213, I:304 | 572 | 59 | – | – | Cantarell (GNOME 3, 显示) |
fonts-noto | I:149 | 31 | 61 | 63 | 40 | Noto fonts (Google, 有 CJK 的多语言) |
fonts-dejavu | I:423 | 35 | 58 | 68 | 40 | DejaVu (GNOME 2, MCM:Verdana, 扩展 Bitstream Vera) |
fonts-liberation2 | V:125, I:420 | 15 | 56 | 60 | 40 | Liberation 字体 用于 LibreOffice (Red Hat, MCMATC) |
fonts-croscore | V:20, I:41 | 5274 | 56 | 60 | 40 | Chrome OS: Arimo, Tinos 和 Cousine (Google, MCMATC) |
fonts-crosextra-carlito | V:21, I:138 | 2696 | 57 | – | – | Chrome 操作系统: Carlito (Google, MCM:Calibri ) |
fonts-crosextra-caladea | I:135 | 347 | – | 55 | – | Chrome 操作系统: Caladea (Google, MCM:Cambria ) (只有拉丁字符 ) |
fonts-freefont-ttf | V:74, I:220 | 14460 | 57 | 59 | 40 | GNU FreeFont (扩展 URW Nimbus) |
fonts-quicksand | V:86, I:432 | 392 | 56 | – | – | Debian 任务桌面, Quicksand (显示,只有拉丁字符) |
fonts-hack | V:24, I:116 | 2508 | – | – | 40 P | 给源代码设计的一个字体 Hack (Facebook) |
fonts-sil-gentiumplus | I:32 | 14345 | – | 54 | – | Gentium SIL |
fonts-sil-charis | I:27 | 6704 | – | 59 | – | Charis SIL |
fonts-urw-base35 | V:164, I:457 | 15558 | 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:3 | 453 | – | – | 33 | Cool retro 终端字体 |
ttf-mscorefonts-installer | V:1, I:51 | 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:” 列出,在本地化任务软件包里面是首要候选软件包。
2、字体栅格化
Debian 使用 FreeType 来栅格化字体。它的字体选择架构由 Fontconfig 字体配置库提供。
著名的字体环境和相关软件包列表:
软件包 | 流行度 | 大小 | 说明 |
libfreetype6 | V:565, I:997 | 933 | FreeType 字体栅格化库 |
libfontconfig1 | V:561, I:850 | 580 | Fontconfig 字体配置库 |
fontconfig | V:443, I:719 | 679 | fc-*: Fontconfig 命令行命令 |
font-manager | V:2, I:8 | 1038 | Font 管理器: Fontconfig GUI(图形用户界面)命令 |
nautilus-font-manager | V:0, I:0 | 37 | Font 管理器 的 Nautilus 扩展 |
也可以从命令行列出字体配置状态:
- 使用 “fc-match(1)” 查看 fontconfig 的默认字体;
- 使用 “fc-list(1)” 查看所有可用的 fontconfig 字体。
能够从文本编辑器配置字体配置状态,但这是琐碎的。
六、沙盒
Linux 上大部分 GUI(图形用户界面)应用在非 Debian 的源上,是以二进制格式存在。
- AppImage — 任何地方运行的 Linux 应用;
- FLATHUB — Linux 应用,就是这里;
- snapcraft — Linux 应用商店。
从这些站点来的二进制软件包,有可能包括私有的非开源软件。
对使用 Debian 的自由软件的狂热爱好者,这些二进制格式的分发,有一些存在的理由。因为这能够得到一个干净的库集合,由 Debian 提供的库和由每个应用程序相应的上游开发者使用的库,独立开来。
运行外部二进制的固有风险,能够使用 沙盒环境 减少,它有现代 Linux 安全特性的手段。
- 对于 AppImage 和一些上游站点来的二进制,在 手工配置 后的 firejail 里运行;
- 对于从 FLATHUB 来的二进制,在 Flatpak 里运行它们(不需要手工配置。);
- 对于从 snapcraft 来的二进制,在 Snap 里面运行它们(不需要手工配置。和后台守护进程(daemon)兼容。)。
xdg-desktop-portal 软件包为通用的桌面特性提供一个标准的 API。
著名的沙盒环境和相关软件包列表:
软件包 | 流行度 | 大小 | 说明 |
flatpak | V:62, I:67 | 7498 | Flatpak 桌面应用程序配置框架 |
gnome-software-plugin-flatpak | V:20, I:28 | 246 | GNOME 软件 管理器的 Flatpak 支持 |
snapd | V:66, I:70 | 62774 | 启用 snap 软件包的后台守护进程(daemon)和工具 |
gnome-software-plugin-snap | V:1, I:2 | 117 | GNOME 软件 管理器的 Snap 支持 |
xdg-desktop-portal | V:294, I:382 | 1936 | Flatpak 和 Snap 的桌面集成门户 |
xdg-desktop-portal-gtk | V:263, I:381 | 715 | gtk (GNOME) 的 xdg-desktop-portal 后端 |
xdg-desktop-portal-kde | V:47, I:65 | 1432 | Qt (KDE) 的 xdg-desktop-portal 后端 |
xdg-desktop-portal-wlr | V:0, I:3 | 131 | wlroots (Wayland) 的 xdg-desktop-portal 后端 |
firejail | V:1, I:4 | 1771 | 和 AppImage 一起使用的 SUID 安全沙盒程序 firejail |
这个沙盒环境技术和在智能手机操作系统上的应用程序非常相像,这里的应用程序也是在资源访问受到控制下执行的。
一些大的 GUI(图形用户界面)应用程序,比如说 Debian 上的网页浏览器,也在内部使用了沙盒环境技术,这样让它们安全性更好。
七、远程桌面
访问在远程主机上使用 Wayland 协议的桌面和应用,由远程主机上的 GNOME 远程桌面 软件提供,通过 VNC 或 RDP 到本地客户端。
访问所有 QEMU 虚拟机桌面的能力是由 SPICE (the Simple Protocol for Independent Computing Environments) 协议提供。
著名的远程访问服务端列表:
软件包 | 流行度 | 大小 | 协议 | 说明 |
gnome-remote-desktop | V:38, I:211 | 1063 | RDP | GNOME 远程桌面 服务端 |
xrdp | V:22, I:25 | 3173 | RDP | xrdp, Remote Desktop Protocol (RDP) server |
x11vnc | V:7, I:25 | 2107 | RFB (VNC) | x11vnc, Remote Framebuffer Protocol (VNC) server |
tigervnc-standalone-server | V:4, I:15 | 2712 | RFB (VNC) | TigerVNC, Remote Framebuffer Protocol (VNC) server |
gnome-connections | V:0, I:1 | 1267 | RDP, RFB (VNC) | GNOME remote desktop client |
vinagre | V:3, I:74 | 4249 | RDP, RFB (VNC), SPICE, SSH | Vinagre: GNOME 远程桌面客户端 |
remmina | V:15, I:71 | 915 | RDP, RFB (VNC), SPICE, SSH, … | Remmina: GTK 远程桌面客户端 |
krdc | V:1, I:17 | 3873 | RDP, RFB (VNC) | KRDC: KDE 远程桌面客户端 |
guacd | V:0, I:0 | 80 | RDP, RFB (VNC), SSH / HTML5 | Apache Guacamole: 无客户端的远程桌面网关 (HTML5) |
virt-viewer | V:5, I:52 | 1284 | RFB (VNC), SPICE | 虚拟机管理器 下的客户机操作系统的 GUI 显示客户端 |
八、X服务端连接
有几种方法从远程主机上的应用连接到 X 服务端(包括本地主机的 xwayland )。
连接到 X 服务端的方式:
软件包 | 流行度 | 大小 | 命令 | 说明 |
openssh-server | V:733, I:819 | 1955 | sshd 使用选项 X11-forwarding | SSH 服务端(安全) |
openssh-client | V:868, I:996 | 5821 | ssh -X | SSH 客户端(安全) |
xauth | V:162, I:959 | 81 | xauth | X 授权文件工具 |
x11-xserver-utils | V:302, I:524 | 568 | xhost | X 服务端访问控制 |
1、X 服务端本地连接
使用 X 核心协议的本地应用,能够通过本地 UNIX 域名套接字进行本地连接,来访问本地的 X 服务端。这可以通过拥有 access cookie 的授权文件来授权。 授权文件的位置通过”$XAUTHORITY”环境变量确定,X 显示通过”$DISPLAY” 环境变量确定。由于这些环境变量通常会被自动设置,不需要另行指定。 例如,下面的 “gitk”。
username $ gitk
对于 xwayland, XAUTHORITY 有类似 “/run/user/1000/.mutter-Xwaylandauth.YVSU30″的值。
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 域名套接字进行本地的连接。
由于安全的原因,在 Debian 系统上,远程 TCP/IP 连接到 X 服务端,是默认被禁用的。不要通过简单的设置 “xhost +”来启用它们。如果能够避免的话,也不要启用 XDMCP 连接。
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 -
九、剪贴板
一些命令行的命令也能操作字符剪贴板(主要键和剪贴板)。
操作字符剪贴板相关程序列表:
软件包 | 流行度 | 软件包大小 | 当前目标 | 说明 |
xsel | V:9, I:42 | 55 | X | X 选择的命令行接口(剪贴板) |
xclip | V:12, I:61 | 64 | X | X 选择的命令行接口(剪贴板) |
wl-clipboard | V:2, I:13 | 162 | Wayland | wl-copy wl-paste: Wayland 剪贴板 的命令行接口 |
gpm | V:10, I:12 | 521 | Linux 控制台 | 在 Linux 控制台上捕获鼠标事件的后台守护进程(daemon) |