QQ 是騰訊公司開發的即時通訊軟體,為 ICQ 的仿製品,是中國最流行的 IM 軟體。本頁面列出了 Arch Linux 使用 QQ 的各種解決方案。
官方版本
使用 Electron 技術的 Linux QQ 已經正式發布,現已面向全體用戶開放,對應的軟體包為 linuxqqAUR。
虛擬機
您可以在虛擬機中運行一個完整的 Windows 系統,並在此中運行 QQ。相比於其他的方案,這種方案出錯的機率是最小的,缺點是占用的資源較多。
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 。
如果是 KDE/Plasma 桌面,見 Deepin-wine#Deepin-wine應用程式啟動失敗。
如果是 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 和 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
文件夾下即可。
第三方客戶端
Icalingua++
Icalingua++ 是 Icalingua 的分支,為已經刪除的 Icalingua 提供有限的更新。此項目希望為 Linux 打造一個會話前端框架,通過實現 Adapter 後端接口來適配各種聊天平台。目前已經擁有基於 oicq 以及 Icalingua 自有協議的後端。
要使用 Icalingua++ ,可以從 AUR 源安裝icalingua++AUR。
疑難解答
原生版本(Linux QQ)
無法使用通知功能
如果在 QQ 中無法使用桌面環境的通知功能,可以嘗試安裝XDG桌面門戶中對應的桌面後端。
打開窗口/設置/接受消息閃退
你可以嘗試以下命令:
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
。
另請參閱字體和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行確定要修改的腳本。
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
原生配置下,啟動 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