在 Arch 配置 i3-wm 终端模拟器 xterm

发布时间 2023-07-24 22:16:32作者: sha0dow

在 Arch 配置 i3-wm 终端模拟器 xterm

关于怎么在 Arch 安装 i3-wm 可以查看上一篇文章 ? https://www.cnblogs.com/shadow-/p/17572589.html

安装终端模拟器

以下是一些常见终端模拟器以及它们的优势:

  1. xterm: X Window 系统的标准终端模拟器,简单轻量,可在几乎所有系统上找到。
  2. gnome-terminal: GNOME 桌面环境默认的终端模拟器,易于使用且功能丰富。
  3. konsole: KDE 桌面环境默认的终端模拟器,功能强大,支持分屏和会话管理。
  4. xfce4-terminal: Xfce 桌面环境默认的终端模拟器,轻量且简单。
  5. lxterminal: LXDE 桌面环境默认的终端模拟器,快速启动和占用较少资源。
  6. terminator: 支持分屏和多标签页,适用于多任务处理。
  7. tilix: 支持分屏、多标签页和自定义快捷键,可在用户交互性和外观方面进行高度定制。
  8. rxvt-unicode (urxvt): 极简主义终端模拟器,轻量且占用较少资源。
  9. termite: 极简终端模拟器,可在配置文件中进行高度定制,支持 vim 键绑定。
  10. st: 一个简单的、轻量级的终端模拟器,可通过源码自定义配置。
  11. qterminal: Qt 基础的终端模拟器,适用于 Qt 环境和其他桌面环境。
  12. tilda: 下拉式终端,通过快捷键显示和隐藏终端。
  13. guake: 另一个下拉式终端,可以通过快捷键轻松访问。
  14. cool-retro-term: 模拟旧式计算机终端,外观独特且有趣。
  15. alacritty: 极快的 GPU 加速终端模拟器,适用于高性能需求。
  16. kitty: 支持 GPU 加速和高度可配置的终端模拟器。
  17. mosh: 在不稳定网络上提供更好的远程终端连接体验。
  18. xst: 简单终端模拟器,支持字体渲染和缩放。
  19. fbterm: 在 Linux 控制台下提供框架缓存终端模拟器。
  20. 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 的语法会更加复杂,这里进行了一定的简化。具体资料:

并且在文件位置也有讲究,在 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 剪贴板的区别,可能会导致一些剪贴板相关的问题:

  1. 复制粘贴问题:如果你在 xterm 中选择文本后,希望通过其他终端模拟器的 "粘贴" 功能将其粘贴到其他应用程序中,可能会失败,因为 xterm 默认情况下不会将文本放入 CLIPBOARD 剪贴板。
  2. 粘贴 xterm 到其他应用程序:如果你希望从 xterm 中复制文本到其他应用程序,并且该应用程序只支持从 CLIPBOARD 剪贴板获取内容,你可能需要使用其他方法,如使用鼠标中键将 PRIMARY 中的内容粘贴到应用程序中。VirtualBox 的共享剪贴板功能就无法使用。

为了解决这些问题,可以添加我们之前 xterm*selectToClipboard: true 这个配置,当你在 xterm 中选择文本后,它会自动复制到 CLIPBOARD 剪贴板,这样你就可以直接在其他应用程序中使用 "粘贴" 功能了。

相关参考:

结束

上面全部片段总合的 ~/.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 环境的配置,敬请期待 ?