如何在 Linux 上使用 maim 截屏
在 Linux 上,我们可以使用许多实用程序来截取屏幕截图。每个完整的桌面环境,例如 GNOME、KDE 或 XFCE,都有专门为此任务设计的集成应用程序,但许多其他小型环境 存在独立于桌面的程序。在本教程中,我们讨论一个非常轻量级且多功能的命令行应用程序,maim(制作图像),并且我们了解可以使用哪些选项来修改其行为。
在本教程中您将学习:
如何在最常用的 Linux 发行版上安装 maim
如何截取整个屏幕
如何将屏幕截图保存为特定格式(png/jpg)
如何以交互方式选择屏幕区域
如何通过将窗口的 id 传递给 maim 来截取窗口的屏幕截图
如何延迟截图
如何在管道中使用maim
使用的软件要求和约定
安装
maim 实用程序被设计为另一个用于在 Linux 上截取屏幕截图的命令行实用程序的改进版本:scrot。该应用程序是免费的开源软件,源代码可在 github 上获取。 Maim 在所有最常用的 Linux 发行版的默认存储库中都可用,因此我们可以轻松地将其安装在 Fedora、Archlinux、Debian 及其衍生版本上。在 Red Had 赞助的社区发行版上,我们可以使用 dnf 包管理器来完成任务。 我们跑:
$ sudo dnf install maim
“maim”包也可以在 Archlinux“社区”存储库中找到。要安装它,我们可以使用 pacman:
$ sudo pacman -Sy maim
最后,在 Debian 及其衍生版本上,我们可以同步我们的存储库并使用 apt-get 安装实用程序:
$ sudo apt-get update && sudo apt-get install maim
一旦应用程序安装在我们的系统中,我们就可以使用它从命令行截取屏幕截图。让我们看看如何!
基本用法
maim 实用程序非常易于使用。首先我们来看看它的基本用法。假设我们想要截取整个屏幕的屏幕截图并将其保存到“screenshot.png”文件中。我们所要做的就是调用 maim 并传递路径 文件的作为参数。我们跑:
$ maim ~/screenshot.png
默认情况下,应用程序将尝试从文件名中了解保存图像的格式,因此,例如,当运行上述命令时,图像将保存为 png。然而,我们可以使用一个选项来显式传递我们想要使用的格式:-f
(--format
的缩写)。显式保存图像 作为 jpg,我们将运行:
$ maim -f jpg ~/screenshot
正如我们已经说过的,仅支持 png 和 jpg 格式,前者是默认格式。我们还可以使用 -m
选项选择生成图像的质量,并使用 1
到 10
的整数表示压缩级别>:根据所选的图像格式,这将产生不同的效果。
交互式选择要捕获的区域
当运行我们在前面的示例中使用的命令时,整个屏幕内容将自动包含在屏幕截图中,无需用户交互。然而,在某些情况下,我们可能希望选择屏幕区域以更精确地捕获。为了完成该任务,我们可以使用 -s
选项(--select
)运行应用程序;这将以“交互模式”运行 maim:
$ maim -s ~/screenshot
一旦我们运行上面的命令,光标形状将变为“加号”,我们将能够选择要捕获的区域。一旦我们释放鼠标左键,屏幕截图就会保存到指定的路径。
通过 id 仅捕获特定窗口
我们可以用来捕获特定窗口(忽略所有其余窗口)的另一个选项是使用 -i
(--window
) 选项运行 maim,并传递 id我们想要捕获作为选项参数的窗口的名称。此时肯定会提出一个问题:“我们如何获得窗口 id ? ”。当使用Xorg服务器时,我们可以使用xdotool
实用程序来完成此任务。我们所要做的就是使用 selectwindow
命令调用应用程序,然后,一旦光标形状发生变化,单击我们想要知道其 ID 的窗口。它的 id 将在终端中报告:
$ xdotool selectwindow
37748743
一旦我们知道了窗口的 id,我们就可以将其传递给 maim,方法如下:
$ maim -i 37748743 ~/screenshot
我们可以使用相同的原理来仅捕获活动窗口。这次我们所要做的就是使用 getactivewindow 命令启动 xdotool,该命令返回当前活动窗口的 id。使用外壳命令 替换功能,我们可以在一行中完成所有操作:
$ maim -i "$(xdotool getactivewindow)" ~/screenshot
包括选择特定区域时的背景
当我们选择要捕获的屏幕的特定区域时,无论是交互方式还是通过指定窗口 id(如上例所示),maim 将仅捕获指定的窗口并忽略背景。这是 选择当前活动窗口的屏幕截图示例:
如您所见,图像下方的原始背景未包含在屏幕截图中。在绝大多数情况下,这是所需的行为。但是,如果我们想包含背景,可以使用 -B
选项,它是 --capturebackground
的缩写形式。下面您可以看到使用它调用应用程序的结果:
延迟截图
Maim 具有一个非常有趣的功能:它可以在实际截屏之前使用以秒为单位的延迟。允许我们执行此操作的选项是 -d
(它是 --delay
的缩写)。正如你可以想象的,我们所要做的就是将一个浮点数作为参数传递给选项。因此,要在实际截取屏幕截图之前等待 5 秒,我们可以运行以下命令:
$ maim -d 5 ~/screenshot
命令启动后,屏幕上将出现倒计时。过期后,屏幕截图将保存到指定位置。
在管道中使用 maim
在前面的示例中,我们提供了一个文件路径,用于保存使用 maim 拍摄的屏幕截图。但是,如果在管道中使用 maim,则可以省略该参数,因为该命令默认将编码图像数据输出到标准输出。此功能使我们能够对动态拍摄的图像进行处理。让我们看一个例子。假设我们想要截取屏幕截图并自动将其复制到剪贴板;如果使用 Xorg,我们可以这样写:
$ maim | xclip -selection clipboard
在上面的示例中,maim 的输出(即编码的图像数据)用作 xclip 应用程序的标准输入,该应用程序是 X 服务器选择的命令行界面。在本例中,我们使用 -selection
选项运行它,该选项让我们指定要使用的 X 选择。
编码的图像数据将保存在我们的剪贴板中,准备好粘贴到我们最喜欢的图像编辑器或任何其他支持图像的应用程序中。
以同样的方式,我们通过将拍摄的图像传递到命令行应用程序(例如 ImageMagick)的标准输入来修改拍摄的图像。
结论
在本教程中,我们学习了如何使用 maim,这是一个命令行实用程序,用于在运行 Xorg 服务器时在 Linux 上捕获屏幕截图。我们了解了如何在一些最常用的 Linux 发行版中安装该应用程序,如何 使用它以交互方式捕获整个屏幕或仅捕获特定区域,或者通过向应用程序传递窗口的 ID 以及如何指定保存屏幕截图的格式。我们还了解了如何延迟截取屏幕截图,以及如何在管道中运行 maim。