腾讯QQ

来自 Arch Linux 中文维基
(重定向自TIM

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/

每次登录都需要重新扫码[编辑 | 编辑源代码]

如果即使在登录时勾选了无需在手机端确认,下次登录时还需要扫码,这可能是因为其是根据网卡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/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

参阅[编辑 | 编辑源代码]