VCC：给 UNIX 程序员的酷炫命令行聊天软件
VCC 是一个 UNIX/Linux 上的命令行聊天软件。
VCC
182.146.184.145
不是说纯广告不能投稿吗
来自四川泸州的 Chrome 100.0|Windows 10 用户
2022-04-04T11:33:04.000
61.162.204.113
额，这个算是广告吗……
来自山东德州的 Firefox 98.0|GNU/Linux 用户
2022-04-04T13:27:07.000
35.220.150.103
你要是有个自己的开源软件，我也欢迎你来投稿介绍给大家。
linux [Chrome 100.0|Mac 10.15]
2022-04-04T14:58:17.000
219.217.246.90
哈哈，我就喜欢这种大道至简的玩意儿
来自黑龙江哈尔滨哈尔滨工业大学的 Firefox 99.0|GNU/Linux 用户
2022-04-07T17:02:07.000
VCC 是一个 UNIX/Linux 上的命令行聊天软件。

> 
> VCC 是一个 UNIX/Linux 上的命令行聊天软件。
> 
> 
> 


![](/data/attachment/album/202204/03/100501bn58dwhxz6k28nhy.jpg)


### VCC 简介


我热爱 UNIX/Linux 和 C 语言，VCC（very cool chat）是我和其他人开发的一个业余（课余）作品。它是用 C 编写的，是一个运行在 UNIX/Linux 上的命令行聊天软件。VCC 目前还处于相当早期的阶段。这次将它介绍给大家是希望引来一些关注，无论是建议还是 bug 报告。当然，要是你对这个项目感兴趣，也非常欢迎你参与到开发当中。


我们开发它一方面是为了在命令行上更好的进行聊天对话，另一方面纯粹为了提升技术以及为了好玩。使用 VCC，你可以在写代码的时候快速切换到它所在终端标签聊天，这一直是我的一个梦想。


当前版本的 vcc 1.5.2/vccd 1.6.1 支持用户登录、广播消息、创建 / 加入会话，以及在会话中聊天。


VCC 采用 GPLv3 许可证，目前贡献者有我（intirain）以及 3swordman。


### 安装 VCC


VCC 分为客户端（即 `vcc`）以及服务端（即 `vccd`），托管在码云上：


* `vcc`：(<https://gitee.com/intirain/vcc.git>)
* `vccd`：(<https://gitee.com/intirain/vccd.git>)


将上述代码仓库克隆到本地后，进入该目录并且运行 `make` 来编译。你会得到一个可执行文件 `vcc` 或者 `vccd`。


### 运行 vcc 客户端


不提供参数直接运行客户端，会连接到我建立的默认服务器（`124.223.105.230`）：



```
vcc $ ./vcc 

```

它将会提示你输入用户名以及密码。如果你是游客，则可使用游客账户（用户名和密码都是 `guest`）。而如果你想要获得一个账号，请向我发邮件（ <mailto:intirain@163.com> ）联系我。


如果你想要连接到自己那有着 128 个核心、1 TB 内存、SSD 1 YB 的小型服务器，请运行：



```
vcc $ ./vcc [服务器 IP 地址] # 当前还不支持域名

```

登录成功之后即可开始聊天，只需要输入消息并且回车即可。过长的信息（大约 200 字节以上）会被截断。


![](/data/attachment/album/202204/03/100517yt1qiqlg6jyqg1q2.png)


### 运行自己的 vccd 服务器端


你可以在 46 端口上运行自己的 `vccd` 服务。


以下命令需要 root 权限。


如果你是第一次运行 `vccd`，首先请执行安装脚本：



```
vccd $ sudo scripts/install

```

该脚本会创建文件 `/etc/vccd-runtime`，并且在其中记录了 `vccd` 的运行时目录的位置（`$HOME/.vccd-runtime`）。该目录中保存着用户信息（当前还没有加入聊天记录功能），具体的位置是 `users/用户名`，每个文件都是一个采用本机字节序的结构体。



```
vccd $ sudo ./vccd

```

上列命令只是启动了 `vccd` 守护进程（严格来说，它只能算一个运行于后台的程序，并不是“守护进程”），而没有创建任何用户。运行如下命令可以创建用户（不需要重启 `vccd`）：



```
vccd $ sudo scripts/adduser <用户名> <密码>

```

### vcc 命令


`vcc` （客户端）支持命令，它的命令都以 `-` 开头。以下是当前 `vcc` （1.5.2）支持的所有命令，可以在连接到服务器的 `vcc` 客户端里输入 `-help` 命令查看：



```
#000 intirain$: -help
-help:	Show information about every message. 
-quit:	Disconnect to server and exit vcc. 
-ls:	List all users online now. 
-rate:	Change message refresh rate. 
-newse:	Create a new session. 
-currs:	Get current session id. 
-swtch:	Switch to another session. 
-lsse:	List all sessions created. 
#000 intirain$: 

```

以下是对每一条命令的详细描述：




| 命令名称 | 描述 |
| --- | --- |
| `-help` | 显示所有命令的帮助信息 |
| `-quit` | 退出 `vcc`（相当于杀掉它） |
| `-ls` | 查看当前在线的所有用户 |
| `-rate` | 设置刷新率 |
| `-newse` | 新建一个会话 |
| `-currs` | 查看当前会话 id（sid） |
| `-swtch` | 加入另一个会话 |
| `-lsse` | 查看服务器上所有已经创建了的会话 |


说明：


* 刷新率：`vcc` 需要时序性的请求服务器来获取新消息。刷新率以赫兹为单位，默认为 1 Hz （即每秒刷新一次）。刷新率不得超过 1000 Hz （即每一毫秒刷新一次）。
* 会话：`vcc` 中的群聊叫做“会话”。会话是由一或多个用户组成的聊天室，0 号会话为大厅，所有人都在其中。会话无法退出。现在还不支持销毁一个会话，只能通过杀掉 `vccd` 来手动完成。
* 会话不会退出，因此在加入另一会话后你仍在原先的会话中，仍会收到原先会话中的消息。但是你在加入另一会话后发送的消息，并不会被原先会话中的人收到。会话的创建者在会话创建后就移植在会话中。


`vcc` 还没有加入命令行参数的支持，也就是说所有的参数都需要你在键入该命令交互式输入。


### VCC 的输出信息


VCC 使用了 ANSI 的 CSI 转义，但没有检查当前终端对该标准的支持。如果你在类似串口的终端上运行 `vcc`，将会直接得到没有渲染的转义字符。`vcc` 的配色是可更改的，默认的配色主题在 `pretty.c`中定义，是一个 C 语言结构体，该结构体在 `include/vcc/pretty.h` 中定义。


如果你觉得当前默认的配色不甚好看，完全可以在 `pretty.c` 中新建自己的配色，也可以复制并更改默认配色。我们也鼓励大家将自己认为好看的配色 PR 到码云仓库，我们在看到后会第一时间合并。


### 参与 VCC 的开发


`vcc` 以及 `vccd` 是以 GPL 许可证发布的，属于我们的 “inti 计划”旗下项目之一。我们鼓励你参与开发改进它，抱歉，我们无力为此支付报酬，参与开发是无偿的。


“inti 计划”是我们（其实也就俩人）创建的一个计划，目的是为了将优秀的自由软件（Linux 以及 GNU 计划）推向社会。我们计划开发的项目是 GNU 计划中所不包含的软件或者库，采用的编程语言为 C/C++。非常欢迎大家的加入。


VCC 还处于非常早期的开发阶段，但它应该已经具备了一个基本聊天软件的功能。我们当然希望你能够使用它、改进它，并且将它推广给身边使用 UNIX/Linux 的人们。目前，我们正在稳定当前的版本。将来，它也许会成为一个不错的社交软件，动态之类的高级功能也会实现。


顺便说一句，VCC 的 Windows 移植版本正在开发中，预计还需要几周的时间（毕竟我们只有周末才能编程 :( ）。移植之后的 VCC 应该不会保留配色（因为 Windows 并不支持 CSI 转义）。




---


作者简介：intirain，喜欢 UNIX、x86、RISC-V 上的 C。




---


via: <https://github.com/LCTT/Articles/pull/13>


作者：[intirain](https://gitee.com/intirain) 编辑：[wxy](https://github.com/wxy)


本文由贡献者投稿至 [Linux 中国公开投稿计划](https://github.com/LCTT/Articles/)，采用 [CC-BY-SA 协议](https://creativecommons.org/licenses/by-sa/4.0/deed.zh) 发布，[Linux中国](https://linux.cn/) 荣誉推出

