Difference between revisions of "Tencent QQ (简体中文)"
(→Wine TM) |
(为 TM 的 Awesome 配置) |
||
Line 141: | Line 141: | ||
关于 [[CrossOver]] 版本的 TM2013 相关信息参见[http://www.codeweavers.com/support/forums/general/?t=37;msg=151682 此处]。除了更加稳定之外,和自行 Wine 的版本没有明显区别。 | 关于 [[CrossOver]] 版本的 TM2013 相关信息参见[http://www.codeweavers.com/support/forums/general/?t=37;msg=151682 此处]。除了更加稳定之外,和自行 Wine 的版本没有明显区别。 | ||
+ | |||
+ | ===Awesome 下的配置=== | ||
+ | Wine QQ/TM 在平铺式窗口管理器下可能不太听话。以下是一些 [[Awesome]] 配置,其作用为: | ||
+ | |||
+ | * 将所有 TM 的窗口设置为浮动 | ||
+ | * 清除不需要的窗口边框、避免菜单弹出时焦点移动到菜单上 | ||
+ | * 在使用标签式会话窗口时,增加[http://lilydjwg.is-programmer.com/2013/11/15/switch-tabs-with-alt-num-in-wined-tm-exe-in-awesome.41729.html 使用 Alt+数字来切换标签页]的快捷键(需要安装 [[xdotool]]) | ||
+ | * 自动关闭弹出的新闻窗口 | ||
+ | |||
+ | function myfocus_filter(c) | ||
+ | if awful.client.focus.filter(c) then | ||
+ | -- This works with tooltips and some popup-menus | ||
+ | if c.class == 'Wine' and c.above == true then | ||
+ | return nil | ||
+ | elseif c.class == 'Wine' | ||
+ | and c.type == 'dialog' | ||
+ | and c.skip_taskbar == true | ||
+ | and c.size_hints.max_width and c.size_hints.max_width < 160 | ||
+ | then | ||
+ | -- for popup item menus of Photoshop CS5 | ||
+ | return nil | ||
+ | else | ||
+ | return c | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | awful.rules.rules = { | ||
+ | -- All clients will match this rule. | ||
+ | { | ||
+ | rule = { }, | ||
+ | properties = { | ||
+ | -- 这里使用我们自己的函数 | ||
+ | focus = myfocus_filter, | ||
+ | -- 以下是默认的部分 | ||
+ | border_width = beautiful.border_width, | ||
+ | border_color = beautiful.border_normal, | ||
+ | keys = clientkeys, | ||
+ | buttons = clientbuttons, | ||
+ | } | ||
+ | }, { | ||
+ | rule_any = { | ||
+ | instance = {'TM.exe', 'QQ.exe'}, | ||
+ | }, | ||
+ | properties = { | ||
+ | -- This, together with myfocus_filter, make the popup menus flicker taskbars less | ||
+ | -- Non-focusable menus may cause TM2013preview1 to not highlight menu | ||
+ | -- items on hover and crash. | ||
+ | focusable = true, | ||
+ | floating = true, | ||
+ | -- 去掉边框 | ||
+ | border_width = 0, | ||
+ | } | ||
+ | }, { | ||
+ | -- 其它规则 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | alt_switch_keys = awful.util.table.join( | ||
+ | -- it's easier for a vimer to manage this than figuring out a nice way to loop and concat | ||
+ | awful.key({'Mod1'}, 1, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+1') end), | ||
+ | awful.key({'Mod1'}, 2, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+2') end), | ||
+ | awful.key({'Mod1'}, 3, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+3') end), | ||
+ | awful.key({'Mod1'}, 4, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+4') end), | ||
+ | awful.key({'Mod1'}, 5, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+5') end), | ||
+ | awful.key({'Mod1'}, 6, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+6') end), | ||
+ | awful.key({'Mod1'}, 7, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+7') end), | ||
+ | awful.key({'Mod1'}, 8, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+8') end), | ||
+ | awful.key({'Mod1'}, 9, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+9') end) | ||
+ | ) | ||
+ | function bind_alt_switch_tab_keys(client) | ||
+ | client:keys(awful.util.table.join(client:keys(), alt_switch_keys)) | ||
+ | end -- }}} | ||
+ | |||
+ | client.connect_signal("manage", function (c, startup) | ||
+ | -- 其它配置 | ||
+ | |||
+ | if c.instance == 'TM.exe' then | ||
+ | -- 添加 Alt+n 支持 | ||
+ | bind_alt_switch_tab_keys(c) | ||
+ | -- 关闭各类新闻通知小窗口 | ||
+ | if c.name and c.name:match('^腾讯') and c.above then | ||
+ | c:kill() | ||
+ | end | ||
+ | end | ||
+ | |||
+ | -- 其它配置 | ||
+ | end) | ||
==参阅== | ==参阅== | ||
[https://zh.opensuse.org/SDB:QQ openSUSE wiki 的 QQ 条目] | [https://zh.opensuse.org/SDB:QQ openSUSE wiki 的 QQ 条目] |
Revision as of 07:38, 17 November 2013
QQ 是腾讯公司开发的即时通讯软件,为 ICQ 的仿制品,是中国最流行的 IM 软件。本页面列出了 Linux 下使用 QQ 的各种解决方案。
Contents
基于 WebQQ
WebQQ
WebQQ 是腾讯推出的网页端 QQ,具有良好的跨平台性,目前功能也已大大增强,除了支持基本的聊天功能外,也已支持文件传送、语音视频、贴图、桌面提醒、管理好友等多项功能,还内嵌了QQ云输入法等实用工具,使用非常方便。但高度集成其他众多额外应用,以致更像 Web 操作系统似而不是 Web App,自然有大量无谓的资源占用,且 UI 体验不佳。
将 Google Chrome 的把网站做为应用程序与其桌面提醒功能整合,也可以打造一个实用的 QQ 软件:
- 安装并运行 Chromium (简体中文),并打开 WebQQ
- 点击 Chrome 右上角的扳子->工具->创建应用程序快捷方式...,即可创建一个 WebQQ 的快捷方式
- 从创建的快捷方式打开 WebQQ,会发现它是一个独立的窗口,此时可以登录 QQ
- 通过 Q+ 左侧的设置图标进入“系统设置”,打开“QQ提醒”,选上“桌面通知”。(如果已被选择,最好先取消选中,再选中)
- 此时界面上方可能会出现 Chrome 询问是否允许 WebQQ 弹出桌面通知的提示,点“允许”即可
- 至此,WebQQ 在独立的窗口中运行,来消息时还会有桌面提示
SmartQQ
腾讯于2013年9月推出的全新网页端 Smart QQ,UI 高度模仿微信风格,功能欠完善,且高度依赖网络环境。
官方 Adobe Air 客户端
腾讯官方提供的 WebQQ 客户端,基于 Adobe Air 平台。
在 Arch User Repository (简体中文) 安装 webqqAUR 即可。
PyWebQQ (python-webqq)
PyWebQQ(python-webqq)是用 python-webkit 包装而成的 WebQQ 桌面版,均可以访问 Smart QQ 或 WebQQ。由于使用单独的浏览器内核,可以避免长期挂机拖慢浏览器。并且提供了简单的桌面整合,能最小化到托盘,支持消息提醒。
在 Arch User Repository (简体中文) 安装 python-webqq-svnAUR 即可。
pidgin-lwqq
pidgin-lwqq 是一个 Pidgin (简体中文) 插件,实现了 WebQQ 协议支持;目前处于良好的维护状态,帮助文档非常详细;功能较为完善,包括文件传输,但仍旧无法视频语音。Official Repositories (简体中文)提供了 pidgin-lwqq 软件包。
安装完后,在 Pidgin 新建账号时,协议直接选择 webqq,并填入必要的帐号和密码,最后登录即可。
此外,该插件也支持 Empathy。
gtkqq
gtkqq是基于 WebQQ 协议的QQ客户端,基于GTK+开发。界面简洁清爽,功能比较完善。但目前还出于开发阶段,易崩溃。
在 Arch User Repository (简体中文) 安装 gtkqq-gitAUR 即可。
qtqq
用 qt (简体中文) 开发的 qq 客户端,基于 webqq3.0 协议。
在 Arch User Repository (简体中文) 安装 qtqq-gitAUR 即可。
独立开发
libqq
libqq是 Pidgin 下的QQ协议插件,采用2010版协议改写。目前已比较稳定,但开发貌似停滞不前。
AUR:libqq-svnAUR、libqq-pidgin-svnAUR(貌似一样)
优点:基于功能强大的Pidgin,无需安装第三方软件,桌面整合好,节省资源。
缺点:仍有稳定性问题。
官方版本
腾讯在 2008 年底发布了 QQ for Linux 1.0 Preview 3,功能如下:
- 支持和好友传送文件
- 支持和好友/群发送图片
- 支持群里截屏并传送截图
- 聊天设置中,已经可以设定按回车键发送
在 Arch User Repository (简体中文) 安装 linuxqqAUR 即可。
Wine 模拟
Wine (简体中文) 是类 UNIX 系统下运行微软 Windows 程序的"兼容层",可以用它模拟 QQ/TM。
Wine QQ
目前最成熟的 Wine 模拟方案之一为 LongeneTeam 提供的 wine qq 2012 方案。在 Arch User Repository (简体中文) 直接安装现成的 wine-qqAUR 或 wineqqAUR 即可,后者较为新,推荐。
也可以直接使用原生 Wine 模拟,但此方法可行性一般,且稳定性非常差,不推荐。方法如下:
首先,安装winetricks、wine。
使用winetricks
安装依赖:
$ winetricks msxml3 gdiplus riched20 riched30 ie6 vcr un6 vcrun2005sp1 flash wenquanyi
从QQ官方网站下载合适版本的QQ。然后通过Wine安装:
$ wine qq2010.exe
Wine TM
对于仍然能用的 TM 版本(TM2009Beta3.4、TM2013preview1),使用以下方案可以成功:
$ winetricks riched20 ie6 mfc42
然后运行 winecfg,切换到「函数库」选项卡,在「已有的函数库顶替」中编辑「urlmon.dll」项,设置其使用「内建」版本。
将 ie6 替换成 ie7 亦可。可能需要安装相关字体支持,比如安装 simsun.ttc 字体。
在 Wine 1.7.6 之后,登录后片刻状态自动变成离开的问题已经修复。但是此离开状态检测是在 Wine 环境内部的(和全局快捷键一样),也就是如果在设定的时间之后没有用户操作传递给此 Wine 环境中的任意程序,即使用户在 Linux 上做其它事情 TM 仍然会转变成离开状态。因此建议在「在线状态」设置中禁用自动将状态切换为「离开」的功能。
已知可以正常使用的功能:
- 基本聊天
- 截图、粘贴剪贴板中的图像
- 文件传输
- 群共享
- 远程协助
已知问题:
- GIF 动画显示不正常
- 输入法光标跟随无效。输入法的提示窗口总是位于输入框下方
- 截图仅能截取一个屏幕,在双显示器时会有问题。快捷键仅在 Wine 程序拥有焦点时可以工作
- 偶尔可能会假死或者崩溃(在 CrossOver 版本中非常少见)
- 在 Awesome 下(特别是双显示器的扩展屏上时),鼠标拖动窗口上边缘可能导致窗口乱跑
- 安装界面部分文本在点击后、鼠标经过时变为白色
- 托盘右键菜单弹出后,点击 Wine 之外的程序它并不会自动消失
Wine TM2013 的 Wine 环境大小为 227.8MiB,7z 压缩后为 67.1MiB。
CrossOver TM2013
关于 CrossOver 版本的 TM2013 相关信息参见此处。除了更加稳定之外,和自行 Wine 的版本没有明显区别。
Awesome 下的配置
Wine QQ/TM 在平铺式窗口管理器下可能不太听话。以下是一些 Awesome 配置,其作用为:
- 将所有 TM 的窗口设置为浮动
- 清除不需要的窗口边框、避免菜单弹出时焦点移动到菜单上
- 在使用标签式会话窗口时,增加使用 Alt+数字来切换标签页的快捷键(需要安装 xdotool)
- 自动关闭弹出的新闻窗口
function myfocus_filter(c) if awful.client.focus.filter(c) then -- This works with tooltips and some popup-menus if c.class == 'Wine' and c.above == true then return nil elseif c.class == 'Wine' and c.type == 'dialog' and c.skip_taskbar == true and c.size_hints.max_width and c.size_hints.max_width < 160 then -- for popup item menus of Photoshop CS5 return nil else return c end end end awful.rules.rules = { -- All clients will match this rule. { rule = { }, properties = { -- 这里使用我们自己的函数 focus = myfocus_filter, -- 以下是默认的部分 border_width = beautiful.border_width, border_color = beautiful.border_normal, keys = clientkeys, buttons = clientbuttons, } }, { rule_any = { instance = {'TM.exe', 'QQ.exe'}, }, properties = { -- This, together with myfocus_filter, make the popup menus flicker taskbars less -- Non-focusable menus may cause TM2013preview1 to not highlight menu -- items on hover and crash. focusable = true, floating = true, -- 去掉边框 border_width = 0, } }, { -- 其它规则 } } alt_switch_keys = awful.util.table.join( -- it's easier for a vimer to manage this than figuring out a nice way to loop and concat awful.key({'Mod1'}, 1, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+1') end), awful.key({'Mod1'}, 2, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+2') end), awful.key({'Mod1'}, 3, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+3') end), awful.key({'Mod1'}, 4, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+4') end), awful.key({'Mod1'}, 5, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+5') end), awful.key({'Mod1'}, 6, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+6') end), awful.key({'Mod1'}, 7, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+7') end), awful.key({'Mod1'}, 8, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+8') end), awful.key({'Mod1'}, 9, function(c) awful.util.spawn('xdotool key --window ' .. c.window .. ' ctrl+9') end) ) function bind_alt_switch_tab_keys(client) client:keys(awful.util.table.join(client:keys(), alt_switch_keys)) end -- }}} client.connect_signal("manage", function (c, startup) -- 其它配置 if c.instance == 'TM.exe' then -- 添加 Alt+n 支持 bind_alt_switch_tab_keys(c) -- 关闭各类新闻通知小窗口 if c.name and c.name:match('^腾讯') and c.above then c:kill() end end -- 其它配置 end)