QQ 是騰訊公司開發的即時通訊軟體,為 ICQ 的仿製品,是中國最流行的 IM 軟體。本頁面列出了 Arch Linux 使用 QQ 的各種解決方案。
官方版本
使用 Electron 技術的 Linux QQ 3.1已經正式發布,現已面向全體用戶開放,對應的軟體包為 linuxqqAUR。
虛擬機
您可以在虛擬機中運行一個完整的 Windows 系統,並在此中運行 QQ。相比於其他的方案,這種方案出錯的機率是最小的,缺點是占用的資源較多。
- 根據許可條款,在每個虛擬設備上運行 Windows 都需要單獨的授權。但您可以選擇使用微軟提供的虛擬機專用系統(免費使用)。
- 如果您使用 VirtualBox,建議您開啟無縫模式,這個功能能讓您在宿主機的桌面下無縫操作虛擬機中的窗口。
Wine
Wine 是類 UNIX 系統下運行微軟 Windows 程序的"兼容層",可以用它模擬 Windows 環境來運行 QQ/TIM。
Deepin QQ/TIM
Deepin QQ/TIM 是 wine 中相對成熟的方案。幾乎開箱即用,bug 較少。可從AUR安裝:
普通 QQ:deepin-wine-qqAUR
TIM: com.qq.tim.sparkAUR或deepin-wine-timAUR 。
或者可以安裝 Light 版:deepin.com.qq.im.lightAUR 。
如果是 KDE/Plasma 桌面,見 Deepin-wine#Deepin-wine applications fails to start。
如果是 N 卡用戶,並且原來使用了nvidia-utils包即是nvidia(包)用戶,使用了官方閉源驅動,可能需要用安裝 lib32-nvidia-utils包 才能使用。
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、TM2013 和 TIM。更多詳情可以參閱 CrossOver 的兼容性列表。
AppImage
AppImage 是一種把應用打包成單一文件的格式。您可以在sourceforge下載到封裝好的 Wine QQ/TIM。只需要賦予可執行權限即可使用。由於 AppImage 格式附帶了程序所需要的依賴,所以這種方式受系統中其他組件版本的影響最小。
清風老師的 Wine QQ 方案
您也可以使用清風老師提供的 Wine QQ 方案。
手動 Wine 方案
QQ 輕聊版
安裝 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
文件夾下即可。
第三方客戶端
vscode-qq
vscode-qq 是一款 vscode 插件,讓用戶可以在 vscode 裡使用基本的 qq 功能。
Icalingua++
Icalingua++ 是 Icalingua 的分支,為已經刪除的 Icalingua 提供有限的更新。此項目希望為 Linux 打造一個會話前端框架,通過實現 Adapter 後端接口來適配各種聊天平台。目前已經擁有基於 oicq 以及 Icalingua 自有協議的後端。
要使用 Icalingua++ ,可以從 AUR 源安裝icalingua++AUR。
提示與技巧
HiDPI 支持
在 HiDPI 顯示器上,QQ/TIM 的界面可能會過小。在較新版本的 QQ/TIM 中已經加入了對 HiDPI 的支持。只需手動調整 Wine 的 DPI 即可。
執行 winecfg
,在打開的窗口中切換到顯示選項卡並調整 DPI。
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
在i3status中,tim托盤可能無法正常顯示。推薦您使用i3status-rust作為替代。可以安裝包:
i3status-rust-gitAUR i3status-rust包
疑難解答
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
。
另請參閱字體和Font configuration#無視 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行確定要修改的腳本。
參閱
- openSUSE wiki
- Web 端的 QQ 群空間 當所使用 QQ 客戶端不支持群空間時,可以此用該服務代替。
- IM QQ-QQ 手機版 移動端也未嘗不也是一種代替方案。
- hillwoodroc/winetricks-zh hillwoodroc/winetricks-zh