User:Kurobac/Tencent QQ

From ArchWiki
Jump to navigation Jump to search

QQ 是腾讯公司开发的即时通讯软件,为 ICQ 的仿制品,是中国最流行的 IM 软件。本页面列出了 Linux 下使用 QQ 的各种解决方案。

虚拟机

您可以在虚拟机中运行一个完整的 Windows 系统,并在此中运行 QQ。相比于其他的方案,这种方案出错的几率是最小的,而且不会受到 QQ 协议等不可控因素影响。缺点是占用的资源较多。

一般使用 VirtualBox 即可满足需求,也可以参考 Category:Hypervisors 选择其它的虚拟机程序。

提示:

Wine

Wine 是类 UNIX 系统下运行微软 Windows 程序的"兼容层",可以用它模拟 Windows 环境来运行 QQ/TIM。

警告:
  • 受 wine 上游的一个Bug 影响,官方仓库中提供的wine自3.8开始无法运行许多程序,包括 QQ 和 TIM。截止3.15-1版本此问题仍未修复。您可以将wine降级到3.7来绕过这个问题。也可以按照FS#58833,使用ABS修改编译参数之后重新编译安装wine
  • Wine QQ/TIM 在平铺式窗口管理器下的样式可能会大规模失控,需要进行额外的配置。

使用 Deepin QQ/TIM

Deepin QQ/TIM 是 wine 中相对成熟的方案。几乎开箱即用,bug 较少。

您可以安装deepin-qq-imAURdeepin-wine-timAUR,也可以从 ArchLinux CN 源 安装。

Crosover

可以使用 CrossOver 运行 QQ、TM2013 和 TIM。更多详情可以参阅CrossOver的兼容性列表

AppImage

AppImage 是一种把应用打包成单一文件的格式。您可以在[1]下载到封装好的 Wine QQ/TIM。只需要赋予可执行权限即可使用。由于 AppImage 格式附带了程序所需要的依赖,所以这种方式受系统中其他组件版本的影响最小。

其它 Wine 方案

QQ

您也可以使用清风老师 提供的 Wine QQ 方案。

注意:
  • 如果系统默认不是中文环境可能无法输入中文,解决方法是修改启动文件的Exec:
$HOME/.local/share/applications/wine-QQ.desktop
Exec=env LC_ALL=zh_CN.UTF-8 wine ".wine/drive_c/Program Files/QQ/Bin/QQ.exe"
  • 此方案只需要安装wine即可,安装其它的 Wine 库可能造成干扰。第一次启动的时候会自动下载安装Mono库。如果安装失败,可以首先删除$HOME/.wine并卸载所有 Wine 相关的包后重启系统,得到一个相对干净的环境再尝试按上面博客的步骤进行安装。
  • 安装成功之后要取消勾选 QQ 的自动更新,以免自动更新导致不可用。

QQ 轻聊版

注意: 此方案使用QQ轻聊版6.7,更高版本在当前wine版本需要额外的调整才能安装。

安装winetrickswine。创建 qqlight.verb 如下:

w_metadata qqlight apps \
 title="QQ Light" \
 publisher="Tencent" \
 year="2015" \
 media="download" \
 file1="QQ6.7Light.exe" \
 installed_exe1="$W_PROGRAMS_X86_WIN/Tencent/QQ/Bin/QQ.exe" \
 homepage="http://www.qq.com" \
 unattended="no"

load_qqlight()
{
    w_download http://dldir1.qq.com/qqfile/qq/QQ6.7Light/13466/QQ6.7Light.exe e1e1ff2bf6461c08047d0a01927a43c5a0746bdf

    if w_workaround_wine_bug 29636 "Installing native riched20 to work around crash bug"
    then
        w_call riched20
    fi

    if w_workaround_wine_bug 34566 "Installing native ctf to work around crash"
    then
        w_call msctf
    fi

    # Make sure chinese fonts are available
    w_call fakechinese

    # uses mfc42u.dll
    w_call mfc42

    cd "$W_CACHE/$W_PACKAGE"
    w_try "$WINE" "$file1"

    # fix crash after login
    mkdir -p ~/.local/share/wineprefixes/qqlight/drive_c/users/$LOGNAME/Application\ Data/Tencent/QQ/Misc/com.tencent.wireless/SDK
    chmod 000 ~/.local/share/wineprefixes/qqlight/drive_c/users/$LOGNAME/Application\ Data/Tencent/QQ/Misc/com.tencent.wireless/SDK

    w_declare_exe "$W_PROGRAMS_X86_WIN\\Tencent\\QQ\\Bin" QQ.exe
}

运行 winetricks 安装:

$ winetricks qqlight.verb

安装完成后通过 wineconsole 启动:

$ wineconsole .wine/drive_c/run-qqlight.bat

TIM

安装前的准备

打开winecfg,在函数库一项中的“新增函数库顶替”中选择添加riched20,也可也执行以下命令添加:

$ winetricks riched20
  • 中文字体显示

可以提供windows字体Font configuration#Applications without fontconfig support或使用linux的字体,方法如下:

警告: 经测试,使用文泉驿和思源黑体,均出现部分位置文字内容无法显示的情况(但影响很小)。

新建一个reg文件,例如名为wine-fonts.reg,写入如下内容:

REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Lucida Sans Unicode"="wqy-microhei.ttc"
"Microsoft Sans Serif"="wqy-microhei.ttc"
"Microsoft YaHei"="wqy-microhei.ttc"
"MS Sans Serif"="wqy-microhei.ttc"
"Tahoma"="wqy-microhei.ttc" 
"Tahoma Bold"="wqy-microhei.ttc"
"SimSun"="wqy-microhei.ttc"
"Arial"="wqy-microhei.ttc"
"Arial Black"="wqy-microhei.ttc"
"宋体"="wqy-microhei.ttc"
"新細明體"="wqy-microhei.ttc"

保存后运行:

 $ wine regedit

打开regedit图形界面,点击注册表-导入注册表文件,然后选择wine-fonts.reg即可。

安装及配置
  • 安装tim

使用wine安装tim。可以使用右键菜单中的“运行程”序运行tim的exe文件进行安装,也可以使用命令行:

 $ wine tim.exe
  • 增加启动菜单项

安装的tim可能没有在程序列表中生成图标。自行添加图标,新建一个名为tim.desktop的文件,写入以下内容:

 [Desktop Entry]
 Encoding=UTF-8
 Version=1
 Name=TIM
 Comment=Tencent TIM
 Exec=wine '~/.wine/drive_c/Program Files/Tencent/TIM/Bin/TIM.exe'
 Icon=~/.wine/drive_c/Program Files/Tencent/TIM/TIMUninst.ico
 Terminal=false
 Type=Application
 Categories=Network;


其中comment是程序介绍,Exec是执行命令,Icon是要显示的图表,可以根据实际情况进行修改。(自带的ico图表不太清晰,可下载该图标文件更换) 将tim.desktop移动到~/.local/share/applications或/usr/share/applications文件夹下即可。

注意: desktop entry 有时无法使用,需要将里面的相对路径改成绝对路径。
相关问题解决
  • 文件被占用

打开进程管理器,杀死 TIM.exe 进程即可。 原因是退出tim后,某些相关进程仍然在后台运行。也可以使用如下脚本来启动 TIM,它会首先查找已有的 TIM.exe 进程,杀死该进程后启动新的 TIM:

start-tim.sh
#!/bin/sh
# script to start TIM
# kill TIM before start TIM
for pid in `pgrep TIM.exe`; do
	if [ -n ${pid} ]; then
		kill ${pid}
	fi
done
# start TIM
wine '~/.wine/drive_c/Program Files/Tencent/TIM/Bin/TIM.exe'

然后将上文中的 tim.desktop 中的 Exec 的值改为 start-tim.sh 即可.

  • xfce4(xfwm4)下无法输入表情

打开设置管理器-窗口管理器微调-焦点,取消勾选激活焦点防窃取和遵照标准的ICCCM焦点提示即可。 原因是表情窗口获取焦点时会发生不兼容现象。

平铺式窗口管理器下的配置

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)

一个完整的 Awesome 配置

i3

原生配置下,启动 qq2012 时会自动最大化,且边框不美观,可在 i3 (简体中文)config 设置如下两条规则以改善:

for_window [instance="QQ.exe"] floating enable
for_window [instance="QQ.exe"] border none

基于 SmartQQ

SmartQQ

SmartQQ 是腾讯推出的网页端 QQ,它高度模仿微信风格,功能欠完善,高度依赖网络环境,而且需要通过手机客户端扫描二维码登录。

将 Google Chrome 的把网站做为应用程序与其桌面提醒功能整合,也可以打造一个实用的 QQ 软件:

安装并运行 Chromium (简体中文)或者火狐浏览器firefox,并打开 SmartQQ,需要手机QQ客户端扫描二维码登陆,功能少。

weechat-webqq

提示: 也可选择其它支持IRC协议的聊天客户端。

WeeChat 可使用的 QQ 插件脚本,使用 perl语言开发的 Mojo-Webqq库,基于 smartqq 协议。 源码脚本可访问 weechat-webqq 获取。

SmartIM

SmartIM 是一个用java写的,包含简单的IM API封装的小程序,支持SmartQQ、微信。不过遗憾的是仍然需要扫描二维码。

不支持图片,视频,表情和语音,不过支持依赖第三方服务器的文件传输。

只需将jar包下载下来,并安装OpenJDK,就可以在终端通过“java -jar”的方式直接运行了。

参阅