在linux上使用wine 安装微信避坑
- wine 一般只支持32位,所以容器要使用”WINEARCH=wince2 wineboot" 将容器初始化为 32位,这里最好不要加WINEPREFIX参数以使用默认的路径,安装和命令行使用时都更加方 便。winetricks 是有图形界面的,配置和安装程序比较方便,顺便说在其中可以在库中 直接选择安装QQ,但是WeChat 在库中找不到。
- wine 和 winetricks 在安装包时非常慢,最好在 terminal 中挂代理加速。
- 系统选择Windows XP,微信选择3.2版本(不支持朋友圈),更高版本微信使用了很多新 技术,wine 中支持不好,程序易崩溃,另外它对装饰的刷新很快会造成输入框中的焦点 漂移,输入体验不好。
- winetricks 安装 riched20 是必须的,用以解决输入框无法输入问题。
- 无法输入还有可能是窗口无法获取焦点,需要根据Linux 窗口管理器配置修改 winecfg 显示配置页“允许窗口管理器控制窗口”。 一般不让窗口管理器装饰窗口,但让窗口管 理器管理窗口,这样的话焦点获取策略比较统一,如果无法获取焦点进行输入则主要检查 并修改窗口管理器设置即可。
- 黑边框是由微信自身窗口装饰产生的, linux xdotool 自动化工具可以部分解决此问题, 但对于3.2以上微信版本,可能造成程序崩溃。网上的脚本可以去掉黑框,但有 BUG 。脚 本原理是在微信启动后将所有窗口名称为空的窗口关掉,这同时会造成右键或托盘图标菜 单、还有提示窗口会被误关。
于是改进的脚本如下,主要考虑是每个边框都有一个对应的内容窗口,并且两者中心重叠:
import os import sys import time import getopt from decimal import Decimal def remove_shadow(app_class): wdlst=[] for wid in os.popen('xdotool search --onlyvisible --class ' + app_class).readlines(): wdn = os.popen('xdotool getwindowname %s' % (wid[:-1],)).readline()[:-1] w={} for exp in os.popen('xdotool getwindowgeometry --shell %s '%(wid[:-1],)).readlines(): k,v=exp.split('=') w[k]=Decimal(v) w['NAME']=wdn wdlst.append(w) #print(wdlst) wdlst.sort(key=lambda x:x['X']) n=len(wdlst) for i in range(n): w=wdlst[i] if w['NAME']!='':continue ow = None for j in range(i+1,n): ow=wdlst[j] if w['X']+w['WIDTH']/2==ow['X']+ow['WIDTH']/2 and \ w['Y']+w['HEIGHT']/2==ow['Y']+ow['HEIGHT']/2 and \ w['X']-ow['X']==w['Y']-ow['Y'] and \ abs(w['X']-ow['X'])<=21 and \ ow['NAME'] !='': os.system('xdotool windowunmap %s' % w['WINDOW']) break def check_app_running(app_exe): result = os.popen( "ps -ef |grep %s |grep -v 'grep' | awk '{print \"/proc/\"$2\"/cwd\"}' | xargs ls -l | grep drive_c" % app_exe).readlines() return len(result) > 0 def handle(app_exe, app_class): check_app_alive_max_count = 0 while True: running = check_app_running(app_exe) if running: remove_shadow(app_class) check_app_alive_max_count = 0 else: check_app_alive_max_count = check_app_alive_max_count + 1 if check_app_alive_max_count > 30: # 三十次没有检测程序启动,退出 exit() time.sleep(1) # 休眠1秒 if __name__ == '__main__': opts, args = getopt.getopt(sys.argv[1:], "e:c:", ["exe=", "class="]) exe_name = None app_class = None for opt_name, opt_value in opts: if opt_name in ('-e', '--exe'): exe_name = opt_value elif opt_name in ('-c', '--class'): app_class = opt_value if exe_name is not None and app_class is not None: handle(exe_name, app_class)
创建一个启动脚本,并加入desktop
#!/bin/bash export WINEPREFIX="/home/paul/.wine" wine C:\\\\users\\\\Public\\\\Desktop\\\\微信.lnk python3 ./clrmap.py --exe=WeChat --class=wechat 2>&1
分类:
Linux使用
posted on 2022-07-31 16:13 YourTech-WuPeng 阅读(1869) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南