为什么我使用 rxvt 作为我的终端

rxvt-unicode 的简洁性、可移植性和可扩展性使其成为一款优秀的 Linux 终端。
145 位读者喜欢这篇文章。
Terminal view

Jamie Cox。由 Opensource.com 修改。CC BY 2.0。

我是 Konsole 和 GNOME Terminal 的粉丝,而且我经常使用它们。 它们是很棒的项目,代表了现代终端,既能满足那些整天都在 shell 中工作的用户的需求,也能满足那些偶尔才使用 Unix shell 的用户的需求。 它们可以很好地集成到桌面环境中,弥合了常见的 GUI 任务和常见的 shell 任务之间的差距。 我在工作中使用 GNOME Terminal,在家里使用 Konsole,而且我都喜欢它们。 但是,自从我接触了 rxvt-unicode 终端后,它的简洁性、可移植性和可扩展性一直让我成为它的用户,自从我开始将其与 Slackware Linux 12 一起使用时就开始了。

以下是原因,更重要的是,我如何使用 rxvt 作为我的默认终端。

它很轻量级

我的个人预算技巧之一(以及对环保理念 维修再利用 的贡献)就是永远不买新硬件,而是“拯救”一台完全可用的电脑用作我的个人笔记本。(我的个人笔记本是一台“升级改造”的 2004 年 iBook,运行着 Debian Linux,直到 2017 年屏幕无法修复为止。) 开源的一个显着优势是你可以使用轻量级应用程序运行所有最新的必要软件,以及所有最新的安全补丁。 这些应用程序(包括桌面本身)几乎不会触及在老旧计算机上通常受到限制的宝贵的系统资源。 rxvt 终端相对较小; 比 xterm 稍重,但比 GNOME Terminal 和 Konsole 要求低得多。

它很独特

一个简单的终端有助于将桌面功能(例如拖放,rxvt 提供)与终端功能(例如,可以通过 SSH 执行的功能)分开。 不熟悉远程系统工作的用户可能会对终端代表什么感到困惑,特别是当它与计算机的其他部分如此完美地集成在一起时。 有时,保持本地环境和远程系统之间的明显分离很有用。 当然,这完全不是故意的; 可以说 rxvt 和类似的简单终端模拟器的一个缺点是它们不接受拖放操作或提供花哨的上下文菜单(稍后会详细介绍),但它可能是一个令人惊讶的好处。

此外,学习一个简单的终端界面会迫使你扩展你对可用界面的看法。 一旦你学会有效地使用 rxvt,你可能会发现 Eshell 和 xterm 甚至简陋的 TTY 界面都能达到它们的目的。 你学会使用低规格终端,因为你对终端需要什么以及什么只是锦上添花的看法已经转向了简单性。

安装 rxvt

我推荐的 rxvt 分支通常在软件仓库中被称为 rxvt-unicode,它可能会提供一个名为 URxvt 或类似的启动器。 这是一个小型应用程序,不需要太多源代码来构建,但大多数 Linux 发行版都提供了它,因此可以使用你的软件包管理器进行安装。

在 Fedora、CentOS 或 RHEL 上

$ sudo dnf install rxvt-unicode

在 Debian 和 Ubuntu 上

$ sudo apt install rxvt-unicode

在 Slackware 等其他发行版上,可能已经包含了 rxvt。

默认的 rxvt 界面是(具有欺骗性的)简单且相当朴素。

default rxvt interface

你可能习惯于使用 GNOME Terminal 或 Konsole 上的“首选项”面板来调整你的界面,但对于 rxvt,你需要在文本文件中进行更改。

自定义 rxvt

rxvt 的优点之一是其包含 xrdb 属性的纯文本配置文件。 xrdb 子系统是 X 服务器资源数据库实用程序,用于管理 X11 应用程序的用户首选项。 习惯上将你的首选项放在一个名为 ~/.Xdefaults 的文件中,然后将这些首选项合并到 xrdb 数据库中。

最简单的自定义是基本颜色。 要查看你可以在 rxvt 中定义哪些颜色和其他属性,请参阅手册页

$ man urxvt

对于自定义窗口的外观,手册页标识了前缀 URxvt,后跟颜色 015。 使用来自任何 Linux 颜色选择器 的十六进制代码,你可以为每个 ANSI 颜色设置自己的色调。 这是一个 solarized 主题,带有注释

! solarized theme
! foreground/background
! black
URxvt.color0  : #000000
URxvt.color8  : #555555
! red
URxvt.color1  : #AA0000
URxvt.color9  : #FF5555
! green
URxvt.color2  : #00AA00
URxvt.color10 : #55FF55
! yellow
URxvt.color3  : #AB4400
URxvt.color11 : #FFFF44
! blue
URxvt.color4  : #0000AA
URxvt.color12 : #5555FF
! magenta
URxvt.color5  : #AA00AA
URxvt.color13 : #FF55FF
! cyan
URxvt.color6  : #00AAAA
URxvt.color14 : #55FFFF
! white
URxvt.color7  : #AAAAAA
URxvt.color15 : #FFFFFF

由于你的文本有很多颜色,你可能更喜欢深色背景。 使用 rxvt-unicode,你甚至可以设置具有一定百分比不透明度的部分透明背景(100 表示完全不透明,0 表示不可见)。

URxvt*background: [90]#000000
URxvt*depth: 32
URxvt*foreground: #FFFFFF

你还可以将文本设置为你系统上安装的任何字体。 例如,要将你的字体设置为 Fantasque Sans Mono,大小为 21 磅

URxvt*font: xft:FantasqueSansMono-Regular:pixelsize=21:antialias=true
URxvt*boldFont: xft:FantasqueSansMono-Bold:pixelsize=21:antialias=true
URxvt*italicFont: xft:FantasqueSansMono-Italic:pixelsize=21:antialias=true
URxvt*letterSpace: -1

要实现 .Xdefaults 中的更改,请运行 xrdb 命令

$ xrdb -merge .Xdefaults

然后重新启动 xrvt。 这是结果(请注意我的桌面的墙纸略微显示出来)

rxvt with a custom color theme applied

你还可以自定义滚动条的外观

! scrollbar style - rxvt (default), 
! plain (compact), NeXT, or xtermn
URxvt.scrollstyle: plain
URxvt.scrollBar_right: True

rxvt 手册中列出了更多可用的选项,因此请尝试那些吸引你的选项。 要查看所有 URxvt. 属性,请键入

urxvt --help

当你尝试 rxvt 时,你可能会注意到它不支持某些现代约定,例如 Ctrl+C 复制、 Ctrl+V 粘贴、拖放、右键单击上下文菜单等等。 但是,事情不一定像它们看起来的那样:rxvt 有一套丰富的功能; 它们只是“隐藏”(至少从现代的角度来看)在你可能不习惯的范例中。

复制和粘贴

当你想复制和粘贴时,有几种不同的方法可以做到。 对于有经验的 Linux 用户来说,“显而易见”的方式是使用 X Window System 技巧,单击鼠标中键来粘贴主剪贴板的内容。 但是,rxvt 提供的不仅仅是这些:按住 Ctrl+鼠标右键 并在 rxvt 中选择一个区域,会出现一个上下文菜单,其中包含复制和粘贴的选项。 菜单出现后,你可以释放 Ctrl 键,但你必须保持按住鼠标右键直到你做出选择。

将换行符转换为空格

有时你在 shell 中输入一个函数或循环,或者你从网站上复制一个,但随后你决定在运行它之前需要对其进行编辑。 问题是,带有换行符的命令用 > 字符表示

$ for i in {0..12}; do
> echo $i
> done
$

当你将其粘贴到你的终端中时,会在每个换行符处插入新的 > 字符,从而导致以下情况

$ for i in {0..12}; do
> > echo $i
> > done
$

你可以编辑它们,但在终端中跨行工作有点麻烦,因为它使用向上和向下箭头来循环浏览你的历史记录。 你可以运行该命令,然后在历史记录中向上循环到它,这会将多行命令转换为一行,但你并不总是想运行一个命令以便你可以编辑它。

从网站粘贴内容时,你可能会遇到一个相关问题:一系列命令可能没有 > 符号,但它们可能具有嵌入的换行符,当粘贴时,会提示你的终端立即运行该命令。

rxvt 的一个不错的奖励功能是 Selection 菜单中的 newline to spaces 选项。 这会编辑你的剪贴板的内容,以便换行符变成空格,这意味着当你将代码块粘贴到 rxvt 中时,它会减少到一条易于编辑的行。 你从网站粘贴的命令会丢失任何嵌入的换行符,因此它们不会在你粘贴它们后自动执行。 这不会> 字符转换为空格,因此如果它们在那里,你仍然需要将它们编辑掉,但这在一行上更容易

$ for i in {0..12}; do > echo $i > done

我一直使用 newlines to spaces 功能,因为我几乎总是在文件夹中留下关于需要运行哪个命令才能完成我偶尔才会做的某些不规则任务的注释。 不可避免地,我最终想要在重新运行命令时修改它,因此很高兴能够确保在执行命令之前易于编辑。 仅仅这个功能可能是我这么多年来一直坚持使用 rxvt 的真正原因。

设置菜单

要快速访问常用的终端设置选项,请按 Ctrl+鼠标中键 以打开和关闭 Options 菜单。 此菜单允许你设置你的光标是否闪烁,终端是否使用可视铃声,以及许多可以在你的 .Xdefaults 文件中设置的其他首选项。 与 Selection 菜单不同,此菜单会一直保持为浮动菜单,直到你再次按下 Ctrl+鼠标中键

启动秘籍

rxvt 的另一个很棒的功能是它可以在启动时使用命令选项快速自定义。 每当我确信我会在 SSH 会话中花费大量时间连接到远程主机时,我都会使用此功能,因为我想清楚地表明哪个终端包含哪个会话(没有什么比将 sudo poweroff 命令发送到生产服务器而不是开发服务器更糟糕的了)。 无论你如何设置你的默认 rxvt 的主题,你都可以使用任何种类的前景色、背景色和光标颜色(分别为 -fg-bg-cr)启动 rxvt 终端。 你还可以添加边框以增加强调效果

$ urxvt -fg green -cr green -bd green &

Rxvt launched with a custom theme

我倾向于保持简单:我使用红色表示生产服务器,绿色表示开发服务器,黄色表示测试或其他远程系统。

你可以使用许多选项在启动时覆盖你的默认设置。 要查看所有这些选项,请参阅 rxvt 手册。

标签页

rxvt 终端可以通过 Perl 进行扩展。 无论你是否了解 Perl,都无关紧要,因为 Perl 提供的许多功能已经与 rxvt 捆绑在一起,位于 /usr/lib64/urxvt/perl/ 中。

我最喜欢的扩展之一是选项卡式界面,这是终端模拟器相对现代的约定,任何人都不应该缺少它 - 包括 rxvt 用户。 要在 rxvt 中激活选项卡式界面,请打开 ~/.Xdefaults 并添加以下配置行

!TABS
URxvt.perl-ext-common : default,tabbed
URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg:    3
URxvt.tabbed.tab-bg:    0

将你的配置与 xrdb 合并,然后重新启动 rxvt。

Rvxt with tabs

重新启动后,终端顶部会出现一个选项卡栏。默认条目是 [新建]1。这些条目是可点击的。您可以单击 [新建] 条目以打开新选项卡,也可以单击数字来切换到该选项卡。

您还可以使用键盘与选项卡交互。

  • Shift+向下箭头 打开一个新的选项卡
  • Shift+向左箭头 激活上一个选项卡
  • Shift+向右箭头 激活下一个选项卡
  • Ctrl+向左箭头 将当前选项卡向左移动
  • Ctrl+向右箭头 将当前选项卡向右移动
  • Ctrl+D 关闭当前选项卡

还有许多您可以并且应该尝试的 Perl 扩展。例如,Kuake 扩展会在按下全局热键(默认情况下为 Ctrl+F10)时显示和隐藏您的 rxvt 终端。

点击导航

大多数终端的行为不像文本编辑器,即使它们看起来很像文本编辑器。例如,如果您启动一个命令,例如 echo ello,然后决定您想输入 hello,您不能简单地单击 e 将光标发送到那里进行快速编辑。相反,您必须按 向左箭头 键四次,或者您可能知道快捷方式 Alt+B 向后移动一个字符串。rxvt 终端改变了这一点。

在 rxvt 中,您可以按 Shift+鼠标左键 将光标重新定位到您正在键入的命令的同一行上的任何位置。rxvt 实现此目的的方式是计算并发出光标更改其位置所需的向左或向右光标键按下的次数。其结果是任何曾经使用过任何文本编辑器的人都会熟悉的体验,即使您不总是使用它,这也是一个小的快速便利(毕竟,它确实需要您的手指离开键盘)。

特性,特性,特性

rxvt 中包含的特性比此处列出的更多。找到它们的方法是将 rxvt 用作您的终端,并寻找解决您在使用终端或使用像 rxvt 这样的旧的“过时”终端时困扰您的问题的方法。您会对您发现的东西感到惊讶。

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,并且经常同时从事这两项工作。

6 条评论

谢谢,我认为这实际上是有用且有见地的。通常情况下,这些我使用的 XYZ 文章什么也没告诉你,而至少这篇文章有一些有用的提示和想法。

嗨 Seth,谢谢分享。我不知道 rxvt 可以自定义到这种程度。它看起来非常好,并且能够根据特定用户的需求进行简化。我一定会尝试您提到的提示。谢谢!

我对 rxvt 的担忧是,我上次检查时,它不再更新或维护了。我担心漏洞或漏洞链可以与 rxvt 结合使用,从而构成安全威胁。使用不再更新或维护的东西对我来说似乎风险太大了。您对此有何看法,我担心这一点是否合理?我上次查看 rxvt 源代码时,它已经是很久以前更新的了。因此,我回到了 gnome-terminal。Terminator 似乎也存在类似的问题。

实际上,通常有很多关于 rxvt 分支的活动,所以 rxvt 还没有完全死掉 [yet]。

但是,您是对的;没有进行严格的安全审计。但说实话,我不太担心代码的质量,因为它已被证明非常强大且非常简单(它只是它提供的任何 shell 的一个非常简单的包装器)。鉴于我的用例(在我的本地机器上,在网络防火墙和计算机的本地防火墙后面将其作为终端运行),我认为这是一个相对安全的赌注。

回复 ,作者 Jay LaCroix (未验证)

Creative Commons License此作品已获得 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.