linux上使用微信确实麻烦,没有Linux客户端,网页版体验极差,毕竟某字母的做事原则就是:没钱赚的事绝对不做。
先后试过几个版本的第三方封装微信,体验都不怎么好,只是聊胜于无罢了,现在用的 telegram
+ ehforwarderbot
方案算是目前最好的了,但是网上的教程大部分存在不少坑,我在摸索几天后成功搭建,就此发布这篇文章把这些坑填一下,方便后来人。
除了wine之外,目前有几个在linux上可用的微信:
- electronic-wechat:封装的网页版微信,体积略大,通知处理的很好,开箱即用,无需繁杂的设置,同时网页版的弊端也是继承下来,比如没有消息记录。实在不想折腾,想即开即用的,推荐这个。
- 微信网页版助手:一个很不错的解决方案,集成在浏览器里,但是只支持火狐,chrome直接放弃。
- libgin-wechat:作为libgin的一个插件,可以在之运行一个libgin的情况下,同时登录微信,qq(lwqq),facebook,gmail等。看起来不错,但我没弄成功。
- weweChat:用
React
、MobX
和Electron
对网页版重构过、是目前见过最漂亮的网页版微信,没有之一,不过有些影响使用的小毛病,而且最新版的fedora 29
和ubuntu 18.04
都不支持,界面可以感受一下:
不想折腾或者不满足下面条件的可以试试上面几个。还有最后一个就是[Telegram
+ ehforwarderbot
]了,虽然初期配置麻烦,但用的是telegram美观的界面,又有消息记录,最后就敲定这个了。
注意:
Telegram
+ehforwarderbot
方案需要知道以下几个问题
- **有一个能 fq 的 vps:**telegram需要翻墙才能用,或者有其他方法解决 telegram 被墙的问题;
- **手机版微信必需保持在线:**因为这个方案是基于网页版微信,所以这个只是linux上的方案,虽然手机上的 telegram 也能接收信息,但若手机端微信不在线,服务器端也会掉,那么无论手机还是电脑的telegram都将收不到信息,所以这个方案暂时无法完全替代微信;
- **此教程适用于 ehforwarderbot 2.0:**2.0 版本改变不少,不仅安装方式变简单(不必通过源码安装),而且配置文件跟 1.x 版本的路径不一样,连后缀都不一样,
3 配置
部分会说;- **仅支持微信网页版所支持的功能以及消息类型:**即没有朋友圈、没有红包、不能发语音、不能发位置……等等诸如此类,部分文件、图片、表情等多媒体文件会被网页版微信截断,即收不到任何数据, 尤以表情为甚。因此造成的偶发现象,会提醒用户使用移动客户端查看。
- **信息必须自己分类:**telegram上会创建一个会话,这个会话里会显示来自微信的所有消息,也就是说微信的消息全部挤在一个窗口内,需要自己一个个分类,将每个人的会话窗口单独提取出来,这个在
4. 使用
部分会说
概要
- 服务器上需要安装的部分:
python3
:ehforwarderbot 的依赖项;ehforwarderbot
:接收微信消息并转发给 telegram 客户端;ehforwarderbot主端
:用来将消息发送至 telegram 的 ehforwarderbot 组件;ehforwarderbot从端
:本文中用到的是微信从端,即发送到 telegram 的是微信的消息;
- 客户端需要安装的部分:
telegram
:用于接收消息;
以下VPS系统以debian为例,其他发行版如centos等差别也不大,就是在安装依赖部分要把apt-get改成相应的命令。
安装依赖
python3
ehforwarderbot依赖于python3和pip3,目前(2018.3.27)在Python.org上的python3版本是3.6.4
,可以直接在软件仓库安装,版本会稍旧,
1# 安装python3依赖
2apt-get install python3-pip python3-dev python3-setuptools
3apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev
4apt-get install libmagic-dev ffmpeg
或者也可以直接从源码安装最新版本,实际上软件仓库里的python也能用,所以不必太纠结:
1# 创建安装目录
2mkdir /tmp/python3
3
4# 下载 Python 源码
5wget --no-check-certificate https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
6
7# 解压源码包
8tar -xzvf Python-3.6.4.tgz
9
10# 进入解压目录
11cd Python-3.6.4
12
13# 编译安装三部曲
14./configure
15make
16make install
wget
对于https
的网址需要加上--no-check-certificate
pip3
目前(2018.3.27)最新版本是 9.0.3
,不过初次安装时不必在意版本,如果有新版本出来,可以通过pip直接升级
1# 下载源代码
2wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.3.tar.gz
3
4# 解压
5tar -zvxf 9.0.3 -C pip-9.0.3
6
7# 进入解压目录
8cd pip-9.0.3
9
10# 使用 Python 3 安装
11python3.6 setup.py install
12
13# 升级 pip
14pip install --upgrade pip
- 注意用python3安装pip的时候,用到的命令是
python3.6
,也是当前的python版本,如果版本是3.7,则应该用python3.7
安装。
安装
之前的 EH Forwarder Bot 1.0 版本安装需要从 github 下载源码,而 2.0 版本改进很多,通过PyPI安装就可以了
1# 通过pip安装稳定板
2pip3 install ehforwarderbot
3
4# 安装主端 ETM (EFB Telegram Master Channel)
5pip3 install efb-telegram-master
6
7# 安装从端 EWS (EFB WeChat Slave Channel)
8pip3 install efb-wechat-slave
如果想试新功能新特性,可以从 github 安装测试版,不推荐新手尝试:
1pip3 install git+https://github.com/blueset/ehforwarderbot.git
配置
Telegram
Telegram 是一个即时聊天工具,启动快捷,体积小,几乎支持全平台。Linux客户端可以在官网下载,移动端也可以从 Play 商店和 App Store 上面下载,需要注意的是,客户端的使用需要翻墙。
从Telegram Desktop下载一个Linux客户端然后注册一个帐号备用,注册只需要手机号码。
Telegram Bot
是 EFB(Telegram 主端)的出口,也就是用来接收信息的客户端所需要的功能。直接在搜索框输入 BotFather
可以找到,不区分大小写,但别找错了,下面图中第一个才是:
接下来就是向 BotFather
发送指令来创建 Bot,指令以 /
开头,引号左边是需要输入的内容,右边是解释,输入顺序不能错:
/newbot
:启用向导;WeChat
:启用向导后要求输入名称,名称和下面的用户名以后都不能更改;WeChat_bot
:输入用户名,只能由字母和下划线组成,这个用户名只是举个例子;
创建之后大概是这个样子:
注意:
- 名称 不等于 用户名,两者相当于昵称和帐号的区别,并且不能更改,实在需要更改的话只能重新建一个Bot;
- 要妥善保管好用户名和最后出现的token,token在接下来会用到;
- 为了自身信息安全最好别将用户名和token告诉别人,上面只是创建个新帐号举例子;
接下来都是在 BotFather
里面的操作:
- 输入
/setprivacy
,选择刚创建的 Bot,选择 “Disable”. - 输入
/setjoingroups
,选择刚创建的 Bot,选择 “Enable”. - 输入
/setcommands
,选择刚创建的 Bot,输入以下内容,注意是每一行的内容全部都要输进去,包括中文注释:
1link - 将会话绑定到 Telegram 群组
2chat - 生成会话头
3recog - 回复语音消息以进行识别
4extra - 获取更多功能
完成后大概是这个样子:
之后在搜索框输入 get_id_bot
,仍然是选第一个
在 get_id_bot
的聊天窗口输入 /start
可以获得 Telegram ID
,Your Chat ID
后面的那串数字就是需要的 ID。
EH Forwarder Bot
回到服务器端,EH Forwarder Bot 1.x 版本的配置文件是 config.py
,但目前的 2.0 版本已经改成 config.yawl
,而且需要自行创建:
1# 创建并编辑配置文件 config.yawl
2vim ~/.ehforwarderbot/profiles/default/config.yaml
3
4# 输入以下内容,master_channel后面是刚才安装的主端,slave_channels后面是从端,“从端书写方式必须用列表,即使只有一个从端”,这是官方文档里面的说明
5master_channel: "blueset.telegram"
6slave_channels:
7- "blueset.wechat"
8
9# 编辑主端配置文件
10vim ~/.ehforwarderbot/profiles/default/blueset.telegram/config.yaml
11
12# 加入以下内容,其中token后面接的是上面创建bot时所得到的,admins后面接的数字是刚才得到的Telegram ID
13token: "88888888:dGDe890Pml9lmp9PO9j9pJ9Pn9NMPO0nnki"
14admins:
15- 88888888
此时已经配置完毕,可以直接运行看看
1ehforwarderbot
接下来在一大串提示之后就会显示出二维码,直接用手机微信扫描就可以了:
使用
上面已经让服务器开始接收微信消息了,现在就需要将信息接入到客户端的telegram。 在搜索框中搜索刚才创建的 bot 帐户,进入,点击 start
即可开始聊天,需要和哪个联系人聊天就输入 /chat 名称
,这个名称可以是昵称或备注,也可以是昵称或者备注的一部分,此时就相当于搜索联系人,或者直接输入 /chat
会显示所有联系人和公众号。
此时如果有消息来,微信所有的消息会直接被推送到这个窗口,注意是所有的消息,不管是谁发送的都在这个窗口,所以就需要另外手动把联系人分离到单独的窗口,方式是把联系人加入到一个个新创建的群组,每个群组只有自己和对应的联系人,也就是说,在这个群里只有两个人在这里发信息,也就相当于单独聊天了。
操作起来不难,只是每个联系人都要操作一遍:
- 在
菜单
->NEW GROUP
中新建群组,输入群组名称,然后搜索自己的 bot 的名字,把自己添加进群组; - 在自己的 bot 中输入
/link 联系人
,例如添加微信支付,直接点击搜索结果 ->link
-> 刚创建的微信支付群组 -> 确定,绑定成功是这样的:
设置守护进程
通过的方式运行ehforwarderbot之后会占着输出窗口,像这样:
当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程,也就是说一关ssh窗口就会掉线。因此需要设置成后台进程,办法有两种:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
显然忽略 HUP 信号很常用,只要输入下面的命令就可以在关闭 ssh 窗口后仍保持 ehforwarderbot 的运行
1nohup ehforwarderbot&
但这种方法也有个问题,就是管理起来不方便,比如要重启或者关闭 ehforwarderbot 的时候,或者要查看 ehforwarderbot 运行状态的时候就会比较麻烦,而且什么时候这个进程被杀死都不知道,所以最好的方法还是用systemd设置成守护进程进行管理。
1# 创建 ehforwarderbot.service 配置文件
2vim /lib/systemd/system/ehforwarderbot.service
输入以下内容:
1[Unit]
2Description=EH Forwarder Bot instance
3After=network.target
4Wants=network.target
5Documentation=https://github.com/blueset/ehForwarderBot
6
7[Service]
8Type=simple
9Environment='EFB_PROFILE=~/.ehforwarderbot/profiles/default/' 'LANG=zh_CN.UTF-8' 'PYTHONIOENCODING=utf_8' 'EFB_DATA_PATH=~/.ehforwarderbot'
10ExecStart=/usr/bin/ehforwarderbot --verbose
11Restart=on-abort
12KillSignal=SIGINT
13StandardOutput=journal+file:/var/log/efb.debug
14StardardError=journal+file:/var/log/efb.error
15
16[Install]
17WantedBy=multi-user.target
18Alias=efb
19Alias=ehforwarderbot
之后就可以直接用 systemd 管理 ehforwarderbot 了:
1# 启动
2sudo systemctl start ehforwarderbot
3
4# 关闭
5sudo systemctl stop ehforwarderbot
6
7# 重启
8sudo systemctl restart ehforwarderbot
9
10# 查看运行详情
11sudo systemctl status ehforwarderbot
12
13# 查看更加详细的运行详情
14sudo systemctl status ehforwarderbot -l
配置文件里面也设置了别称,所以可以用简化的别称,例如:
1# 启动
2sudo systemctl start efb
当然,如果使用上面的配置文件启动服务时失败,需要检查的地方只有三个:第二部分中 Environment
后面的 EFB_PROFILE
和 EFB_DATA_PATH
,还有 ExecStart
:
EFB_PROFILE
后面接的是配置文件的路径,如果不是按照此教程安装设置的 ehforwarderbot 的话,配置文件可能不在这个路径,需要自己找,不过注意这里填的是配置文件所在文件夹的路径,而不是配置文件的完整路径;EFB_DATA_PATH
一般默认是~
路径,如果不是,直接运行cd $EFB_DATA_PATH
,看看打开的是哪个文件夹;ExecStart
如果出错,直接运行whereis ehforwarderbot
,将得到的路径替换掉ExecStart=
后面的/usr/bin/ehforwarderbot
;
关于更多systemd的详情,可以看看评论区中开发者Eana Hufwe的评论。
更改完记得重新加载配置文件,然后再启动:
1sudo systemctl daemon-reload
2sudo systemctl start efb