Arch/Manjaro 安装最新版wine-TIM
i-info / / 技术杂记 / 阅读量 7
注:使用的wine为deepin-wine5(新版),优化更好。当然老版本的deepin-wine可以仍然能够使用,但是官方仓库中被移除了。

经典的前情提要: 昨天看见了pamac(manjaro的可视化包管理器)的更新提示。居然提示我deepin.com.qq.office(aur)更新了(不知为啥,archlinuxcn源里现在已经找不到了)。更新后,不出所料,启动不了了。于是卸载tim,deepin-wine,准备重装tim。 然后就发现以前的deepin-wine也被移除了,于是就开始了新的折腾之旅。 在亿些神奇的尝试后,歪打正着找到了这样一个包deepin-wine-tim(实际是因为我忘记了包名) 不管了,直接步入正题吧。

一、安装deepin-wine-tim

(由于文章会过时)强烈建议同时参考Github页面:deepin-wine-tim-arch

以下的安装建议全都用yay安装,因为,至少目前(本文发布时)archlinuxcn里没有完整的依赖包,极其容易出现依赖不全的情况。
另外注意:deepin-wine-tim(aur)目前被标记为(过时的),因为原来的启动脚本适配的是deepin-wine(被删除),打包者还没有做deepin-wine5的适配和重新打包。但是问题不大,下面的教程可以手动适配deepin-wine5。

deepin-wine-tim默认的依赖为wine5.22(非deepin版),实测可以安装,但无法启动。

安装deepin-wine5

$yay -S deepin-wine5

安装deepin-wine-tim

$yay -S deepin-wine-tim

安装完成后不要启动!!!(还未配置)

二、配置启动脚本

启动脚本位于:/opt/deepinwine/apps/Deepin-TIM/run.sh 为了简便一些,这里直接贴出适配后的脚本(其实就是把deepin-wine替换为deepin-wine5):
#!/bin/sh

#   Copyright (C) 2016 Deepin, Inc.
#
#   Author:     Li LongYu <lilongyu@linuxdeepin.com>
#               Peng Hao <penghao@linuxdeepin.com>

#               Codist <countstarlight@gmail.com>

WINEPREFIX="$HOME/.deepinwine/Deepin-TIM"
APPDIR="/opt/deepinwine/apps/Deepin-TIM"
APPVER="3.2.0.21856"
APPTAR="files.7z"
PACKAGENAME="com.qq.tim"
WINE_CMD="wine"

HelpApp()
{
    echo " Extra Commands:"
    echo " -r/--reset     Reset app to fix errors"
    echo " -e/--remove    Remove deployed app files"
    echo " -d/--deepin    Switch to 'deepin-wine'"
    echo " -h/--help      Show program help info"
}
CallApp()
{
    if [ ! -f "$WINEPREFIX/reinstalled" ]
    then
        touch $WINEPREFIX/reinstalled
        env WINEPREFIX="$WINEPREFIX" $WINE_CMD $APPDIR/TIM$APPVER.exe
    else
        #disable Tencent MiniBrowser
        #_DeleteRegistry "HKCU\\Software\\Tencent\\MiniBrowser"

        #Support use native file dialog
        export ATTACH_FILE_DIALOG=1

        env WINEPREFIX="$WINEPREFIX" WINEDEBUG=-msvcrt $WINE_CMD "c:\\Program Files\\Tencent\\TIM\\Bin\\TIM.exe" &
    fi
}
ExtractApp()
{
    mkdir -p "$1"
    7z x "$APPDIR/$APPTAR" -o"$1"
    mv "$1/drive_c/users/@current_user@" "$1/drive_c/users/$USER"
    sed -i "s#@current_user@#$USER#" $1/*.reg
}
DeployApp()
{
    ExtractApp "$WINEPREFIX"
    echo "$APPVER" > "$WINEPREFIX/PACKAGE_VERSION"
}
RemoveApp()
{
    rm -rf "$WINEPREFIX"
}
ResetApp()
{
    echo "Reset $PACKAGENAME....."
    read -p "*  Are you sure?(Y/N)" ANSWER
    if [ "$ANSWER" = "Y" -o "$ANSWER" = "y" -o -z "$ANSWER" ]; then
        EvacuateApp
        DeployApp
        CallApp
    fi
}
UpdateApp()
{
    if [ -f "$WINEPREFIX/PACKAGE_VERSION" ] && [ "$(cat "$WINEPREFIX/PACKAGE_VERSION")" = "$APPVER" ]; then
        return
    fi
    if [ -d "${WINEPREFIX}.tmpdir" ]; then
        rm -rf "${WINEPREFIX}.tmpdir"
    fi
    ExtractApp "${WINEPREFIX}.tmpdir"
    /opt/deepinwine/tools/updater -s "${WINEPREFIX}.tmpdir" -c "${WINEPREFIX}" -v
    rm -rf "${WINEPREFIX}.tmpdir"
    echo "$APPVER" > "$WINEPREFIX/PACKAGE_VERSION"
}
RunApp()
{
    if [ -d "$WINEPREFIX" ]; then
        UpdateApp
    else
        DeployApp
    fi
    CallApp
}

CreateBottle()
{
    if [ -d "$WINEPREFIX" ]; then
        UpdateApp
    else
        DeployApp
    fi
}

msg()
{
    ECHO_LEVEL=("\033[1;32m==> " "\033[1;31m==> ERROR: ")
    echo -e "${ECHO_LEVEL[$1]}\033[1;37m$2\033[0m"
}

SwitchToDeepinWine()
{
    PACKAGE_MANAGER="yay"
    DEEPIN_WINE_DEPENDS="deepin-wine5"
    if ! [ -x "$(command -v yay)" ]; then
        if ! [ -x "$(command -v yaourt)" ]; then
            msg 1 "Need to install 'yay' or 'yaourt' first." >&2
            exit 1
        else
            $PACKAGE_MANAGER="yaourt"
        fi
    fi
    if [[ -z "$(ps -e | grep -o gsd-xsettings)" ]]; then
        DEEPIN_WINE_DEPENDS="${DEEPIN_WINE_DEPENDS} xsettingsd"
    fi
    if [ "$XDG_CURRENT_DESKTOP" = "Deepin" ]; then
        DEEPIN_WINE_DEPENDS="${DEEPIN_WINE_DEPENDS} lib32-freetype2-infinality-ultimate"
    fi
    for p in ${DEEPIN_WINE_DEPENDS}; do
        if pacman -Qs $p > /dev/null ; then
            msg 0 "$p is installed, skip ..."
        else
            msg 0 "Installing dependency: $p ..."
            $PACKAGE_MANAGER -S $p
        fi
    done
    msg 0 "Redeploying app ..."
    if [ -d "$WINEPREFIX" ]; then
        RemoveApp
    fi
    DeployApp
    msg 0 "Reversing the patch ..."
    patch -p1 -R -d  ${WINEPREFIX} < $APPDIR/reg.patch
    msg 0 "Creating flag file '$WINEPREFIX/deepin' ..."
    touch -f $WINEPREFIX/deepin
    msg 0 "Done."
    exit 0
}

# Init
if [ -f "$WINEPREFIX/deepin" ]; then
    WINE_CMD="deepin-wine5"
    if [[ -z "$(ps -e | grep -o gsd-xsettings)" ]] && [[ -z "$(ps -e | grep -o xsettingsd)" ]]; then
        if [[ ! -f "$HOME/.xsettingsd" ]] && [[ ! -f "$HOME/.config/xsettingsd/xsettingsd.conf" ]] && [[ ! -f "/etc/xsettingsd/xsettingsd.conf" ]]; then
            mkdir -p "$HOME/.config/xsettingsd" && touch "$HOME/.config/xsettingsd/xsettingsd.conf"
        fi
        /usr/bin/xsettingsd &
    fi
fi

if [ -z $1 ]; then
    RunApp
    exit 0
fi
case $1 in
    "-r" | "--reset")
        ResetApp
        ;;
    "-c" | "--create")
        CreateBottle
        ;;
    "-e" | "--remove")
        RemoveApp
        ;;
    "-d" | "--deepin")
        SwitchToDeepinWine
        ;;
    "-u" | "--uri")
        RunApp $2
        ;;
    "-h" | "--help")
        HelpApp
        ;;
    *)
        echo "Invalid option: $1"
        echo "Use -h|--help to get help"
        exit 1
        ;;
esac
exit 0
更改、保存后,需要先用/opt/deepinwine/apps/Deepin-TIM/run.sh -d 命令自动切换到deepin-wine模式(默认为wine模式)。 然后执行 /opt/deepinwine/apps/Deepin-TIM/run.sh -u 运行(第一次运行为TIM安装程序)
注意:安装路径保持默认不要更改,如需更改,请参考github文档。

等待安装程序结束后,再次启动TIM(自动启动)。不出意外,就能启动成功。 以后可以直接用应用程序中的TIM启动,与运行执行脚本等效。

另外,此wine-TIM允许自动更新,并且能够开启表情漫游,终于Linux上也能体验到最新版的TIM了。

三、解决一些小问题

遇到问题建议直接看Github Issues。这里只做一小部分的问题搬运。

退出TIM

由于wine-TIM无法使用自身的退出按钮退出,于是需要手动执行killall -TIM.exe 命令,才能完全退出。

头像与表情包无法显示、漫游记录打不开

在原生wine下的确存在这个问题,禁用ipv6的确可以解决,但如果本身自己要用ipv6就比较麻烦,建议像另一个issue 里这样做一个本地代理。然后登录tim的时候右上角设置,选择对应的代理(看不见选项可以按tab或者上下左右键)。目前自己使用非常稳定

Core00077 commented on 15 Apr

我用的是“另一个issue” 里的办法。本地搭建一个代理,让TIM的流量通过代理。 TIM的代理配置位于登录界面的设置 搬运一下v2的配置:

{
  "inbounds" : [
    {
      "listen" : "127.0.0.1",
      "port" : 1099,
      "protocol" : "http",
      "tag" : "TIM",
      "settings" : {
        "timeout" : 0
      }
    }
  ],
  "outbounds" : [
    {
            "protocol" : "freedom",
            "tag" : "direct"
    }
  ],
  "routing" : {
    "domainStrategy" : "AsIs",
    "rules" : [
      {
        "type" : "field",
        "inboundTag" : "TIM",
        "outboundTag" : "direct"
      }
    ]
  }
}
注:v2ray安装yay -S v2ray 可以把这个JSON配置保存到本地的一个配置文件中 于是运行命令为:~$ v2ray --config .v2ray.conf

# EOF

支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章