wine实用经验教程
本篇讲类unix系统下的用以模拟运行Windows程序的wine
。会从普通使用者的比较实用的角度去讲。有专为国内用户准备的内容。
本篇面向有Linux经验但对wine不熟悉的人。
wine可靠吗?该不该用?
wine是不可靠的,自用可以,生产环境和严格环境中千万别用。
一般越旧的Windows程序wine越容易模拟运行成功(或部分功能成功)。请先在官方wine Application Database上查你想运行的程序的别人的模拟结果(官方搜索不好用,可以用Google加 site:appdb.winehq.org
),看Test Results:
Rating一列由运行结果好到坏为Platinum、Gold、Silver、Bronze、Garbage
看他们当时所用的wine版本和程序版本。有些是用很旧的wine测试的结果不好,新版本wine或许已不一样
结果好的,你打算做,那么点击此条结果,看提交者所描述的正常功能、不可用功能、未测试功能,及他所留的建立过程和操作方法
无近期结果或近期仍然Silver以下的就放弃吧。也可以自己尝试,但这对普通人来说,顺利则已,不顺利则是一大大大坑
基础知识和操作
WINEARCH环境变量
这个WINEARCH
决定了你模拟的Windows是32位或是64位的x86。对应的值为win32
及win64
,如果你的Unix系统是64位的它就默认是win64
。
发行版所提供的wine一般都有32位及64位两个包,直接对应所模拟的Windows位数,包里面的Unix二进制及运行库也都是对应位数。
以我的经验来看,使用32位更容易成功。
语言设置为英文
有时尝试了多次都失败,而export LANG=en_US.utf8
后就成功了。其中有些Windows程序安装时需要把语言设置成英文,运行时又可以用中文运行。神奇吧 !-_-!
WINEPREFIX环境变量
WINEPREFIX
是很重要的,默认值为~/.wine
。
wine会在它所指定的路径下创建drive_c/
等几个文件(夹),其中包含了Windows环境配置、它的C盘文件等等。
建议把你安装的不同的Windows程序分给不同的WINEPREFIX,便于打包和隔离。当你要启动这个Windows程序前也记得要设置WINEPREFIX。
在你用一个空WINEPREFIX目录第一次启动wine时,它会问你是否下载mono和gecko。一般情况选否即可。
启动Windows程序及路径处理
命令wine 路径/xxx.exe 参数(可以是文件路径)
就可以通过wine运行exe
。路径可以是Unix路径,也可以是(在有WINEPREFIX情况下的)Windows路径,wine会自动判断。
以WINEPREFIX是默认值情况下为例:
wine notepad.exe c:/abc.txt
wine notepad.exe ~/.wine/drive_c/abc.txt
上面两条命令效果一样。
对wine来说,你Unix系统里的其他文件(即模拟的C盘之外的文件)的Windows路径都以Z盘开头:
wine notepad.exe z:/home/username/.wine/drive_c/abc.txt
wine也提供了
winepath
这个命令来转换Unix和Windows之前的路径,但一般用不上。
安装Windows程序及之后
要安装一个Windows程序,一般就是在设置好WINEPREFIX
和WINEARCH
后,运行安装包
wine 安装包.exe
wine msiexec /i 安装包.msi
安装好后,安装程序所生成的Windows开始菜单项会被自动加入你的Linux系统的启动器中。.desktop
文件里已经有了WINEPREFIX
和WINEARCH
。安装程序所产生的文件扩展名关联、图标等等“垃圾”也会进入Linux中。
如果你不喜欢垃圾,可以清理,参考官方FAQ
甚至你可以在安装前就禁止它在Unix中产生任何菜单、文件关联等物件(参考这里):
export WINEDLLOVERRIDES=winemenubuilder.exe=d wine setup.exe
我自己是总把垃圾清理掉的。如果你也清理了,没有了安装程序创建的菜单和文件关联,可以按如下方法自己弄:
写一个自己的脚本:
#!/bin/bash
# 取得此bash脚本所在路径
script=$(readlink -f "$0")
scriptpath=$(dirname "$script")
# 这里设置好WINEPREFIX
export WINEPREFIX="$scriptpath"
wine "c:\Program Files\xxxx\xxxx.exe" "$1"
把这个脚本放在WINEPREFIX目录下使用。
自己确定好此WINEPREFIX目录放在何处后,可以手动将文件后缀与这个脚本关联,具体可以参考我写的另一篇《Linux关联文件扩展名和打开程序》。
winecfg
winecfg
命令会打开一个GUI的、应对此WINEPREFIX的wine环境配置。
里面可以设置要模拟的Windows版本。
还可以设置某个DLL文件使用内建、原装、内建先于原装、原装先于内建、停用之中的哪种。默认情况下都是使用内建的。如果想使用原装,则必须把真正的Windows DLL放入WINERPEFIX的系统目录中,其中大部分是用winetricks
来搞。
这个对于一个程序是否能成功模拟比较关键,但需要一些技术知识,本篇不细谈。官方wine Application Database中,提交者一般会给出他们所使用的设置。
winetricks
有官方背景的一个工具。其主页位于Github。发行版也会带它,但不一定最新,最好用最新的。它能帮用户方便配置wine环境,或安装一些基本DLL,运行库如VC runtime、.NET。
例如winetricks dotnet45 vcrun2010
。也支持一些大型应用如office2007pro
(需要自己准备光盘或iso
)、7zip
、qq
、qqintl
(这些安装时它自己从网上下载)。可以用winetricks list-all
来看看它支持什么。
因为是老外维护的,所以winetricks有许多东西要把语言设置成英文才可以安装成功。
经我试验,winetricks中许多也只能在32位或64位一种情况下,或某个wine版本之上或之下才能成功,而winetricks却不记录或提供这些信息,很奇怪。
wine卡死了或程序退出不彻底
如果在wine中运行notepad,会有以下进程在Unix中:
23770 23765 notepad.exe notepad.exe
23774 23765 wineserver /usr/bin/wineserver
23780 23765 services.exe C:\windows\system32\services.exe
23783 23765 winedevice.exe C:\windows\system32\winedevice.exe
23793 23765 plugplay.exe C:\windows\system32\plugplay.exe
23798 23765 winedevice.exe C:\windows\system32\winedevice.exe
23805 23765 explorer.exe C:\windows\system32\explorer.exe /desktop
那些看似名为.exe
结尾的进程实际上在Unix中是wine-preloader
。每一个运行中的WINEPREFIX会有一套以上进程。
正常情况下,如上例,notepad.exe
退出后其余也会自动退出。但wine无法正常自行彻底退出是常有的。例如若用wine运行QQ,常常出现QQ.exe
退出但TXPlatform.exe
死活不自己退出的情况,甚至可能你点击了QQ界面上的叉,只是界面消失,实际的exe进程都卡住不退。卡住不退的情况也属于所模拟的程序功能仅部分正常。
使用wineserver -k
来告诉wine杀死本WINEPREFIX的所有进程。但这招有时也不灵,那么需要手动清理,比较麻烦。
一些国内常用Windows软件的现成资源
winetricks_zh(https://github.com/hillwoodroc/winetricks-zh )是一个国人维护的winetricks。想装国内软件时可以先来这里看看,比官方winetricks更符合国内情况。支持QQ、微信、同花顺、大智慧等等。
深度(Deepin)是国内的Linux发行版,它已经装备好了一些wine好的国内软件。但许多是不能直接拿到其他发行版上来用的。深度会自己修改wine的源代码,他们提供的wine好的东西许多是基于他们的wine。
别人打包的AppImage,例如这个打包好的QQ(https://github.com/askme765cs/Wine-QQ-TIM)。许多人是拿深度所做的打包成AppImage。自行在网上搜索一下会有,但别人打包的水平有高有低,兼容性有好有坏。可靠度和风险自行评估。
手动下载wine的各个版本
wine已经广泛被各个发行版仓库收录了,但有些情况下需要手动下载wine的各种版本:
发行版提供的wine太旧
某些东西在旧版本中正常,新版本反而不正常(有时这可以通过调整配置解决,但这也是坑)
可以下载各个版本的wine的发行版通用二进制的地方:
为wine用户提供便捷的PlayOnLinux(https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-amd64/ )
做Linux游戏主题的Lutris https://lutris.net/files/runners/ 有1.7到3.9版本的wine,好像不更新了
Github上的一个提供portable wine的人Kron4ek https://github.com/Kron4ek/Wine-Builds/releases 及 https://github.com/Kron4ek/wine-portable-executable/releases 可靠程度不明
经我测试,下载后解包,不要改变目录关系,使用里面的wine
二进制即可以,一般是比较portable的。
下载时注意是32位还是64位的x86。不是根据你的真实cpu位数来,而是根据你需要模拟的Windows位数来。
总结
wine是坑!能用则用,不能用别留恋。两台电脑一台Linux一台Windows是最好方案。
另外最好也知道,proton是Valve为他们的游戏弄的wine衍生版,部分steam游戏使用它;crossover是wine的一个商业应用。如果真要弄wine,有时也可以寻找这些资源。
wine实用经验教程的更多相关文章
- JsRender实用入门教程
这篇文章主要介绍了JsRender实用入门实例,包含了tag else使用.循环嵌套访问父级数据等知识点,并提供了完整的实例下载,非常具有实用价值,需要的朋友可以参考下 本文是一篇JsRend ...
- 实用ExtJS教程100例-001:开天辟地的Hello World
ExtJS功能繁多,要想彻底的了解确实很困难.作为初学者,如何能找到一条快速的通道呢?我觉得,如果你有Javascript的基础,那就不要惧怕ExtJS的复杂,从动手开始,遇到问题,解决问题,积累经验 ...
- 分享六个基于Bootstrap的实用开发教程和模板演示
关于Bootstrap,相信大家一定不陌生,它已经成为现在主流产业的一个重要工具,Bootstrap提供了优雅的HTML和CSS规范,它基于jQuery框架开发的,它在jQuery框架的基础上进行了更 ...
- VMware虚拟机实用经验总结十一条
转:http://article.pchome.net/content-948404.html 1.VMware虚拟机实用经验之支持的Guest OS: VMWare支持如下Guest OS:MS-D ...
- Git超级实用使用教程
一篇git入门实用教程,原文地址http://www.cnblogs.com/tugenhua0707/p/4050072.html 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. ...
- 7 个面向Web开发者的实用CSS3教程推荐
通过CSS来创建精细.复杂的效果,成为了Web前端开发的未来趋势.世界各地的设计师认为CSS3是一项非常具有潜力的技术,未来将会创造更多不可思议的美妙设计. 本文为Web开发者带来了一些与CSS3相关 ...
- Python 编程开发 实用经验和技巧
文章目录 一.小数保留指定位小数 1.%f 方法 2.format函数 3.round()函数 4.直接截断 二.判断变量的数据类型的两种方法 1.type(): 2.isinstance() 三.p ...
- myeclipse设置环境(最实用的教程)
1. General --> Workspace --> UTF-82. General --> Editors --> Associations --> JSP --& ...
- 实用ExtJS教程100例-011:ExtJS Form 使用JSON数据赋值和取值
上一节中我们演示了ExtJS Form的异步加载和提交数据,本节中我们将演示如何使用JSON数据为ExtJS Form中的字段赋值和取值. 系列ExtJS教程持续更新中,点击查看>>最新E ...
随机推荐
- 关于input框仿百度/google自动提示的方法
引入jquery-autocomplete文件 链接:https://pan.baidu.com/s/1hW0XBYH8ZgJgMSY1Ce6Pig 密码:tv5b $(function() { $( ...
- JAVA JDK 环境变量配置 入门详解 - 精简归纳
JAVA JDK 环境变量配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 13 转载请注明出处!️ 目录 JAVA JDK 环境变量配置 入门详解 - 精简归纳 一.为什么j ...
- iOS面试关于http知识点basic-01-http
URL URL 的全称是 Uniform Resource Locator(统一资源定位符) 通过 1 个 URL,能找到互联网上唯一的 1 个资源 URL就是资源的地址.位置,互联网上的每个资源都有 ...
- Git进阶:常用命令和问题案例整理
一.前言 整理常用git命令和以及在实际使用的过程中碰到的问题案例,旨在git进阶,提升工作开发效率,有需要补充的小伙伴欢迎下方留言,本篇持续更新中... 二.命令 配置用户名和邮箱 git conf ...
- 解决ExcelReport导出Excel报Number of rules must not exceed 3错误的问题
报错信息: Number of rules must not exceed 3 [ArgumentException: Number of rules must not exceed 3] NPOI. ...
- es创建普通索引以及各种查询
创建索引 创建普通索引: PUT /my_index { "settings": { "index": { "number_of_shards&quo ...
- windows操作系统的电脑越用越卡?简说几种原因和解决方法。
很多人在使用windows操作系统的发现电脑越用越卡,但是不知道什么原因,只知道电脑越便宜的越卡(电脑配置低), 然而导致电脑卡顿缓慢的原因有很多,总结出来就是软件和硬件的问题,那怎么办呢? 电脑系统 ...
- Java虚拟机栈--栈帧
栈帧的内部结构 每个栈帧中存储着 1.局部变量表(Local Variables) 2.操作数栈(Operand Stack)(或表达式栈) 3.动态链接(Dynamic Linking)(或执行&q ...
- python中yield的用法详解——最简单,最清晰的解释(转载)
原文链接 首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的, ...
- Python-py2和py3读写文本区别
python2和python3的区别? python 2 str 对应 python3 bytes python 2 uincode 对应 ...