Debian GUI(图形用户界面)系统详解
在 Debian 系统上,有几个功能全面的 GUI 桌面环境选择。
表 7.1. 桌面环境列表
任务软件包 | 流行度 | 大小 | 说明 |
---|---|---|---|
task-gnome-desktop | I:198 | 9 | GNOME 桌面环境 |
task-xfce-desktop | I:96 | 9 | Xfce 桌面环境 |
task-kde-desktop | I:81 | 6 | KDE Plasma 桌面环境 |
task-mate-desktop | I:43 | 9 | MATE 桌面环境 |
task-cinnamon-desktop | I:41 | 9 | Cinnamon 桌面环境 |
task-lxde-desktop | I:29 | 9 | LXDE 桌面环境 |
task-lxqt-desktop | I:18 | 9 | LXQt 桌面环境 |
task-gnome-flashback-desktop | I:13 | 6 | GNOME Flashback 桌面环境 |
本章将大部分关注 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 窗口系统核心协议。
7.3. GUI(图形用户界面)架构
这里是 Wayland 环境上用于 GNOME 的著名的 GUI 架构软件包。
表 7.2. 著名的 GUI 架构软件包列表
软件包 | 流行度 | 软件包大小 | 说明 |
---|---|---|---|
mutter | V:1, I:60 | 187 | GNOME 的 mutter 窗口管理器 [auto] |
xwayland | V:240, I:319 | 2388 | 运行在 wayland 之上的一个 X 服务端 [auto] |
gnome-remote-desktop | V:35, I:221 | 1068 | 使用 PipeWire 的 GNOME 远程桌面后台守护进程(daemon) [auto] |
gnome-tweaks | V:21, I:229 | 1170 | GNOME 的高级配置设置 |
gnome-shell-extension-prefs | V:13, I:213 | 60 | 启用/禁用 GNOME 外壳扩展的工具 |
这里,"[auto]" 表示这些软件包在 task-gnome-desktop
安装时会自动安装。
7.4. GUI(图形用户界面)应用
现在在 Debian 上,有许多有用的 GUI 应用存在。如果在 GNOME 桌面环境中没有相应功能的软件,那么安装例如 scribus
(KDE)这样的软件包是完全可以接受的。但安装过多功能重复的软件包,会使你的系统凌乱。
这里是一份捕获我眼球的 GUI(图形用户界面)程序列表。
表 7.3. 著名的的 GUI(图形用户界面)应用列表
软件包 | 流行度 | 软件包大小 | 类型 | 说明 |
---|---|---|---|---|
evolution | V:30, I:239 | 486 | GNOME | 个人信息管理(群组软体和电子邮件) |
thunderbird | V:48, I:119 | 224760 | GTK | 电子邮件客户端 (Mozilla Thunderbird(雷鸟)) |
kontact | V:1, I:12 | 2208 | KDE | 个人信息管理(群组软体和电子邮件) |
libreoffice-writer | V:117, I:435 | 31474 | LO | 文字处理软件 |
abiword | V:1, I:8 | 3542 | GNOME | 文字处理软件 |
calligrawords | V:0, I:7 | 6097 | KDE | 文字处理软件 |
scribus | V:1, I:16 | 31345 | KDE | 编辑 PDF 文件的 desktop publishing 编辑器 |
glabels | V:0, I:3 | 1338 | GNOME | 标签编辑器 |
libreoffice-calc | V:111, I:432 | 26009 | LO | 电子表格 |
gnumeric | V:4, I:14 | 9910 | GNOME | 电子表格 |
calligrasheets | V:0, I:5 | 11396 | KDE | 电子表格 |
libreoffice-impress | V:69, I:429 | 2646 | LO | 演示文稿 |
calligrastage | V:0, I:5 | 5339 | KDE | 演示文稿 |
libreoffice-base | V:26, I:121 | 5003 | LO | 数据库管理 |
kexi | V:0, I:1 | 7118 | KDE | 数据库管理 |
libreoffice-draw | V:72, I:430 | 10312 | LO | 矢量图形编辑器(绘图) |
inkscape | V:15, I:112 | 99800 | GNOME | 矢量图形编辑器(绘图) |
karbon | V:0, I:6 | 3610 | KDE | 矢量图形编辑器(绘图) |
dia | V:2, I:22 | 3741 | GTK | 流程图和示意图编辑器 |
gimp | V:50, I:252 | 19304 | GTK | 位图图形编辑器 (绘图) |
shotwell | V:17, I:255 | 6263 | GTK | 数码照片管理器 |
digikam | V:1, I:9 | 293 | KDE | 数码照片管理器 |
darktable | V:4, I:13 | 30554 | GTK | 摄影师的虚拟灯台和暗房 |
planner | V:0, I:4 | 1394 | GNOME | 项目管理 |
calligraplan | V:0, I:2 | 19013 | KDE | 项目管理 |
gnucash | V:2, I:8 | 28928 | 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 | 8963 | Qt 应用 | 计算机辅助设计(CAD) 系统 (2D) |
freecad | I:18 | 36 | Qt 应用 | 计算机辅助设计(CAD) 系统 (3D) |
kicad | V:3, I:14 | 236461 | GTK | 电路图和 PCB 设计软件 |
xsane | V:12, I:144 | 2339 | GTK | 扫描仪前段 |
libreoffice-math | V:51, I:432 | 1898 | LO | 数学方程/公式编辑器 |
calibre | V:6, I:28 | 63385 | KDE | 电子书转换器和库管理 |
fbreader | V:1, I:9 | 3783 | GTK | 电子书阅读器 |
evince | V:92, I:314 | 941 | GNOME | 文档(pdf)阅读器 |
okular | V:40, I:123 | 17728 | KDE | 文档(pdf)阅读器 |
x11-apps | V:31, I:463 | 2460 | 单纯的 X 应用 | xeyes (1)等。 |
x11-utils | V:192, I:566 | 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:216, I:306 | 572 | 59 | - | - | Cantarell (GNOME 3, 显示) |
fonts-noto | I:153 | 31 | 61 | 63 | 40 | Noto fonts (Google, 有 CJK 的多语言) |
fonts-dejavu | I:421 | 35 | 58 | 68 | 40 | DejaVu (GNOME 2, MCM:Verdana, 扩展 Bitstream Vera) |
fonts-liberation2 | V:130, I:427 | 15 | 56 | 60 | 40 | Liberation 字体 用于 LibreOffice (Red Hat, MCMATC) |
fonts-croscore | V:20, I:40 | 5274 | 56 | 60 | 40 | Chrome OS: Arimo, Tinos 和 Cousine (Google, MCMATC) |
fonts-crosextra-carlito | V:21, I:131 | 2696 | 57 | - | - | Chrome 操作系统: Carlito (Google, MCM:Calibri ) |
fonts-crosextra-caladea | I:128 | 347 | - | 55 | - | Chrome 操作系统: Caladea (Google, MCM:Cambria ) (只有拉丁字符 ) |
fonts-freefont-ttf | V:76, I:218 | 14460 | 57 | 59 | 40 | GNU FreeFont (扩展 URW Nimbus) |
fonts-quicksand | V:123, I:438 | 392 | 56 | - | - | Debian 任务桌面, Quicksand (显示,只有拉丁字符) |
fonts-hack | V:24, I:120 | 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:167, I:472 | 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:3 | 452 | - | - | 33 | Cool retro 终端字体 |
ttf-mscorefonts-installer | V:1, I:49 | 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 的血统痕迹。
7.6.2. 字体栅格化
Debian 使用 FreeType 来栅格化字体。它的字体选择架构由 Fontconfig 字体配置库提供。
表 7.5. 著名的字体环境和相关软件包列表
软件包 | 流行度 | 大小 | 说明 |
---|---|---|---|
libfreetype6 | V:560, I:997 | 938 | FreeType 字体栅格化库 |
libfontconfig1 | V:554, I:849 | 587 | Fontconfig 字体配置库 |
fontconfig | V:437, I:721 | 680 | fc-* : Fontconfig 命令行命令 |
font-manager | V:2, I:8 | 1022 | Font 管理器: Fontconfig GUI(图形用户界面)命令 |
nautilus-font-manager | V:0, I:0 | 37 | Font 管理器 的 Nautilus 扩展 |
你也可以从命令行列出字体配置状态。
使用 “
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:65, I:70 | 7499 | Flatpak 桌面应用程序配置框架 |
gnome-software-plugin-flatpak | V:20, I:29 | 254 | GNOME 软件 管理器的 Flatpak 支持 |
snapd | V:67, I:70 | 60022 | 启用 snap 软件包的后台守护进程(daemon)和工具 |
gnome-software-plugin-snap | V:1, I:2 | 121 | GNOME 软件 管理器的 Snap 支持 |
xdg-desktop-portal | V:303, I:394 | 1936 | Flatpak 和 Snap 的桌面集成门户 |
xdg-desktop-portal-gtk | V:274, I:392 | 715 | gtk (GNOME) 的 xdg-desktop-portal 后端 |
xdg-desktop-portal-kde | V:53, I:72 | 1438 | Qt (KDE) 的 xdg-desktop-portal 后端 |
xdg-desktop-portal-wlr | V:0, I:4 | 135 | wlroots (Wayland) 的 xdg-desktop-portal 后端 |
firejail | V:1, I:4 | 1771 | 和 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:35, I:221 | 1068 | RDP | GNOME 远程桌面 服务端 |
xrdp | V:22, I:24 | 3202 | RDP | xrdp, 远程桌面协议 (RDP) 服务器 |
x11vnc | V:6, I:23 | 2107 | RFB (VNC) | x11vnc, 远程帧缓存协议 (VNC) 服务器 |
tigervnc-standalone-server | V:4, I:15 | 2768 | RFB (VNC) | TigerVNC, 远程帧缓存协议 (VNC) 服务器 |
gnome-connections | V:0, I:1 | 1356 | RDP, RFB (VNC) | GNOME 远程桌面客户端 |
vinagre | V:2, I:68 | 4249 | RDP, RFB (VNC), SPICE, SSH | Vinagre: GNOME 远程桌面客户端 |
remmina | V:15, I:72 | 953 | RDP, RFB (VNC), SPICE, SSH, ... | Remmina: GTK 远程桌面客户端 |
krdc | V:1, I:17 | 3873 | RDP, RFB (VNC) | KRDC: KDE 远程桌面客户端 |
guacd | V:0, I:0 | 83 | RDP, RFB (VNC), SSH / HTML5 | Apache Guacamole: 无客户端的远程桌面网关 (HTML5) |
virt-viewer | V:5, I:52 | 1284 | RFB (VNC), SPICE | 虚拟机管理器 下的客户机操作系统的 GUI 显示客户端 |
7.9. X 服务端连接
有几种方法从远程主机上的应用连接到 X 服务端(包括本地主机的 xwayland
)。
表 7.8. 连接到 X 服务端的方式
软件包 | 流行度 | 大小 | 命令 | 说明 |
---|---|---|---|---|
openssh-server | V:730, I:814 | 1804 | sshd 使用选项 X11-forwarding | SSH 服务端(安全) |
openssh-client | V:866, I:996 | 4959 | ssh -X | SSH 客户端(安全) |
xauth | V:165, I:961 | 81 | xauth | X 授权文件工具 |
x11-xserver-utils | V:302, I:528 | 568 | xhost | X 服务端访问控制 |
7.9.1. X 服务端本地连接
使用 X 核心协议的本地应用,能够通过本地 UNIX 域名套接字进行本地连接,来访问本地的 X 服务端。这可以通过拥有 access cookie 的授权文件来授权。 授权文件的位置通过"$XAUTHORITY
"环境变量确定,X 显示通过"$DISPLAY
" 环境变量确定。由于这些环境变量通常会被自动设置,不需要另行指定。 例如,下面的 "gitk
"。
username $ gitk
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)” 。
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:9, I:42 | 55 | X | X 选择的命令行接口(剪贴板) |
xclip | V:12, I:63 | 62 | X | X 选择的命令行接口(剪贴板) |
wl-clipboard | V:3, I:14 | 162 | Wayland | wl-copy wl-paste : Wayland 剪贴板 的命令行接口 |
gpm | V:10, I:12 | 521 | Linux 控制台 | 在 Linux 控制台上捕获鼠标事件的后台守护进程(daemon) |