# Tencent QQ (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

## 官方版本

官方版本已经可用。要使用官方版本，安装 linuxqqAUR。

注意： 官方版本提供的是普通 QQ，TIM 没有官方版本。如果要使用 TIM，请使用 wine 方案。
注意： 官方版本功能不全，界面简陋，如果需要使用缺失的功能或更好看的界面，请使用 wine 方案。

9.3.9的强制更新会导致wine-qq自动更新。

## 虚拟机

您可以在虚拟机中运行一个完整的 Windows 系统，并在此中运行 QQ。相比于其他的方案，这种方案出错的几率是最小的，缺点是占用的资源较多。

提示：

- 根据许可条款，在每个虚拟设备上运行 Windows 都需要单独的授权。但您可以选择使用微软提供的虚拟机专用系统（免费使用）。
- 如果您使用 VirtualBox，建议您开启无缝模式，这个功能能让您在宿主机的桌面下无缝操作虚拟机中的窗口。

## Wine

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

警告： Wine QQ/TIM 在平铺式窗口管理器下的样式可能会大规模失控，需要进行额外的配置。

### Deepin QQ/TIM

Deepin QQ/TIM 是 wine 中相对成熟的方案。几乎开箱即用，bug 较少。可从AUR(可以选择 ArchLinux CN 源)安装:

普通 QQ：com.qq.im.deepinAUR

TIM：deepin.com.qq.officeAUR[断开的链接：package not found] ，若想使用较新的可选： com.qq.tim.sparkAUR 。

或者可以安装 Light 版：deepin.com.qq.im.lightAUR 。

如果是 KDE/Plasma 桌面，见 Deepin-wine#Deepin-wine applications fails to start。

如果是 N 卡用户，可能需要用安装 lib32-nvidia-utils 才能使用。

### Crossover

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

### AppImage

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

注意： 由于 AppImage 不使用系统的 Wine，所以对 Wine 的调整可能无效，例如#HiDPI 支持。

### 清风老师的 Wine QQ 方案

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

注意： 安装成功之后要取消勾选 QQ 的自动更新，以免自动更新导致不可用。

### 手动 Wine 方案

#### QQ 轻聊版

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

安装 winetricks、wine。创建 `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="https://www.qq.com" \
     unattended="no"

    load_qqlight()
    {
        w_download https://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

安装 wine、wine-gecko 和 wine-mono。

执行 `winetricks riched20`，也可使用 `winecfg` 设置函数库顶替。

可能需要配置中文字体显示，见#字体配置。

安装 TIM。

##### 生成图标

安装的 TIM 可能没有在程序列表中生成图标。若要自行添加图标，新建 `tim.desktop` 文件，写入以下内容：

    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;

将 `tim.desktop` 移动到 `~/.local/share/applications` 或 `/usr/share/applications`文件夹下即可。

## 第三方客户端

注意： 请尽量使用含 wine 客户端在内的代码来自腾讯官方的客户端。第三方客户端尽管不存在官方客户端的一系列问题，但随时可能因为种种原因而失效。

### vscode-qq

vscode-qq 是一款 vscode 插件，让用户可以在 vscode 里使用基本的 qq 功能。

### Icalingua

Icalingua 包含一个使用 electron 和 vue 编写的第三方 qq 客户端，当前处于活跃开发状态。支持使用 SQLite（内置）、 MySQL（含 MariaDB）、 PostgreSQL 、 MongoDB 、 Redis 存储聊天记录。功能较官方版本更多，也没有 wine 带来的一系列问题。要使用 Icalingua，可安装 electron-qqAUR 包。

## 提示与技巧

### HiDPI 支持

在 HiDPI 显示器上，QQ/TIM 的界面可能会过小。在较新版本的 QQ/TIM 中已经加入了对 HiDPI 的支持。只需手动调整 Wine 的 DPI 即可。

执行 `winecfg`，在打开的窗口中切换到显示选项卡并调整 DPI。

注意： 如果您使用的不是默认的 Wine 容器（例如使用了deepin QQ/TIM），那么需要在执行 `winecfg` 时指定`WINEPREFIX` 变量。例如`env WINEPREFIX=$HOME/.deepinwine/Deepin-QQ deepin-wine winecfg` 或是 `env WINEPREFIX=$HOME/.deepinwine/Deepin-TIM deepin-wine winecfg`。

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

#### Awesome

Wine QQ/TM 在平铺式窗口管理器下可能会失控，需要进行一些配置。

下面的配置有这些作用：

- 将所有 TM 的窗口设置为浮动。

- 清除不需要的窗口边框、避免菜单弹出时焦点移动到菜单上。

- 在使用标签式会话窗口时，增加使用 Alt+数字来切换标签页的快捷键，需要安装 xdotool。

- 自动关闭弹出的新闻窗口。

将以下内容添加到 Awesome 配置：

    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

## 疑难解答

### 无法调用输入法

如果在 QQ 中使用输入法无反应，可考虑在 QQ 的启动脚本中配置有关环境变量，示例如下（将 fcitx 改成你用的输入法）。

    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    export XMODIFIERS=@im=fcitx

com.qq.im.deepinAUR等默认脚本中可能存在将输入法配置为 ibus 的行，如果你要使用其它输入法，需将这些行删去。

### 字体配置

如果中文的显示遇到问题，可以尝试先执行 `winetricks fakechinese`。

另请参阅字体和没有 fontconfig 支持的应用程序。

### 文件被占用

杀死 QQ 或 TIM 的进程即可。 在退出 QQ/TIM 之后，某些相关进程仍然在后台运行。也可以使用如下脚本来启动 QQ/TIM，它会首先查找已有的进程，杀死该进程后启动新的 QQ/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，稍作修改之后即可应用于 QQ。

### xfce4（xfwm4）下无法输入表情

打开设置管理器-窗口管理器微调-焦点，取消勾选激活焦点防窃取和遵照标准的 ICCCM 焦点提示即可。

原因是表情窗口获取焦点时会发生不兼容现象。

### 在非中文 locale 下无法输入中文

修改 `.desktop` 文件的 `Exec`，这个文件一般位于 `/usr/share/applications/` 或者 `~/.local/share/applications/`。

在 `Exec` 行中加入 `env LC_ALL=zh_CN.UTF-8`。 例如，原来的 `Exec` 为：

    Exec=".wine/drive_c/Program Files/QQ/Bin/QQ.exe"

则应改为：

    Exec=env LC_ALL=zh_CN.UTF-8 wine ".wine/drive_c/Program Files/QQ/Bin/QQ.exe"

### deepinwine方案在非中文 locale 下字体显示为黑框且能够调用输入法但是无法输入字符

首先查看是否安装有中文locale。在 `/etc/locale.gen` 中启用zh_CN.UTF-8 UTF-8(删除#符号)。而后运行命令 `locale-gen`。

安装了中文locale后，修改deepinwine的启动脚本，其位于 `/opt/deepinwine/tools/` 。其中有三个脚本，分别为 `run.sh`， `run_v2.sh`， `run_v3.sh`。将三个脚本中的

    WINE_CMD="deepin-wine"

都修改为

    WINE_CMD="LC_ALL=zh_CN.UTF-8 deepinwine"。

也可以根据对应deepinwine容器的启动脚本（一般路径为 `/usr/share/applications/*.desktop` ）中的Exec行确定要修改的脚本。

## 参阅

- openSUSE wiki
- Web 端的 QQ 群空间 当所使用 QQ 客户端不支持群空间时，可以此用该服务代替。
- IM QQ-QQ 手机版 移动端也未尝不也是一种代替方案。
- hillwoodroc/winetricks-zh hillwoodroc/winetricks-zh

Category:

- Instant messaging (简体中文)

Hidden category:

- Pages with broken package links