Skip to content
xiehuc edited this page Jun 7, 2015 · 3 revisions

安装之后

  1. 安装之后.可以到pidgin的账户中,添加webqq协议(gnome需要注销后再进入才可看到 webqq).然后输入用户名密码,就可以登录QQ了。
  2. 如果添加账户时找不到webqq协议,注销用户,然后重新打开pidgin即可。
  3. 如果网络情况不太好,会提示一些不太明确的错误.请检查用户名,密码是否正确.并且多 试几次。

开始使用之前

启用表情支持

在默认情况下.pidgin-lwqq就能够正确的转换接受到的表情.同时也能够处理发送出去对方 接受到的表情.但是,pidgin自身表情显示的还是自带的表情包.这个时候.你可以在pidgin 的设置中的主题选项卡.启用WebQQ表情.有gif格式的和png格式的.后者适用于机器比较慢 的用户.gif占用的资源比较多.

第一次登录

第一次登录会创建本地缓存.主要缓存一些QQ号昵称映射表.所以第一次建立缓存会使用比 较长的时间.而且I/O量很大(sqlite3) 看上去就向程序卡死了,甚至直接崩溃 不要担 心,多登录几次就没有问题了.另外可以编译时打开DB_NOSYNC选项,能有助于数据库建立过 程.但是如果遇到断电等情况损坏数据库.请删除它.pidgin-lwqq会自动重新创建.这个数据 库可以备份.这样的话.下次在新环境中安放了数据库之后可以跳过这个环节.路径在 ~/.config/lwqq/[qq].db 以后登录就很流畅了 .

热修复选项

在pidgin账户对话框的高级选项卡下面有几个设置, 分别是:

  • 忽略字体
  • 忽略字体大小
  • 字体加亮(暗色主题可用)

可以有针对性的使用.比如我喜欢打开忽略字体大小选项. 注意,设置完成了要重启pidgin才生效。

发送Relink间隔(m)

也许你会遇到一些奇怪的问题,比如无法加载群成员列表啦,看输出会发现其实是系统返 回了100000错误号。因为webqq会在poll超时5次之后和收到121,120断线消息之后,发送一 个relink(login2)的信号恢复登录状态。在以前,如果没有relink的话,就会出现接受不 了群成员列表,服务器返回100000的错误。虽然我代码里面也同样设置了,但是据反映效 果不佳。还不如直接设置一个计时器。

默认是0,也就是不启用计时器,因为不是所有的号都会出现100000错误,我自己的就很少 遇到。仅仅一部分号码出现100000错误的才需要relink。如果是发现有时候接收不了群成 员列表这种。或者是容易断线这种,就可以试一下设置成20分钟或者30分钟relink一次。

所发即所见

default: On

默认,pidgin-lwqq会将需要发送的文字重新转换成接收的形式。所以什么文字颜色,表情,能够保证发送的 内容就是看到的样子。减少一些疑惑。

但是一些插件实现上与它冲突了,比如ort之类加密插件。这个时候就需要把这个选项关闭了。

另外不要忘记了,要重启pidgin才生效。

缓存讨论组

default: On, Hide

目前webqq的设计不能够保存讨论组的聊天记录。开启该选项之后pidgin-lwqq则可以。实 现上使用了随机生成account+数据库支持。使用讨论组的名称来查询数据库。也就是如果 有两个讨论组的名称一样,则会出现查询失败。查询失败的时候不能够保存聊天记录。

如果是在pidgin-lwqq内更改讨论组的名称,由于数据库有钩子(LwqqExtension),会自动 更新。但是如果是在外部改名,会造成查询失败。会重新生成随机account并写入数据库。 因此以前的聊天记录则找不到了。

在 0.4.2, 该选项已经默认打开并隐藏了.

聊天

群聊天

在群聊天的时候.会出现群成员列表为空一段时间.之后才显示. 这个是正在加载列表.并且 随着成员数量的增加.加载时间也会增长 不过这个只有初次打开群才会加载.以后打开则 会直接显示了. 另外.在没有加载完成的时候.成员名称是直接用uin显示的. 不过当加 载完成之后.之前的信息会全部刷新一次.替换为正确的成员名称.

群聊天自动弹窗

pidgin设置的群聊天会自动的弹窗, 无法取消. 这里有两个办法:

  1. 在群上右键选择 屏蔽 , 只接收不提示 则不会弹窗
  2. 在pidgin菜单的 工具, 插件 中, 找到 消息通知 插件, 选择配置.在提 醒中只保留 即时消息窗口聊天窗口, 通知方式中只保留 在窗口标题中 插入新消息数 通知删除中全选. 其它全部 取消. 这样设置之后虽然会弹窗, 但 是不会提升到前面, 就在其它窗口背后默默的更新消息了. 不会影响工作.

群聊天通知

目前没有群通知的正式支持,不过有很多其它的解决方案:

  1. 有 dispensable提供的 群聊天脚本 .
  2. 通过修改版的 libnotify+ 插件, 不过不能和普通的好友聊天区分开来.
  3. 通过 gnome-shell 的 extension.

2和3详见wiki的 Recommand Plugin 页面

群成员名片

如果一个群成员是你的好友,那么会优先显示本地的名称(备注>昵称)。不会显示他自己 设置的群成员名片。这个是pidgin的设计导致的,需要注意。

表情快捷输入

pidgin-lwqq支持表情的快速输入. 比如输入 :微笑: 或者 :wx: 在发送出去的时 候会自动转换成笑脸符号(如果在lwqq中有定义, 会自动映射成一个id, 如笑脸符号是14, 但是如果没有定义, 则会根据pidgin的映射规则发送成文字表情 :)). 在显示的时候 会显示笑脸的gif图片.

但是,在输入框中输入完 :微笑: 之后,并不能立即转换.这个是pidgin自身并没有做即 时表情翻译功能, 当然, cpu占用率也会小很多. 具体的映射规则见 /usr/local/share/lwqq/smiley.txt, 大部分和QQ是一致的.当然.你也可以贡献自己 的一份力量, 将一些错误修正, 或者增加更多的快捷输入. 只需要pull request即可. 开 源的东西就是这点好,定制性高,腾讯的表情快捷输入感觉不太人性化.

在发送时, 如果开启了 所发即所见 , 那么将看到已经按照规则转化成表情了. 我最喜欢 的是三个问号 ??? 会自动转化成疑问的表情. 如果没有开启, 同样也会看到转化成表 情了, 但是实际发送出去的会是原始内容. 具体可以选择文本右键, 选择禁用表情, 就可以 看到原始的文本. 因为pidgin的表情和libpurple的表情有些差异.并不完全同步.

切换自动表情转换

插入表情对话框的第一个表情是一个特殊的表情. 样子就像是 :)\ 组成的符 号。表示禁用表情的意思,

比如你想发一段代码, 但是总发现其中的一部分自动转化成表情了, 非常讨厌, 这个时候 如果在第一个字符之前插入这个特殊的表情(文字表达为 :-face:, 在face前面加一个 减号表示关闭表情) 后面的文字就不会自动翻译成表情了。如果再插入一个则开启。因此 是一个开关. 通过这个开关, 我们就能够把原始代码发出去.

但是你可能还是会看到中间有表情符号, 因为前面说的pidgin显示的表情和发送出去的内 容并不是对应的。也就是说,你看到显示的表情。发送出去的也可能还是文字。pidgin里 面通过选择文字,右键,在选择的文字中禁用表情。你就可以看到完整的文字了。

快速重发

有时候会出现 send failed 的错误. pidgin使用 Ctrl+↑ 就能够快速重发上一条消息

讨论组

添加成员

打开讨论组之后,菜单里有邀请(一共有两个,下面的一个).之后输入已经添加的好友(QQ号 或者是昵称或者是备注)即可.成功之后需要重新打开讨论组,能看到成员的变化,

操作

添加好友

在主菜单的 好友, 添加好友(Ctrl+B) 输入即可

添加群

在协议菜单(帐号, <QQ号>) 添加QQ群 或者 创建讨论组 输入即可.

另:可以在主菜单的 好友, 添加聊天 .输入QQ号即可.然后会创建一个空群. 双击 它之后的步骤就和 添加群 一样了.

添加群成员作为好友

首先打开临时会话(就是在群成员列表双击,对话窗口中间有 ### 的就是临时会话啦). 然后在菜单中点击 对话- 添加,一路确定就可以啦. 当然,老规矩,失败了没有提示.

屏蔽群或聊天组

在群的好友列表上邮件, 选择 屏蔽, 在对话框中有三个等级.在成功接受到服务器的 响应后屏蔽成功,并且屏蔽成功后会是 (群名称) 这种格式,

  • 接受不提示

算是比较好的方式,会接受消息,然后在名称上显示消息数量.例如 (群名称)(10+) 为 什么要显示不精确的数量是因为, 为了降低写回好友列表到磁盘的频率.点开之后会自动的 把所有消息显示出来,并且此时收到的消息会立即显示.因为既然你打开了群了,那肯定是表 示你想参与讨论了,所以理所应当的这样设定.

另外加上未读消息的数量也是希望类似ios的图标的数量通知的样子.让你尽量点开消息,因 为未读消息都是放在内存里面的.还是要占用一部分内存的.不过我测试过.这些文本消息占 用的内存都还比较小,远远没有打开一个窗口占用的内存多.但是点开消息之后消息就会刷 新到界面上,释放掉.

无论是已读的消息还是未读的消息,都会记录在聊天记录中,所以不用担心.聊天记录也尽量 不会记录重复.

实现这些功能基本上已经使用了很trick的方式,在pidgin的chat和qq的group中做了一个 adapter.来实现的.

  • 完全屏蔽

则是从服务器端屏蔽的.根本不会收到消息.这种适合对于流量有限制的场合.

  • 永久

在好友列表的群头像上右键, 有一个 永久 的选项.永久(persistent)是从irc中借鉴 来的概念。指的是关闭对话框时不结束聊天。所以后台还是在不断的接受消息。而且不再 弹出窗口。当重新手动打开窗口时,可以看到新的消息。所以也相当于是半屏蔽了消息。

接受不提示 不同的是,永久会第一次弹出对话框(并且无法用编程手段做到隐藏窗口 ),手动关闭之后才不会再次弹窗。而接受不提示则完全不会弹窗口。两者都能在好友列 表上直观的看到是否有新消息。只是实现的机制不同

更改群名片

同样在好友列表上右键, 有 更改群名片 选项, 或者通过打开聊天窗口, 对话- 更多- 更改群名片 这个功能主要是针对一些群要求群名片必须设置为某种格式.否则清理马甲. 实际上.在 WebQQ中.很多时候查询群名片会返回10003的错误号. 这个错误号的原因不明.导致对话框 内容为空白. 更改不成功.另外.如果成功的话.是没有提示的.当然.错误的话也没有. 以 后有空再修正了.

发送邮件

只针对好友, 在列表上右键有同名选项. 这个功能是读取资料上的邮箱一栏, 如果为空则 通过qq号组合成qq邮箱地址. 然后打开默认的邮件程序.所以为了能够正确的使用它,请设 置好默认邮件程序.

合并漫游记录(废弃)

这个功能能够把网上的7天漫游记录下载下来写入本地聊天记录.目前还没有同时下载图片 的功能.反正pidgin的聊天记录也看不了图片.

后来 WebQQ 阉割了这个功能, 因此就无法用了.

查看群的聊天记录

pidgin的群的聊天记录有一个bug.直接在好友列表上右键查看是看不到的.会一直等待.需 要先打开群.然后用群菜单的 对话- 查看聊天记录 .才能查看.

发送文件(废弃)

现在发送文件使用的是webqq的离线文件通道

WebQQ 已经阉割掉这个功能很多年了.

添加陌生人为好友

只需要把陌生人(躺在陌生人分组的), 拖动到任意一个QQ分组即可。pidgin的分组和QQ的 分组还不太一样, 所以可能拖入的组在QQ中并不存在, 所以此时会被归到默认的 好友 分组.

查看历史好友申请

pidgin-lwqq 将所有的好友申请都储存到系统日志中的, 可以在pidgin主界面的 工具- 系统日志 中查看。

高级

hash function

因为webqq经常更改hash验证,使得依靠编译的pidgin-lwqq不得不经常升级。为了以后的 方便,从某一个版本开始就集成了本地js引擎(mozjs, 即大名鼎鼎的spider monkey),直 接通过解析js来完成hash函数的计算。

Note

需要编译的时候开启 libmozjs 的 支持,检查是否编译的时候开启了mozjs,可以在pidgin的`关于pidgin-lwqq`对话框中 查看

首先会读取 ~/.config/lwqq/hash.js 文件来计算。如果不存在该文件或者该文件的 计算出来的hash导致了服务器返回的50号错误,则会从 http:https://pidginlwqq.sinaapp.com/hash.js 下载 hash.js 这个网站是我设置的,并且 只有我自己有更新权限,所以上面的内容可以认为是安全的。

如果webqq再次更新了hash,则我会尽量早些将新的hash.js放在上面,所有pidgin-lwqq用 户则可以不必重新编译,就能够更新hash.js了。

如果一些时候我不能来得及更新,可以通过设置数据库来指定一个第三方的hash.js发布页 。我相信未来会有人能够维护一些发布页的。可能需要google上搜索一下:

sqlite3 ~/.config/lwqq/[qq].db

  delete from pairs where key="hash.js";
  insert into pairs (key,value) values ("hash.js","[url]");

则指定了新的发布页,下次启动则会从此处下载js.

如果依然计算错误,则提示 Hash Failed ...... 的错误消息。

因为这个功能实际上是把安全的封闭环境开放了出来,所以可能会受到不法分子的利用, 发布带有危险的hash.js发布页。所以指定第三方发布页需要自己注意,不要添加来路不明 的第三方发布页。出现任何安全问题都自己负责!!当然,对于自带的发布页可以放心使 用,我不会无聊地放一些危险的js上去,另外也可以直接从浏览器中浏览。

Tip

不过事实上证明我当年想复杂了. 事实上都没人用database的hash设置方法.

后来hash不怎么变了, 又在某一个版本中, 改进了该机制, 从js转化而来的C函数中轮询, 就是拿几个默认的hash去试, 如果返回50错误则换下一个hash函数. 如果试出来的则保存, 下次直接用. 但如果编译时有mozjs则同时也尝试从js文件中去计算hash.

因此这个时候 mozjs 已经成一个可选依赖了.

encryption.js

不知道什么时候, WebQQ 登录时密码加密方法变复杂了, 复杂到完全看不懂, 这个时候就 只有再次借助mozjs的神力, 从官网上找到原始js, 并抽取其中加密部分, 做成了这个 encryption.js, 在每次登录的时候交由它来算密码加密.

因此这时 mozjs 又成了一个必选依赖了.

upload server

webqq不能发送图片和文件已经不是一天两天的事情了, 为了解决这个长期的问题, 在 0.6.0版本加入了一个全新的内容扩展的功能,从而很好的解决了该问题。

内容扩展(Message Content Extension)是一个普通的文本消息,只有pidgin-lwqq自己能 够解析,而不能解析的就原样显示。其格式如下:

:field:`param`[`param` ...]

现在定义的参数最多为5个。熟悉rst格式的应该比较熟悉,比如最常用的图片和文件的扩展:

:img:`url`
:file:`url``name``size`

现在就可以将这个消息发送给对方,如果对方是pidgin-lwqq,就能自动下载url去显示图 片等等。如果对方是pc qq,那看到了url之后用户也会本能的点开它。从而看到图片。

于是,结合上传服务器,整个过程如下:

1. pidgin上传图片/文件到自定义服务器
2. 服务器返回url地址
3. lwqq格式化好内容扩展发送给对方
4. pidgin收到内容扩展,然后解析
5. 下载图片并显示

上传服务器地址可以自由选择,为了一个安全性的考虑,还可以使用源码包里面的server 目录,自己搭建一个服务器[#]_ 。分为图片服务器,默认值是 img.vim-cn.com , 另外一个可选的SAE服务器是 http:https://pidginlwqq.sinaapp.com/images.php (我搭的)。向服务器发送POST消息,其格式是:

curl -F 'name=@file' -F 'user=qqnumber' url

多了一个user是为了对于自定义服务器进行一些区分。

文件服务器是 http:https://pidginlwqq.sinaapp.com/images.php ,因为 p.vim-cn.com 无法 发送二进制文件。其发送格式是同图片服务器一样的。

[1] 若搭建服务器,可以考虑使用Sina App Engine或者虚拟主机,现在虚拟主机十分 便宜的说,一般一年便宜的有40元钱的。免费的也行,不过安全性感觉不怎么好。另外 虚拟主机可以用来搭建goagent的服务翻墙,很爽的说。

make SAE server

  1. 首先再SAE中申请账户, 创建一个应用

  2. 然后将源码目录中的server/sae上传上去

  3. 然后在服务管理中创建一个Storage, 取名叫lwqqbed, 设置如图

    images/storage_setting.png
  4. 可以用curl测试一下搭建是否成功.

  5. 最后在pidgin中,将图片服务器和文件服务器都设置成新地址,就可以了.