---
author: Lubos Rendek
category: 桌面应用
comments_data:
- date: '2017-05-18 14:03:37'
  message: 也可以用 script 记录。
  postip: 118.122.120.11
  username: 来自四川成都的 Chrome 57.0|GNU/Linux 用户
- date: '2017-05-19 12:09:25'
  message: 生成 gif 图片不就行了．这么麻烦．
  postip: 112.3.244.38
  username: 来自江苏南京的 Firefox 53.0|GNU/Linux 用户
- date: '2017-05-19 17:18:56'
  message: 太大
  postip: 111.201.14.82
  username: linux [Chrome 58.0|Mac 10.11]
count:
  commentnum: 3
  favtimes: 3
  likes: 0
  sharetimes: 0
  viewnum: 6451
date: '2017-05-18 11:59:00'
editorchoice: false
excerpt: Asciinema 是一个轻量并且非常高效的终端会话录制器。使用它可以录制、回放和分享 JSON 格式的终端会话记录。最主要的优点是，它能够以通过
  ASCII 文本以及 ANSI 转义码编码来录制所有的标准终端输入、输出和错误信息。
fromurl: https://linuxconfig.org/record-and-replay-terminal-session-with-asciinema-on-linux
id: 8519
islctt: true
largepic: /images/p/201705/18/115905cc2jzzn9a09ep2f9.jpg
permalink: /article-8519-1.html
pic: /images/p/201705/18/115905cc2jzzn9a09ep2f9.jpg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: Asciinema 是一个轻量并且非常高效的终端会话录制器。使用它可以录制、回放和分享 JSON 格式的终端会话记录。最主要的优点是，它能够以通过
  ASCII 文本以及 ANSI 转义码编码来录制所有的标准终端输入、输出和错误信息。
tags:
- 终端
- 记录
thumb: false
title: 如何在 Linux 中使用 Asciinema 进行录制和回放终端会话
titlepic: true
translator: ucasFL
updated: '2017-05-18 11:59:00'
---

![](/images/p/201705/18/115905cc2jzzn9a09ep2f9.jpg)


### 简介


Asciinema 是一个轻量并且非常高效的终端会话录制器。使用它可以录制、回放和分享 JSON 格式的终端会话记录。与一些桌面录制器，比如 Recordmydesktop、Simplescreenrecorder、Vokoscreen 或 Kazam 相比，Asciinema 最主要的优点是，它能够以通过 ASCII 文本以及 ANSI 转义码编码来录制所有的标准终端输入、输出和错误信息。


事实上，即使是很长的终端会话，录制出的 JSON 格式文件也非常小。另外，JSON 格式使得用户可以利用简单的文件转化器，将输出的 JSON 格式文件嵌入到 HTML 代码中，然后分享到公共网站或者使用 asciinema 账户分享到 Asciinema.org 。最后，如果你的终端会话中有一些错误，并且你还懂一些 ASCI 转义码语法，那么你可以使用任何编辑器来修改你的已录制终端会话。


**难易程度：**


很简单！


**标准终端：**


* **#** - 给定命令需要以 root 用户权限运行或者使用 `sudo` 命令
* **$** - 给定命令以常规权限用户运行


### 从软件库安装


通常， asciinema 可以使用你的发行版的软件库进行安装。但是，如果不可以使用系统的软件库进行安装或者你想安装最新的版本，那么，你可以像下面的“从源代码安装”部分所描述的那样，使用 Linuxbrew 包管理器来执行 Asciinema 安装。


**在 Arch Linux 上安装：**



```
# pacman -S asciinema

```

**在 Debian 上安装：**



```
# apt install asciinema

```

**在 Ubuntu 上安装：**



```
$ sudo apt install asciinema

```

**在 Fedora 上安装：**



```
$ sudo dnf install asciinema

```

### 从源代码安装


最简单并且值得推荐的方式是使用 Linuxbrew 包管理器，从源代码安装最新版本的 Asciinema 。


#### 前提条件


下面列出的前提条件是安装 Linuxbrew 和 Asciinema 需要满足的依赖关系：


* git
* gcc
* make
* ruby


在安装 Linuxbrew 之前，请确保上面的这些包都已经安装在了你的 Linux 系统中。


**在 Arch Linux 上安装 ruby：**



```
# pacman -S git gcc make ruby

```

**在 Debian 上安装 ruby：**



```
# apt install git gcc make ruby

```

**在 Ubuntu 上安装 ruby：**



```
$ sudo apt install git gcc make ruby

```

**在 Fedora 上安装 ruby：**



```
$ sudo dnf install git gcc make ruby

```

**在 CentOS 上安装 ruby：**



```
# yum install git gcc make ruby

```

#### 安装 Linuxbrew


Linuxbrew 包管理器是苹果的 MacOS 操作系统很受欢迎的 Homebrew 包管理器的一个复刻版本。还没发布多久，Homebrew 就以容易使用而著称。如果你想使用 Linuxbrew 来安装 Asciinema，那么，请运行下面命令在你的 Linux 版本上安装 Linuxbrew：



```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"

```

现在，Linuxbrew 已经安装到了目录 `$HOME/.linuxbrew/` 下。剩下需要做的就是使它成为可执行 `PATH` 环境变量的一部分。



```
$ echo 'export PATH="$HOME/.linuxbrew/bin:$PATH"' >>~/.bash_profile
$ . ~/.bash_profile

```

为了确认 Linuxbrew 是否已经安装好，你可以使用 `brew` 命令来查看它的版本：



```
$ brew --version
Homebrew 1.1.7
Homebrew/homebrew-core (git revision 5229; last commit 2017-02-02)

```

#### 安装 Asciinema


安装好 Linuxbrew 以后，安装 Asciinema 就变得无比容易了：



```
$ brew install asciinema

```

检查 Asciinema 是否安装正确：



```
$ asciinema --version
asciinema 1.3.0

```

### 录制终端会话


经过一番辛苦的安装工作以后，是时候来干一些有趣的事情了。Asciinema 是一个非常容易使用的软件。事实上，目前的 1.3 版本只有很少的几个可用命令行选项，其中一个是 `--help` 。


我们首先使用 `rec` 选项来录制终端会话。下面的命令将会开始录制终端会话，之后，你将会有一个选项来丢弃已录制记录或者把它上传到 asciinema.org 网站以便将来参考。



```
$ asciinema rec

```

运行上面的命令以后，你会注意到， Asciinema 已经开始录制终端会话了，你可以按下 `CTRL+D` 快捷键或执行 `exit` 命令来停止录制。如果你使用的是 Debian/Ubuntu/Mint Linux 系统，你可以像下面这样尝试进行第一次 asciinema 录制：



```
$ su
Password:
# apt install sl
# exit
$ sl

```

一旦输入最后一个 `exit` 命令以后，将会询问你：



```
$ exit
~ Asciicast recording finished.
~ Press <Enter> to upload, <Ctrl-C> to cancel.

https://asciinema.org/a/7lw94ys68gsgr1yzdtzwijxm4

```

如果你不想上传你的私密命令行技巧到 asciinema.org 网站，那么有一个选项可以把 Asciinema 记录以 JSON 格式保存为本地文件。比如，下面的 asciinema 记录将被存为 `/tmp/my_rec.json`：



```
$ asciinema rec /tmp/my_rec.json

```

另一个非常有用的 asciinema 特性是时间微调。如果你的键盘输入速度很慢，或者你在进行多任务，输入命令和执行命令之间的时间会比较长。Asciinema 会记录你的实时按键时间，这意味着每一个停顿都将反映在最终视频的长度上。可以使用 `-w` 选项来缩短按键的时间间隔。比如，下面的命令将按键的时间间隔缩短为 0.2 秒：



```
$ asciinema rec -w 0.2

```

### 回放已录制终端会话


有两种方式可以来回放已录制会话。第一种方式是直接从 asciinema.org 网站上播放终端会话。这意味着，你之前已经把录制会话上传到了 asciinema.org 网站，并且需要提供有效链接：



```
$ asciinema play https://asciinema.org/a/7lw94ys68gsgr1yzdtzwijxm4

```

另外，你也可以使用本地存储的 JSON 文件：



```
$ asciinema play /tmp/my_rec.json

```

如果要使用 `wget` 命令来下载之前的上传记录，只需在链接的后面加上 `.json`：



```
$ wget -q -O steam_locomotive.json https://asciinema.org/a/7lw94ys68gsgr1yzdtzwijxm4.json
$ asciinema play steam_locomotive.json

```

### 将视频嵌入 HTML


最后，asciinema 还带有一个独立的 JavaScript 播放器。这意味者你可以很容易的在你的网站上分享终端会话记录。下面，使用一段简单的 `index.html` 代码来说明这个方法。首先，下载所有必要的东西：



```
$ cd /tmp/
$ mkdir steam_locomotive
$ cd steam_locomotive/
$ wget -q -O steam_locomotive.json https://asciinema.org/a/7lw94ys68gsgr1yzdtzwijxm4.json
$ wget -q https://github.com/asciinema/asciinema-player/releases/download/v2.4.0/asciinema-player.css
$ wget -q https://github.com/asciinema/asciinema-player/releases/download/v2.4.0/asciinema-player.js

```

之后，创建一个新的包含下面这些内容的 `/tmp/steam_locomotive/index.html` 文件：



```
<html>
<head>
  <link rel="stylesheet" type="text/css" href="./asciinema-player.css" />
</head>
<body>
  <asciinema-player src="./steam_locomotive.json" cols="80" rows="24"></asciinema-player>
  <script src="./asciinema-player.js"></script>
</body>
</html>

```

完成以后，打开你的网页浏览器，按下 `CTRL+O` 来打开新创建的 `/tmp/steam_locomotive/index.html` 文件。


### 结论


正如前面所说的，使用 asciinema 录制器来录制终端会话最主要的优点是它的输出文件非常小，这使得你的视频很容易分享出去。上面的例子产生了一个包含 58472 个字符的文件，它是一个只有 58 KB 大 小的 22 秒终端会话视频。如果我们查看输出的 JSON 文件，会发现甚至这个数字已经非常大了，这主要是因为一个 “蒸汽机车” 已经跑过了终端。这个长度的正常终端会话一般会产生一个更小的输出文件。


下次，当你想要在一个论坛上询问关于 Linux 配置的问题，并且很难描述你的问题的时候，只需运行下面的命令：



```
$ asciinema rec

```

然后把最后的链接贴到论坛的帖子里。


### 故障排除


#### 在 UTF-8 环境下运行 asciinema


错误信息：



```
asciinema needs a UTF-8 native locale to run. Check the output of `locale` command.

```

解决方法： 生成并导出 UTF-8 语言环境。例如：



```
$ localedef -c -f UTF-8 -i en_US en_US.UTF-8
$ export LC_ALL=en_US.UTF-8

```



---


via: <https://linuxconfig.org/record-and-replay-terminal-session-with-asciinema-on-linux>


作者：[Lubos Rendek](https://linuxconfig.org/record-and-replay-terminal-session-with-asciinema-on-linux) 译者：[ucasFL](https://github.com/ucasFL) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出