騰訊QQ

出自 Arch Linux 中文维基

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

官方版本[編輯 | 編輯原始碼]

使用 Electron 技術的 Linux QQ 已經正式發布,現已面向全體用戶開放,對應的軟體包為 linuxqqAUR

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

虛擬機[編輯 | 編輯原始碼]

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

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

Wine[編輯 | 編輯原始碼]

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

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

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

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

Deepin QQ/TIM[編輯 | 編輯原始碼]

Deepin QQ/TIM 是 wine 中相對成熟的方案。幾乎開箱即用,bug 較少。可從AUR安裝:

普通 QQ:deepin-wine-qqAUR

TIM: com.qq.tim.sparkAURdeepin-wine-timAUR

如果是 KDE/Plasma 桌面,見 Deepin-wine#Deepin-wine應用程式啟動失敗

如果是 N 卡用戶,並原來使用了nvidia-utils即是nvidia(包)用戶,使用了官方閉源驅動,可能需要用安裝 lib32-nvidia-utils 才能使用。

提示:安裝時報錯warning: cannot resolve "lib32-zlib",需要在/etc/pacman.conf裡取消[multilib]的注釋。參考multilib

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[編輯 | 編輯原始碼]

安裝 winewine-geckowine-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桌面門戶中對應的桌面後端。

打開窗口/設置/接受消息閃退[編輯 | 編輯原始碼]

你可以嘗試以下命令:

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

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/213530https://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.shrun_v2.shrun_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 的窗口設置為浮動。
  • 清除不需要的窗口邊框、避免菜單彈出時焦點移動到菜單上。
  • 自動關閉彈出的新聞窗口。

將以下內容添加到 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 時會自動最大化,且邊框不美觀,可在 i3config 設置如下兩條規則以改善:

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

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

i3status-rust-gitAUR
i3status-rust

參閱[編輯 | 編輯原始碼]