在FreeBSD上运行WINE¶
备注
由于我暂时没有时间精力继续探索(只实现了简单运行,网络联通存在问题,未解决钉钉的运行问题),我暂时放弃在FreeBSD上使用WINE。
原因也是个人需求较为薄弱: 我采用WINE主要是因为公司的企业软件只能在Windows或macOS上运行,但是我实际上有公司配置的笔记本,所以FreeBSD上运行企业软件不是强需求。
我改为另一种方式: 在公司配备的MacBook上运行 macOS ,然后通过 Synergy:主机间共享键盘鼠标 和 MacBook上的FreeBSD互操作,实现曲线协作: FreeBSD运行Synergy共享键盘鼠标
准备工作¶
安装WINE之前,需要先完成以下准备工作:
GUI环境
wine-gecko: 默认Windows内建的web浏览器:
pkg install wine-gecko
上述pkg安装有可以通过编译完成:
cd /usr/ports/emulator/wine-gecko
make install
wine-mono: MONO框架是开源的Microsoft .NET实现:
pkg install wine-mono
上述pkg安装也可以通过编译完成:
cd /usr/ports/emulator/wine-mono
make install
安装¶
执行以下命令完成软件包安装:
pkg install wine
也可以通过编译完成:
cd /usr/ports/emulator/wine
make install
通过 pkg
安装会提示:
Wine requires procfs(5) mounted on /proc. You can do so manually via
mount -t procfs proc /proc
or make it permanent via something like the following in /etc/fstab
proc /proc procfs rw 0 0
Some ZFS tuning guides recommend setting KVA_PAGES=512 in your kernel
configuration. This is incompatible with Wine. The maximum possible
is KVA_PAGES=500, which should still be enough for ZFS.
所以在 /etc/fstab
中添加:
proc /proc procfs rw 0 0
并执行一次 mount -t procfs proc /proc
(或者重启一次系统)
备注
WINE的很多工具依赖32位wine,所以首先要让系统具备 lib32
支持。我在 在苹果Intel版Mac上安装FreeBSD 时没有选择32位系统支持(lib32),所以需要 FreeBSD安装完成后添加lib32
如果没有安装32位的wine,则运行程序时候会报错:
winecfg
报错:
/home/huatai/.i386-wine-pkg//usr/local/bin/wine doesn't exist!
Try installing 32-bit Wine with
/usr/local/share/wine/pkg32.sh install wine mesa-dri
If using Poudriere, please make sure your repo is setup to use FreeBSD:13:i386
and create symlinks for
FreeBSD:13:amd64 and
FreeBSD:13:i386
to the relevant output directories. See pkg.conf(5) for more info.
以普通用户身份运行(看起来 winetricks 还是会找系统的32位wine):
/usr/local/share/wine/pkg32.sh install wine mesa-dri
大约占用2G磁盘空间
参考 i386-Wine 应该按照以下方法进行:
fetch -arRo /tmp/ https://download.freebsd.org/ftp/releases/amd64/13.1-RELEASE/lib32.txz
tar -xpf /tmp/lib32.txz -C /
pkg install i386-wine
备注
这里提示没有找到 i386-wine
pkg: No packages available to install matching 'i386-wine' have been found in the repositories
此外和文档不同,ports中也没有找到 /usr/ports/emulator/i386-wine
和文档不同,也找不到 pkg install winetools
然后就可以正常运行 winecfg
工具进行配置
winecfg配置¶
在 winecfg
配置中我主要进行以下调整:
调整分辨率,将默认
96dpi
调整成110dpi
这样在MacBook Pro的高分辨率屏幕下字体较大较清晰添加
C:
驱动器
Winetricks¶
winetricks
工具是一个跨平台通用的WINE帮助程序,虽然不是WINE项目开发的,但是在GitHub上有不少贡献者维护。这个 winetricks
工具可以自动让常用程序能够在WINE上工作,主要是通过优化设置,即自动添加一些DLL库实现。
安装:
#sudo pkg install i386-wine winetricks sudo pkg install winetricks
我已经在前文为自己账户目录安装了32位wine(并且确实找不到 i386-wine
包),所以这里只安装 winetricks
即可
使用winetricks¶
执行
winetricks
winetricks
在显示界面选择 Install an application
,然后下一步就可以选择不同的应用程序,会自动设置好运行环境。例如而已安装 kindle
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.
安装 kindle
非常顺利,最后提示:
You may need to run with cpuset -l 0 to avoid a libX11 crash.
需要运行一次kindle,这个过程会自动安装大量的系统依赖dll,也为后续安装DingTalk程序打下基础。
wine网络问题¶
我使用 winetricks
安装firefox并立即调用启动是能够正常使用网络访问百度,中文显示正常,而且能够使用fcitx5输入中文。
但是再次从菜单调用firefox则网络不通
似乎 wine cmd
命令显示的网络的默认网关是 0.0.0.0
没有获得本地主机的默认网关(显示的IP地址是本地网卡IP地址 192.168.1.11)
执行
wine cmd
进入wine的终端,尝试:ping xx.xx.xx.xx
提示信息:
0348:err:winediag:IcmpCreateFile Failed to use ICMP (network ping), this requires special permissions.
这个问题是因为wine不希望作为root用户运行,但是一些特定文件需要运行权限,所以需要执行 (参考 wine FAQ: 10.3.4 Failed to use ICMP (network ping), this requires special permissions ):
sudo setcap cap_net_raw+epi /usr/bin/wine-preloader
不过,在FreeBSD上没有找到这个 wine-preloader
文件。但是参考 No internet in WINE 1.6.2 under Ubuntu 15.10 有人提到:
sudo setcap cap_net_raw+epi /usr/lib/wine/wine64
但是FreeBSD没有setcap?
NVIDIA¶
使用wine时会提示:
00f0:err:winediag:is_broken_driver Broken NVIDIA RandR detected, falling back to RandR 1.0. Please consider using the Nouveau driver instead.
参考 wind FAQ: 10.3.6 Broken NVIDIA RandR detected, falling back to RandR 1.0 :
RandR是一个应用程序和X server沟通修改屏幕分辨率等事项,但是nVida的驱动没有实现RandR的新版本,所以Wine抱怨
钉钉¶
dingtalk-wine-2019: almost perfect solution found 提到解决方法:
run everything using WINEARCH=win32
copy 32-bit riched20.dll & msftedit.dll from Windows 7 (or from Google)
configure library override in winecfg (more specific, riched20 & msftedit change to native)
everything works, screen shot & CJK character display in input box
Firefox¶
命令行运行:
WINEARCH=win32 wine firefox.exe
提示报错:
wine: WINEARCH set to win32 but '/home/huatai/.wine' is a 64-bit installation.
看来需要重新部署,把默认架构修改为32位
参考 How do I create a 32-bit WINE prefix?
rm -rf ~/.wine
WINEARCH=win32 WINEPREFIX=~/.wine wine wineboot
果然能够解决32位运行环境问题
不过,现在遇到的问题是,虽然安装时能运行firefox上网,但是安装之后再运行却不行了,页面无法打开。 No internet in WINE 1.6.2 under Ubuntu 15.10 提到需要安装 winhttp.dll
,我尝试通过以下命令安装:
winetricks winhttp
显示下载安装了 W2KSP4_EN.EXE
,但是看上去并没有解决网路问题