dushaoshuai / dushaoshuai.github.io

https://www.shuai.host
0 stars 0 forks source link

Wine 使用 #142

Open dushaoshuai opened 6 months ago

dushaoshuai commented 6 months ago

什么是 Wine ?

Wine 可以运行 Windows 应用。

Wine ("Wine Is Not an Emulator") 是一个在 Unix-like 系统上运行 Windows 应用的兼容层。Wine 不是虚拟机或模拟器,而是将应用对 Windows API 的调用翻译为对原生 API 的调用,降低性能和内存损失。

注意

Wine 在一定程度上丰富了类 Unix 系统的生态环境。

安装 Wine(以 Manjaro 为例)

sudo pacman -S wine

依赖

Name Description
wine-gecko Wine's built-in replacement for Microsoft's Internet Explorer
wine-mono Wine's built-in replacement for Microsoft's .NET Framework
lib32-mesa An open-source implementation of the OpenGL specification
Optional Deps pacman -Qi wine 查看可选依赖
lib32-gnutls A library which provides a secure layer over a reliable transport layer
lib32-gst-plugins-base Multimedia graph framework - base plugins
lib32-gst-plugins-good Multimedia graph framework - good plugins

依赖(声音相关)

Name Description
lib32-alsa-lib An alternative implementation of Linux sound support
lib32-alsa-plugins Additional ALSA plugins (32-bit)
lib32-libpulse A featureful, general-purpose sound server (client libraries)
lib32-pipewire Low-latency audio/video router and processor
pipewire-pulse Low-latency audio/video router and processor - PulseAudio replacement
pipewire-alsa Low-latency audio/video router and processor - ALSA configuration
lib32-alsa-oss OSS compatibility library

依赖(游戏相关)

Name Description
game related sudo pacman -S --needed giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse libgpg-error lib32-libgpg-error alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo sqlite lib32-sqlite libxcomposite lib32-libxcomposite libxinerama lib32-libgcrypt libgcrypt lib32-libxinerama ncurses lib32-ncurses ocl-icd lib32-ocl-icd libxslt lib32-libxslt libva lib32-libva gtk3 lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader
lib32-sdl2 joystick and gamepad support

概念和使用

WINEPREFIX 是一个环境变量,用于指定独立的 Wine 环境,默认是 ~/.wine

建议不同应用或者不同种类应用使用不同的 WINEPREFIX,因为每个应用能够完美运行的条件都各不相同。即使经过大量尝试,很多应用仍然无法正常使用。

这是一个 WINEPREFIX 的目录结构,去掉了一些冗余信息:

$ tree -L 2 wecom
wecom
├── dosdevices
│   ├── c: -> ../drive_c
│   ├── com1 -> /dev/ttyS0
│   ├── com10 -> /dev/ttyS9
│   ├── com11 -> /dev/ttyS10
│   └── z: -> /
├── drive_c
│   ├── ProgramData
│   ├── Program Files
│   ├── Program Files (x86)
│   ├── users
│   └── windows
├── system.reg
├── userdef.reg
└── user.reg

C: 盘映射到 drive_c 目录。Z: 盘映射到 / 目录。

WINEARCH 指定 win32 或者 win64 环境,默认是 64 位环境。

32 位环境往往有较好的兼容性。

$ winetricks
# ...
warning: You are using a 64-bit WINEPREFIX. Note that many verbs only 
        install 32-bit versions of packages. If you encounter problems, 
        please retest in a clean 32-bit WINEPREFIX before reporting a bug.
# ...

练习

练习安装企业微信。微信已经有 Linux 原生版本了,但是企业微信没有。

下载企业微信 Windows 版。

新建企业微信独立环境:

$ mkdir -p ~/wine/wecom

修改 dpi(可选):

$ env WINEPREFIX=~/wine/wecom winecfg

origin_dpi

large_dpi

winecfg~/wine/wecom 目录下生成了必要的文件:

$ ls ~/wine/wecom/
dosdevices  drive_c  system.reg  userdef.reg  user.reg
$ env WINEPREFIX=~/wine/wecom wine ~/Downloads/windows/WeCom_4.1.20.6024.exe

install

bug1

bug2

bug3

解决输入框字体框框的问题:

$ env WINEPREFIX=~/wine/wecom winetricks riched20

riched20.dll 是一个 Windows 操作系统中的动态链接库文件,它是 Rich Edit 控件的一部分,用于支持富文本编辑功能。这个 DLL 文件提供了一系列的富文本编辑能力,比如字体变化、颜色调整、文本对齐等,这些功能在多种 Windows 应用程序中都有广泛的应用,包括 Word 文档、Outlook 邮件以及其他需要富文本编辑的软件。

重新打开企业微信,输入框字体框框的问题已解决:

input_fixed

解决中文字体框框的问题,拷贝微软雅黑字体到 ${WINEPREFIX}/drive_c/windows/Fonts 目录下:

$ cp ~/Downloads/windows/Fonts/msyh.ttc ~/wine/wecom/drive_c/windows/Fonts/

重新打开企业微信,中文字体框框的问题已解决:

chinese_chars_fixed1

chinese_chars_fixed2

chinese_chars_fixed3

See also