騰訊 QQ - Arch Linux 中文维基

跳至內容

# 騰訊 QQ

出自 Arch Linux 中文维基

QQ 是騰訊公司開發的即時通訊軟體，為 ICQ 的仿製品，是中國最流行的 IM 軟體之一。本頁面列出了在 Arch Linux 上使用 QQ 的各種解決方案。

## 原生 Linux 版本

使用 Electron 技術的 Linux QQ 對應的軟體包為 linuxqqAUR。

注意：官方版本提供的是普通 QQ，TIM 沒有官方版本。如果要使用 TIM，請使用 wine 方案。

### 帶有 bubblewrap 沙盒的版本

此外還有 linuxqq-nt-bwrapAUR 可選，帶有 bubblewrap 沙盒和一些調整。

- 要傳遞給 bwrap 的自定義參數應該寫在 `~/.config/qq-bwrap-flags.conf`，可在此文件中設置自定義掛載目錄。
- 要傳遞給 electron 的自定義參數應該寫在 `~/.config/qq-electron-flags.conf`。

## 虛擬機

您可以在虛擬機中運行一個完整的 Windows 系統，並在此中運行 QQ。相比於其他的方案，這種方案出錯的機率是最小的，缺點是占用的資源較多。

提示：

- 根據許可條款，在每個虛擬設備上運行 Windows 都需要單獨的授權。
- 如果您使用 VirtualBox，建議您開啟無縫模式，這個功能能讓您在宿主機的桌面下無縫操作虛擬機中的窗口。

## Wine

本文或本節內容已經過時。

原因： 在qqlinux原生版本更新之後大部分wine-qq上游並沒有繼續維護了,基本上都因為qq版本過舊無法運行。 (在Talk:騰訊 QQ討論)

Wine 是類 UNIX 系統下運行微軟 Windows 程序的"兼容層"，可以用它模擬 Windows 環境來運行 QQ/TIM。

警告：Wine QQ/TIM 在平鋪式窗口管理器下的樣式可能會大規模失控，需要進行額外的配置。

### Ukylin Wine（優麒麟Wine）

ukylin-wineAUR 是基於 Wine 開發的一款軟體，用於在 Linux 系統上兼容運行 Windows 軟體。其對微信和QQ/TIM進行了大量的修復以確保軟體穩定。如果您在使用 TIM 時遇到了不停的卡頓（包括但不限於群詳情頁、右鍵菜單和表情面板），不妨嘗試使用 ukylin-wine 替換其他版本的 wine 來啟動 TIM。

例：替換 Spark-TIM 啟動腳本中的 APPRUN_CMD

    /opt/apps/com.qq.tim.spark/files/run.sh:14

    export APPRUN_CMD="ukylin-wine"

### Crossover

可以使用 CrossOver 運行 QQ 和 TIM。更多詳情可以參閱 CrossOver 的兼容性列表。

### 手動 Wine 方案

#### 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 在內的方案或來自騰訊官方的客戶端。第三方客戶端儘管不存在官方客戶端的一系列問題，但隨時可能因為種種原因而失效。

### Icalingua++

Icalingua++ 是 Icalingua 的分支，為已經刪除的 Icalingua 提供有限的更新。此項目希望為 Linux 打造一個會話前端框架，通過實現 Adapter 後端接口來適配各種聊天平台。目前已經擁有基於 oicq 以及 Icalingua 自有協議的後端。

要使用 Icalingua++ ，可以從 AUR 源安裝icalingua++AUR。

## 疑難解答

### 原生版本(Linux QQ)

#### 無法使用通知功能

如果在 QQ 中無法使用桌面環境的通知功能，可以嘗試安裝XDG桌面門戶中對應的桌面後端。也可能是在設置-消息通知中關閉了通知，但Linux版本沒有此設置，需要在Windows或macOS上的QQ中修改。

#### 打開窗口/設置/接受消息閃退

你可以嘗試以下命令:

`sudo rm -rf ~/.config/QQ/crash_files/ && sudo chattr +i ~/.config/QQ/crash_files/`

#### 每次登錄都需要重新掃碼

如果即使在登錄時勾選了無需在手機端確認，下次登錄時還需要掃碼，這可能是因為其是根據網卡mac地址來判斷是否為同一設備，你可以嘗試禁用虛擬網卡(例如:Docker網卡,VMWare網卡)來解決這個問題。

### wine版

#### 無法調用輸入法

如果在 QQ 中使用輸入法無反應，可考慮在 QQ 的啟動腳本中配置有關環境變量，示例如下（將 fcitx 改成你用的輸入法）。

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

com.qq.im.deepinAUR[損壞的連結：package not found]等默認腳本中可能存在將輸入法配置為 ibus 的行，如果你要使用其它輸入法，需將這些行刪去。

#### 字體配置

如果中文的顯示遇到問題，可以嘗試先執行 `winetricks fakechinese`。

另請參閱字體和字體配置#不支持 Fontconfig 的程序。

##### 字體替換不完全/顯示宋體發虛

先使用 fakechinese 替換完字體後，再參考 https://bbs.deepin.org/zh/post/213530 和 https://bbs.deepin.org/post/213153 使用偽裝的宋體。

#### 文件被占用

殺死 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行確定要修改的腳本。

#### 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

原生配置下，啟動 `qq` 時會自動最大化，且邊框不美觀，可在 i3 的 `config` 設置如下兩條規則以改善：

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

在i3status中，tim托盤可能無法正常顯示。推薦您使用i3status-rust作為替代。可以安裝包：

    i3status-rust-gitAUR
    i3status-rust包

## 參閱

- openSUSE wiki
- Web 端的 QQ 群空間當所使用 QQ 客戶端不支持群空間時，可以此用該服務代替。
- IM QQ-QQ 手機版移動端也未嘗不也是一種代替方案。
- hillwoodroc/winetricks-zh hillwoodroc/winetricks-zh

分類：​

- 即時通信
- 使用「模板:過時」標記的頁面或章節
- 包含損壞的軟體包連結的頁面

騰訊 QQ
新增話題