在 Arch 配置 i3-wm 终端模拟器 xterm
在 Arch 配置 i3-wm 终端模拟器 xterm
关于怎么在 Arch 安装 i3-wm 可以查看上一篇文章 👉 https://www.cnblogs.com/shadow-/p/17572589.html
安装终端模拟器
以下是一些常见终端模拟器以及它们的优势:
- xterm: X Window 系统的标准终端模拟器,简单轻量,可在几乎所有系统上找到。
- gnome-terminal: GNOME 桌面环境默认的终端模拟器,易于使用且功能丰富。
- konsole: KDE 桌面环境默认的终端模拟器,功能强大,支持分屏和会话管理。
- xfce4-terminal: Xfce 桌面环境默认的终端模拟器,轻量且简单。
- lxterminal: LXDE 桌面环境默认的终端模拟器,快速启动和占用较少资源。
- terminator: 支持分屏和多标签页,适用于多任务处理。
- tilix: 支持分屏、多标签页和自定义快捷键,可在用户交互性和外观方面进行高度定制。
- rxvt-unicode (urxvt): 极简主义终端模拟器,轻量且占用较少资源。
- termite: 极简终端模拟器,可在配置文件中进行高度定制,支持 vim 键绑定。
- st: 一个简单的、轻量级的终端模拟器,可通过源码自定义配置。
- qterminal: Qt 基础的终端模拟器,适用于 Qt 环境和其他桌面环境。
- tilda: 下拉式终端,通过快捷键显示和隐藏终端。
- guake: 另一个下拉式终端,可以通过快捷键轻松访问。
- cool-retro-term: 模拟旧式计算机终端,外观独特且有趣。
- alacritty: 极快的 GPU 加速终端模拟器,适用于高性能需求。
- kitty: 支持 GPU 加速和高度可配置的终端模拟器。
- mosh: 在不稳定网络上提供更好的远程终端连接体验。
- xst: 简单终端模拟器,支持字体渲染和缩放。
- fbterm: 在 Linux 控制台下提供框架缓存终端模拟器。
- termit: 一个简单的 VTE 基础终端模拟器,易于使用。
以上这些终端模拟器各有特点,根据个人喜好和使用需求,可以选择最适合自己的终端模拟器。注意,对于一些终端模拟器,你可能需要在系统中手动安装它们,以便在 i3 或其他窗口管理器中使用。这里我选择的是 xterm 终端模拟器,因为它是 X Window 系统的标准终端模拟器 😋
sudo pacman -S xterm
- 我们安装 xterm 不需要配置
~/.config/i3/config
配置文件,因为在配置项中默认配置bindsym Mod1+Return exec i3-sensible-terminal
,其中 i3-sensible-terminal 在 i3 默认配置中调用来启动终端,关于启动顺序查看 https://man.archlinux.org/man/i3-sensible-terminal.1 文档。在文档中 xterm 优先级最高,所以我们安装 xterm 终端模拟器后,i3 默认会调用 xterm 来启动终端模拟器。 - 如果你想要使用其它终端模拟器,可以修改 i3-sensible-terminal 为你想要的终端模拟器。如果在 i3-sensible-terminal 中且是唯一模拟终端则不需要过多配置。如果要修改,我的建议是将原有配置行注释,然后在下面添加新的配置行,这样方便以后修改。
i3 默认配置文件示例 👉 https://github.com/i3/i3/blob/next/etc/config
简单使用 xterm
在 i3 环境启动和关闭 xterm 终端模拟器的方法:
- 通过
startx
启动 i3-wm 后,按下Mod
+Enter
快捷键,即可启动 xterm 终端模拟器。 - 通过
Mod
+Shift
+q
快捷键,即可关闭 xterm 终端模拟器。
你也可以修改
~/.config/i3/config
配置文件,自定义启动和关闭终端模拟器的快捷键。方法是参考 https://github.com/i3/i3/blob/next/etc/config 中的配置项,修改默认配置项即可。
使用鼠标和键盘来实现文本的复制和粘贴方法:
-
使用鼠标复制和粘贴:
- 复制:要复制文本,只需按住鼠标左键并拖动,将选定的文本高亮显示即可。一旦你释放鼠标左键,选定的文本将被自动复制到剪贴板中。
- 粘贴:要粘贴文本,将鼠标指针放在你想要粘贴的位置,然后点击鼠标中键(通常是滚轮按钮)。这将把剪贴板中的文本粘贴到光标所在位置。
-
使用键盘快捷键:
- 复制:按住 Shift 键并用鼠标选择你想要复制的文本,然后松开鼠标左键。选定的文本将自动复制到剪贴板中。
- 粘贴:要粘贴文本,将鼠标指针放在你想要粘贴的位置,然后按下 Shift + Insert 键(或者是 Ctrl + Shift + V 键)。这将把剪贴板中的文本粘贴到光标所在位置。
Xresources 文件
在 X Window 系统中,Xresources 是一种配置文件,用于定义应用程序的外观和行为。它使用特定的语法格式来设置资源(也称为选项或参数)。这些资源可以是应用程序的名称、窗口类或特定资源。
-
语法格式如下:
name.Class.resource: value
-
name
:表示应用程序的名称或实例。它是可选的,如果省略,则资源将应用于所有具有相应类的应用程序。 -
Class
:表示应用程序的类别或窗口类。也是可选的,如果省略,则资源将应用于所有具有相应名称的应用程序。 -
resource
:表示要设置的具体资源或选项名称。 -
value
:表示资源的值。
通过这种格式,可以定义各种资源,例如窗口的背景颜色、字体、边框样式等。
-
-
通配符匹配:
Xresources 支持通配符
*
和?
,用于更广泛地匹配资源。例如,如果你想将相同的资源应用于所有应用程序的所有类和名称,你可以使用以下形式:*.*.resource: value
这将应用于所有应用程序的所有类和名称。
缩略写法:
为了简化配置文件,可以使用缩略写法。这些缩略是为了方便而引入的,以减少重复输入。例如,你可以使用*
来代表所有的类和名称。所以,下面的两个例子是等效的:xterm*background: black *background: black
-
注释:Xresources 允许使用
!
来添加注释。所有在!
符号后面的内容都会被视为注释,不会被解释。 -
文件包含:
Xresources 还支持
#include
指令,允许你从其他文件中包含资源。这对于组织配置文件和共享资源非常有用。例如:
#include "/path/to/another/file"
这将把
/path/to/another/file
文件中的资源包含到当前的 Xresources 文件中。
Xresources 文件中的资源定义在启动 X11 会话时会被读取和应用,通常可以通过 xrdb 命令来加载和更新资源。
- 编辑 Xresources 文件后,需要运行
xrdb -merge ~/.Xresources
命令来使更改生效。 - 不是所有的应用程序都支持 Xresources 文件,而且支持程度可能因应用程序的实现而异。
- 对于一些配置修改可能需要重启应用程序或重新登录 X 会话才能生效。
注意事项:使用
xrdb
命令的前提是在使用 X Window System 的环境中,其中包括运行 X 服务器(X Server)的图形用户界面(GUI)环境。xrdb
是 X11 资源数据库管理器,用于管理 X11 资源数据库。X11 资源数据库是 X Window System 中用于存储应用程序配置信息的数据库。所有没有启动 X Window System 的环境使用时可能会出现xrdb: No such file or directory xrdb: can't open display ''
错误。想要了解更多关于xrdb
命令的信息 👇
实际配置 Xresources 的语法会更加复杂,这里进行了一定的简化。具体资料:
- https://www.oreilly.com/library/view/x-window-system/9780937175149/Chapter09.html
- https://man.archlinux.org/man/XrmGetResource.3#MATCHING_RULES
并且在文件位置也有讲究,在 Linux 中你可以会经常看见 .d
结尾的目录,他们一般是复杂前缀名称对应配置的拓展集。核心思想是不破坏原有配置文件,通过添加进行拓展。当你想要复原时,只需要删除对应的文件即可。
配置 xterm
我们尝试将 xterm 设置为背景前景及字体。我在字体上选择的是 Cascadia Code 字体,这是一款由微软开发的开源等宽字体,它是一款专为终端设计的字体,非常适合用于终端模拟器。它在 Arch 上有多种 https://archlinux.org/packages/?sort=&q=Cascadia+Code&maintainer=&flagged=,我选择的是 otf-cascadia-code
包。使用 pacman 安装即可。
字体类型简单说明(更多追求,使用搜索引擎):
- TTF 字体通常包含简单的字形和基本排版功能。
- OTF 字体支持更复杂的字形和更丰富的排版功能。
在家目录下创建 .Xresources
文件,添加如下内容:
xterm*background: #1E1E1E
xterm*foreground: #EFEFEF
xterm*faceName: Cascadia Code
xterm*faceSize: 12
配置中的
*
你通过前面介绍应该知道是什么意思了,这里不再赘述。
在 ~/.xinitrc
中添加下面配置,使其在启动 X 会话时自动加载 .Xresources
文件,因为我们可能会反复测试使用这种方法更方便。注意需要在之前配置的 exec i3
前添加,完整如下:
xresources=$HOME/.Xresources
if [[ -f $xresources ]]; then
xrdb -merge $xresources
fi
exec i3
之所以使用 xresources 变量,是为了方便后续修改,只需要修改一处即可。
解决 Vbox Guest Additions 增强功能
下面我们要对复制粘贴功能进行改动。在此之前我们需要做一些准备工作,使用 pacman 安装 virtualbox-guest-utils
包,它是可以增强 VirtualBox 功能。
# 安装
sudo pacman -S virtualbox-guest-utils
# 设置自启动
sudo systemctl enable --now vboxservice.service
# 重启
sudo reboot
-
继续修改
.Xresources
文件,添加如下内容:xterm*selectToClipboard: true
-
打开 VirtualBox 窗口中的
设备
>共享粘贴板
>双向
-
然后执行
VBoxClient --clipboard
,可以在启动 i3-wm 环境后的 xterm 中使用。然后尝试能否和宿主机共享粘贴板。关于复制粘贴在 之前 已经有过介绍。 -
配置 xterm 复制粘贴快捷键,继续修改
.Xresources
文件,添加如下内容:xterm.VT100.translations: #override \n\ Shift Ctrl <Key> C: copy-selection(CLIPBOARD) \n\ Shift Ctrl <Key> V: insert-selection(CLIPBOARD)
简单解释一下 xterm*selectToClipboard: true
这个配置。在 X Window 系统中,xterm 终端模拟器具有与 PRIMARY 和 CLIPBOARD 剪贴板相关的特殊行为和一些潜在问题。这涉及到 X Window 系统中的剪贴板系统的工作原理。
-
PRIMARY 剪贴板:
- PRIMARY 是 X Window 系统中的一个剪贴板,它是用于鼠标选择文本并进行复制和粘贴的默认剪贴板。当你在 xterm 中选择文本时,选择的文本会自动复制到 PRIMARY 剪贴板中。你可以通过中键粘贴(按下鼠标中键)将 PRIMARY 剪贴板中的文本粘贴到其他应用程序中。
- 这种行为对于与 xterm 和其他 X 应用程序之间的文本传递非常方便。
-
CLIPBOARD 剪贴板:
- CLIPBOARD 是另一个 X Window 系统中的剪贴板,它专门用于通过复制和粘贴菜单选项进行剪贴板操作。通常,当你使用菜单中的 "复制" 或 "剪切" 功能时,文本会被复制到 CLIPBOARD 剪贴板中。
- xterm 默认情况下不会直接将选择的文本放入 CLIPBOARD 剪贴板中。这意味着如果你使用菜单选项或其他终端模拟器(如 GNOME Terminal 或 Konsole)的 "复制" 功能,将无法直接粘贴 xterm 中的选择内容。
潜在问题,由于 PRIMARY 和 CLIPBOARD 剪贴板的区别,可能会导致一些剪贴板相关的问题:
- 复制粘贴问题:如果你在 xterm 中选择文本后,希望通过其他终端模拟器的 "粘贴" 功能将其粘贴到其他应用程序中,可能会失败,因为 xterm 默认情况下不会将文本放入 CLIPBOARD 剪贴板。
- 粘贴 xterm 到其他应用程序:如果你希望从 xterm 中复制文本到其他应用程序,并且该应用程序只支持从 CLIPBOARD 剪贴板获取内容,你可能需要使用其他方法,如使用鼠标中键将 PRIMARY 中的内容粘贴到应用程序中。VirtualBox 的共享剪贴板功能就无法使用。
为了解决这些问题,可以添加我们之前 xterm*selectToClipboard: true
这个配置,当你在 xterm 中选择文本后,它会自动复制到 CLIPBOARD 剪贴板,这样你就可以直接在其他应用程序中使用 "粘贴" 功能了。
相关参考:
Arch Vbox-Guest-Additions 👉 https://wiki.archlinux.org/title/VirtualBox/Install_Arch_Linux_as_a_guest
xterm*selectToClipboard: true
设置参考 👇
XDG Autostart
XDG Autostart 规范
在上面内容中,我们需要每次手动启动 VBoxClient --clipboard
是非常麻烦的。在 Linux 和其他类 Unix 系统中 XDG 是一个使用的标准,它的全称是 X Desktop Group,后来改名为 X Desktop Group Base Directory Specification(XDG 基础目录规范)。它的目的是为了在不同的桌面环境和应用程序之间提供一致的配置和数据存储结构。
XDG 规范定义了一些环境变量和默认目录,用于指定应用程序的配置文件、数据文件、缓存文件等的存放位置。这样做的好处是,当用户在不同的桌面环境或系统上切换时,应用程序可以更容易地找到所需的文件,而无需每次都手动配置。
一些重要的 XDG 环境变量和默认目录包括:
$XDG_CONFIG_HOME
: 指向用户配置文件的主目录,默认为~/.config/
。$XDG_DATA_HOME
: 指向用户数据文件的主目录,默认为~/.local/share/
。$XDG_CACHE_HOME
: 指向用户缓存文件的主目录,默认为~/.cache/
。$XDG_RUNTIME_DIR
: 指向运行时文件的主目录,默认为/run/user/<user-id>/
。$XDG_CONFIG_DIRS
: 用于查找系统范围的配置文件的目录列表,默认为/etc/xdg/
。$XDG_DATA_DIRS
: 用于查找系统范围的数据文件的目录列表,默认为/usr/local/share/
和/usr/share/
。
应用程序可以使用这些环境变量来确定配置文件和数据文件的位置,从而实现跨桌面环境和系统的一致性。
接下来是 i3-wm 与 XDG Autostart 规范:为了让应用程序在 i3 启动时自动运行,你需要创建一个符合 XDG Autostart 规范的 .desktop
文件,并将其放置在 ~/.config/autostart/
目录中。这个目录是 XDG Autostart 规范所定义的用户级别的自动启动应用程序的位置。对于 XDG Autostart 规范详细内容 👉 https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html
以下是一个示例的 .desktop
文件【此例仅观看】:
[Desktop Entry]
Name=MyApp
Exec=/path/to/your/application
Type=Application
X-GNOME-Autostart-enabled=true
将上面的内容保存到一个文件,比如 myapp.desktop
,然后将该文件放置在 ~/.config/autostart/
目录下。
实际上存在一个系统范围的
/etc/xdg/autostart/
目录,绝大部分带.desktop
文件的程序在分解文件时会存放在此目录,比如上面我们安装的virtualbox-guest-utils
程序,你可以使用ls
查看该目录,以验证自己的想法。
XDG Autostart 实现
dex
是一个符合 XDG 规范的应用程序启动器,它可以扫描并执行 XDG Autostart 规范中定义的 .desktop
文件,实现在桌面环境启动时自动运行应用程序。当然这样的实现还有很多 👉 https://wiki.archlinux.org/title/XDG_Autostart
dex
的主要特点和用途包括:
-
XDG Autostart 支持:
dex
会扫描指定目录(默认是~/.config/autostart/
)下的.desktop
文件,然后按照其中定义的启动命令执行相应的应用程序。这样,你可以方便地管理自启动应用程序而无需手动编写脚本或配置。 -
轻量级:
dex
是一个轻量级的应用程序启动器,它不依赖于大型桌面环境,适用于各种窗口管理器和轻量级桌面环境,如 i3、Openbox、Fluxbox 等。 -
快速:
dex
的设计目标之一是尽可能快速地加载和执行应用程序,因此它只需要很少的时间来处理启动项。 -
易用性:使用
dex
非常简单,只需要在 XDG Autostart 规范指定的目录中创建desktop
后缀文件,并按照规范的要求填写必要的信息即可。 -
跨平台支持:虽然
dex
主要用于 Linux 和类 Unix 环境,但它也可以在其他支持 XDG Autostart 规范的平台上运行,比如 BSD 系统。
在 Arch Linux 上安装 dex
,你可以使用 pacman 命令:
sudo pacman -S dex
安装完成后,我们并不用在 i3 中做更多配置,因为在 i3 中以及默认配置 dex
自启动,相关内容:
- 默认配置查看
~/.config/i3/config
文件,也可以查看 https://github.com/i3/i3/blob/next/etc/config 大约在 20~30 行左右内容exec --no-startup-id dex --autostart --environment i3
的配置行。 - 为什么会这样,看看 👉 https://github.com/i3/i3/issues/4402
完成之后,退出 i3 会话,重新进入后尝试共享粘贴板功能,看看是否可以自动启动了。注意一下,你需要在之前手动过程中能够使用此功能,然后再验证自动启动这块,方便你进行排错。此步非常关键,在后续更多程序的配置都会实际 desktop 文件自启动问题。这是相对现代化的处理,不然手动启动会很麻烦。
结束
上面全部片段总合的 ~/.Xresources
文件内容如下:
xterm*background: #1E1E1E
xterm*foreground: #EFEFEF
xterm*faceName: Cascadia Code
xterm*faceSize: 12
xterm*selectToClipboard: true
xterm.VT100.translations: #override \n\
Shift Ctrl <Key> C: copy-selection(CLIPBOARD) \n\
Shift Ctrl <Key> V: insert-selection(CLIPBOARD)
关于 xterm 配置资料:
这次就先到这里。后续我会继续分享一些 X 环境的配置,敬请期待 😘