跳至內容
出自 Arch Linux 中文维基

Wine 是一款可以在類 Unix 作業系統上運行微軟 Windows 應用程式的兼容層

Wine 不進行模擬、轉譯或虛擬化,而是通過直接提供一組 Win32 API 的對應實現來運行 Windows 應用程式。由於 Wine 的實現與 Windows 的存在一定差異,應用程式運行過程中可能會出現行為、兼容性或性能方面的損失。

警告:

安裝

安裝 wine(開發版),wine-stableAUR(穩定版)或 wine-staging(測試版本)。Wine StagingWine 的修補版本, 其中包含了漏洞修復和尚未集成到穩定或開發分支中的特性。

提示:可以考慮為依賴於 Internet Explorer 和 .NET 的應用程式分別安裝 wine-geckowine-mono。這兩個軟體包不是一定要安裝的,因為 Wine 會根據需要自行下載相關文件。反過來說,如果提前安裝了軟體包,Wine 就不需要再下載這些文件了。不過無論如何,應通過 pacman 對其進行管理

其它需求見#圖形驅動程序#聲音

可選依賴項

Wine 有許多可選依賴項,簡單的應用程式可能不需要這些依賴項,但如果希望使用聲音、3D 圖形、視頻播放等功能,則應安裝這些依賴項。

請注意,許多 Windows 應用程式都是 32 位的,因此需要 32 位版本的相應庫,其中有些庫僅在 AUR 上提供。標準(64 位)庫可用於 64 位應用程式,如果運行的 Wine 版本採用新的 WoW64 模式(參見#安裝中的說明),則可用於任何應用程式。使用 file(1) 命令可以檢查 Windows 可執行文件是否為 64 位。

提示:常見的依賴項,尤其是與遊戲相關的依賴項,可以參考 Lutris 文檔

圖形驅動程序

當你需要安裝 32 位版本的圖形驅動程序時。請安裝 Xorg#驅動安裝頁面中 OpenGL (multilib) 一欄列出的軟體包。

當 Wine 在你的終端窗口中報告以下內容時,你的驅動程序可能沒有正確安裝或配置:

Direct rendering is disabled, most likely your OpenGL drivers have not been installed correctly
注意:安裝正確的庫之後你可能需要重新啟動 X 服務。

聲音

在使用 Wine 運行應用時遇到聲音問題,您也可以嘗試在 winecfg 中檢查聲音設備的配置,確認選擇了正確的聲音設備。

根據不同的聲音驅動,安裝對應的軟體包:

如果 winecfg 仍然無法檢測到音頻驅動程序, 請嘗試配置註冊表。例如,在一個 wine-1.9.7 的 64 位版本上,如果麥克風在 32 位 Windows 應用程式中無法正常工作,則可以按照以下步驟來手動配置其對聲音硬體(揚聲器和麥克風)的訪問權限:打開 regedit,查找路徑 HKEY_CURRENT_USER > Wine > Drivers> Software ,然後添加一個鍵名為 Audio 的字符串值,並為其指定值 alsa 。此外,重新創建前綴也可能有一定幫助。

MIDI支持

MIDI 是一種從 20 世紀 90 年代開始被廣泛使用的音樂系統。如果您使用 Wine 遊玩使用了相關技術的老遊戲,可能會發現遊戲音樂無法正常播放。

事實上 Wine 提供了非常好的 MIDI 支持,但前提是您的主機系統也支持 MIDI,相關內容請參閱MIDI。最後需要注意的是,請確保 Wine 使用了正確的 MIDI 輸出。

若要在遊戲中播放 MIDI 軌道,請使用 winetricks gmdls 以安裝 Microsoft's General MIDI DLS Collection。

其他依賴

部分應用可能會需要其他的依賴(參考 WineHQ 頁面


WINEPREFIX 內部依賴

除了系統依賴項之外,一些程序還需要額外的字體或 dll 庫文件,這時您可以將相關內容複製或安裝到 #WINEPREFIX 中(相關說明可以參考 WineHQ 頁面)。

我們姑且將上面這種依賴情況稱為「WINEPREFIX 內部依賴(In-prefix dependencies)」。

您可以嘗試使用 Winetricks 來滿足一些程序的依賴。它像一個簡陋的「包管理器」,通過安裝一些軟體及應用相關配置來滿足不同程序的運行需求。關於它的安裝和使用可以參考下文的 #Winetricks 章節。

由於依賴關係之間的衝突,您可能無法創建可以運行所有程序的「完美」運行環境 [1] [2]。建議您將前綴(Wine Prefix)視為可以隨時被銷毀的(除非它們包含重要的配置或數據),並為具有不同依賴關係的程序使用單獨的前綴。您可以使用 #WINEPREFIX 環境變量來指定您期望操作的前綴環境。

確定某個應用需求所需的依賴往往需要反覆試驗,您可以參考 Bottles 的依賴頁面,了解一些常見的依賴關係。下面的內容對解決一些特定的應用依賴問題可能會有所幫助:

  • Wine Application Database:Wine 的官方資源,但是內容可能比較老舊且相對下面的內容可能相對缺少維護。
  • Lutris:您可以在 lutris 的頁面上搜索您想遊玩的遊戲,部分遊戲可以在詳細頁面點擊下拉菜單按鈕,選擇「View install script」來查看 lutris 所使用的 Winetricks 的配置。
  • Bottles program repository:資源規模較小,但不僅僅包括遊戲。
  • ProtonDB:雖然 Proton 與 Wine 的兼容性不同(如果您使用該網站資源或在網站創建回復,建議僅使用 Proton),但是評論中可能會搜集到用戶所使用的配置。
    • 您也可以查閱 protonfixes 工具的原始碼,以及包含其內容的 proton-ge-custom。但要注意的是,他們假定您的運行環境中存在 Proton 和 GE 的修復遊戲運行補丁。

如果您發現自己在管理遊戲運行環境上花費了大量時間,那麼使用第三方應用程式代為處理可能會更方便。

第三方程序

以下的程序均有他們自己的社區與官網,Wine的官方社區不支持。詳見Wine Wiki

  • Bottles — 一個基於GTK圖形化的Wine前綴和運行管理器。
https://usebottles.com/ || bottlesAUR
  • CrossOver — 收費的商用官方 Wine。提供更多的終端用戶支援和圖形化界面。
https://www.codeweavers.com || crossoverAUR
  • icoextract — Windows 的可執行程序 (.exe 和 .dll) 的圖標生成器。
https://github.com/jlu5/icoextract || icoextractAUR
  • Lutris — 一個遊戲啟動器(附前綴管理功能),支持Wine上的遊戲以及Linux原生遊戲。
https://lutris.net || lutris
  • PlayOnLinux — 圖形化 Wine 前綴管理器。包括腳本協助程序的安裝與配置。
https://www.playonlinux.com || playonlinuxAUR
  • Proton — 為Steam打造的兼容性工具,它基於 Wine 而有很多附加組件。見ProtonDB 獲取兼容列表。
https://github.com/ValveSoftware/Proton || protonAUR
  • PyWinery — 為 Wine 打造的簡單前綴管理器。
https://github.com/ergoithz/pywinery || pywineryAUR
  • Q4Wine — 給 Wine 的圖形化前綴管理器。為更好地設計統一,可以使用Qt主題到 Wine 設置中。
https://sourceforge.net/projects/q4wine/ || q4wine-gitAUR
  • WINEgui — 用戶友好的 wine 圖形界面
https://gitlab.melroy.org/melroy/winegui || wineguiAUR, winegui-binAUR

配置

配置 Wine 通常使用以下方法:

  • winecfg 是 Wine 的 GUI 配置工具,可以通過運行 winecfg 來啟動。
  • regedit 是 Wine 的註冊表編輯工具,可以通過運行regedit 來啟動。另見 WineHQ 關於有用的註冊表鍵的文檔。
  • control 是 Wine 的 Windows 控制面板的實現,可以通過運行 wine control 來啟動。
  • 完整列表見 WineHQ 的命令列表

WINEPREFIX

默認情況下,Wine 將其配置文件和安裝的 Windows 程序存儲在 ~/.wine ,通常會把此目錄叫作「Wine prefix」或「Wine bottle」。當您運行 Windows 程序或 Wine 的捆綁程序(如 winecfg)時,它會自動創建/更新。前綴目錄還包含一個目錄,您的 Windows 程序將其視為 c: ( C 盤)。

注意:Wine 前綴不兼容舊版本。新版本的Wine會在必要時自動升級舊前綴,舊版本的 Wine 使用升級後的前綴可能會出錯。(Lutris-GE-7.0-8-LoL 版本說明中有提到類似問題)

您可以通過 WINEPREFIX 環境變量指定 Wine 使用的前綴位置。如果您希望為不同的 Windows 程序使用單獨的配置,這會非常有用。當 Wine 在指定的 WINEPREFIX 第一次運行時,Wine 將自動創建一個帶有 C 盤和註冊表信息的目錄。

例如,如果您分別執行命令 env WINEPREFIX=~/.win-a wine program-a.exeenv WINEPREFIX=~/.win-b wine program-b.exe ,這兩個程序將分別在 ~/.win-a~/.win-b 路徑下有各自單獨的 C 盤目錄和註冊表配置。

警告:Wine不是沙盒!運行在 Wine 下的程序仍然可以訪問外部系統的內容!(例如, Wine 會默認將 / 映射到 Z:,無論哪個 Wine 前綴)

若要在不運行 Windows 程序或其他圖形工具的情況下創建前綴,可以執行:

$ env WINEPREFIX=~/.customprefix wineboot -u

WINEARCH

Wine默認使用一個64位環境。你可以使用環境變量 WINEARCH 控制這一行為。 例如您可以刪除或重命名 ~/.wine 目錄,之後執行 $WINEARCH=win32 winecfg 來創建一個32位的 Wine 環境。不明確配置 WINEARCH 會默認創建64位環境。

我們可以結合 WINEPREFIX 來分別創建32位和64位環境

$ WINEARCH=win32 WINEPREFIX=~/win32 winecfg
$ WINEPREFIX=~/win64 winecfg

WINEARCH 也對一些其他程序生效,例如 #Winetricks(以 Steam 為例)

$ WINEARCH=win32 WINEPREFIX=~/.local/share/wineprefixes/steam winetricks steam

確認已經創建的 Wine Prefix 是哪種環境需要檢查其註冊表內容。下面的命令通過查找 ~/.wine 目錄下的註冊表文件內容,檢查其包含 #arch-win32 還是 #arch=win64 來確認其架構類型。

$ grep '#arch' ~/.wine/system.reg

字體

如果 Wine 應用程式的字體存在丟失、無法正常顯示等問題,您可以嘗試用軟連結的方式,將系統字體文件映射到對應 #WINEPREFIX 中:

$ cd ${WINEPREFIX:-~/.wine}/drive_c/windows/Fonts && for i in /usr/share/fonts/**/*.{ttf,otf}; do ln -s "$i" ; done

Wine 使用 FreeType 渲染字體,因此在一些情況下,您可以嘗試修改 FreeType 的一些配置。例如您可以嘗試設置如下的環境變量修改 FreeType 的解析器版本:

FREETYPE_PROPERTIES="truetype:interpreter-version=35"

此外,您也可以嘗試在 Wine Prefix 中安裝微軟的 TrueType 字體,詳見微軟字體。也可以考慮使用 #Winetricks ,執行 winetricks corefonts ,如果仍存在問題,可以嘗試執行 winetricks allfonts

您還可以通過修改 Wine 註冊表的方式添加字體別名,以便 Wine 使用系統字體。

以中文用戶常用字體 Noto Sans CJK SC 為例,將以下文本保存為 chs.reg

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"MS Shell Dlg"="Noto Sans CJK SC"
"MS Shell Dlg 2"="Noto Sans CJK SC"
"SimSun"="Noto Sans CJK SC"
"Microsoft YaHei"="Noto Sans CJK SC"

通過執行 wine regedit ./chs.reg即可導入以上條目。

執行相關操作後,需要關閉所有 Wine 服務並運行 winecfg 查看效果。

如果字體看起來模糊不清,可以嘗試執行下面的命令來修改 Wine 註冊表配置:

$ wine reg add 'HKEY_CURRENT_USER\Software\Wine\X11 Driver' /v ClientSideWithRender /t REG_SZ /d N

對於高解析度屏幕,可以在 winecfg 中嘗試調整 dpi 值。

您還可以參考字體配置#不支持_Fontconfig_的程序及相關頁面嘗試調整文字渲染問題。

啟用字體平滑

啟用 ClearType 字體平滑可以提高 Wine 中的字體渲染效果。 若要啟用「次像素平滑(ClearType) RGB」請創建文件並執行之後的命令:

/tmp/fontsmoothing
REGEDIT4

[HKEY_CURRENT_USER\Control Panel\Desktop]
"FontSmoothing"="2"
"FontSmoothingOrientation"=dword:00000001
"FontSmoothingType"=dword:00000002
"FontSmoothingGamma"=dword:00000578
EOF
$ WINE=${WINE:-wine} WINEPREFIX=${WINEPREFIX:-$HOME/.wine} $WINE regedit /tmp/fontsmoothing 2> /dev/null


相關內容詳見[3]

桌面項(快捷方式)

當使用 Windows 應用的安裝程序嘗試創建快捷方式時,Wine 會創建對應的 .desktop 文件。Arch Linux 中這些文件的默認位置是:

  • 桌面快捷方式位於 ~/Desktop 下。
  • 開始菜單條目位於 ~/.local/share/applications/wine/Programs/ 下。
注意:Wine 不支持為所有用戶安裝 Windows 應用程式,所以 Wine 不會把 .desktop 文件放到 /usr/share/applications 中。詳見 WineHQ bug 11112
提示:如果安裝軟體時桌面項沒有被創建或已經丟失,可以嘗試執行 wine winemenubuilder

為 Wine 的工具創建桌面項

默認情況下,Wine 附帶的軟體不會創建桌面項(例如 winecfg winebrowser 等)。這可以通過安裝 wine-installerAURwine-installer-gitAUR (後者不依賴 #Winetricks )來解決,您也可以根據下面的說明手動創建相關條目。

下面的文件您可以保存在 ~/.local/share/applications/wine/ 目錄下:

wine-browsedrive.desktop
[Desktop Entry]
Name=Browse C: Drive
Comment=Browse your virtual C: drive
Exec=wine winebrowser c:
Terminal=false
Type=Application
Icon=folder-wine
Categories=Wine;
wine-uninstaller.desktop
[Desktop Entry]
Name=Uninstall Wine Software
Comment=Uninstall Windows applications for Wine
Exec=wine uninstaller
Terminal=false
Type=Application
Icon=wine-uninstaller
Categories=Wine;
wine-winecfg.desktop
[Desktop Entry]
Name=Configure Wine
Comment=Change application-specific and general Wine options
Exec=winecfg
Terminal=false
Icon=wine-winecfg
Type=Application
Categories=Wine;

並在~/.config/menus/applications-merged/目錄創建如下文件:

wine.menu
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
  <Name>Applications</Name>
  <Menu>
    <Name>wine-wine</Name>
    <Directory>wine-wine.directory</Directory>
    <Include>
      <Category>Wine</Category>
    </Include>
  </Menu>
</Menu>

如果這些文件顯示的圖標存在問題,可能是您使用的圖標主題中沒有這些程序的圖標,或者您也可以手動指定應用的圖標文件。一個包含了這些內容的圖標主題是 gnome-colors-icon-themeAUR

刪除桌面項(快捷方式)

由 Wine 創建的菜單條目位於 ~/.local/share/applications/wine/Programs/目錄。 如果要刪除 Wine 創建的 MIME 綁定,可以執行以下命令(摘自 Wine FAQ,請仔細確認後執行) :

$ rm ~/.local/share/mime/packages/x-wine*
$ rm ~/.local/share/applications/wine-extension*
$ rm ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
$ rm ~/.local/share/mime/application/x-wine-extension*

此外您也可以通過移除在 /.config/menus/ 中的 wine-*.menu 文件以移除 KDE 應用菜單中 Wine 子菜單的圖標。

主題

類似 Windows XP 外觀的主題可以在 這裡下載。可以參考 Wine 維基頁面進行安裝。安裝完成後,可以使用 winecfg 選擇對應的主題。

注意:上面提到的主題只能安裝在32位,系統兼容性配置為 Windows XP 的 #WINEPREFIX 中。要將其安裝在64位環境上,您需要在的32位 Wine Prefix 環境中安裝該主題,之後從32位 Wine Prefix 環境下的 drive_c/Windows/Resources/Themes 目錄內,將 Zune 文件夾和 Zune.theme 文件複製到您使用的環境中。

wine-staging 用戶可以嘗試在 winecfg 中配置啟用「Enable GTK3 Theming」令相關應用適配當前的 GTK 主題。

印表機

為了在32位的 #WINEPREFIX 中(例如微軟 Word)使用您已經安裝的印表機(包括本地印表機和網絡印表機),您需要安裝 lib32-libcups ,並在之後重啟所有 Wine 服務及您的應用程式。

網絡

一些32位的程序可能需要安裝 lib32-gnutls 來創建 TLS 或 HTTPS 連接。

對於 ICMP(ping 命令),需要為 Wine 配置相關權限(Capabilities),詳見 WineHQ FAQ

# setcap cap_net_raw+epi /usr/bin/wine-preloader

如果執行上述命令後,您遇到了一些問題(例如程序異常、權限問題等),您可以通過下面的命令取消相關權限:

# setcap -r /usr/bin/wine-preloader

使用

警告:不要以 root 身份運行 Wine 或安裝 Windows 應用程式!詳見 Wine FAQ

Wine 用戶手冊可以為您提供 Wine 使用說明。

Wine 程序資料庫(AppDB)可以提供部分特定 Windows 程序在 Wine 中運行的參考信息。

Wayland

警告:Wine 的 Wayland 驅動仍處於實驗階段

目前 Wine 在 Wayland 環境下通過 XWayland 進行渲染,這可以為大部分用戶提供良好的體驗。在 9.0rc1 版本後,Wine 在原生 Wayland 支持上取得了較大進展,已經可以在一些情境下使用。

如果您希望嘗試 Wine 的原生 Wayland 支持,可以嘗試下面的內容:

  • Wine 9.22 後的版本執行下面的命令修改註冊表配置:
$ wine reg add 'HKEY_CURRENT_USER\Software\Wine\Drivers' /v Graphics /t REG_SZ /d 'x11,wayland'
  • 通過取消設置 DISPLAY 環境變量,來強制使用 Wayland 驅動
$ env -u DISPLAY wine example.exe

如果取消設置 DISPLAY 導致 Wine 運行出現問題,請檢查您安裝的 Wine 版本是否在構建時添加了 Wayland 驅動支持。

停止運行 Wine 程序

在執行 wine 的終端按下 Ctrl+Z 或在 wineconsole 的終端中按下 Ctrl+C,只是將進程轉入了後台運行。

假設當前進程如下:

$ ps -xo pid,cmd
    PID CMD
    297 -bash
    933 /usr/bin/wineserver
    939 C:\windows\system32\services.exe
    942 C:\windows\system32\winedevice.exe
    950 C:\windows\system32\explorer.exe /desktop
    954 C:\windows\system32\winedevice.exe
    965 C:\windows\system32\plugplay.exe
    977 C:\windows\system32\svchost.exe -k LocalServiceNetworkRestricted
    984 C:\windows\system32\rpcss.exe
    997 mbserver.exe
   1017 start.exe /exec
   1019 C:\windows\system32\conhost.exe --unix --width 169 --height 40 --server 0x10
   1021 Z:\home\wineuser\mbserver.exe
   1030 ps -xo pid,cmd

所有正在運行中的 winewineconsole 進程都可以被 wineserver -k 命令終止。例如:

$ wineserver -k 15

這個命令可以與 #WINEPREFIX 關聯,因此當您使用自己配置的 WINEPREFIX 時,可以執行:

$ WINEPREFIX=~/wine/my-prefix wineserver -k

一個與上面操作等價的命令是直接將相關進程終止掉:

$ kill 997 1021

提示與技巧

Wineconsole

通常情況下,你可能需要運行.exe來修補遊戲文件,例如一個老遊戲的寬屏 mod,通過 Wine 正常運行.exe可能不會產生任何效果。在這種情況下,你可以打開一個終端,運行以下命令。

$ wineconsole cmd

然後轉到該目錄,從那裡運行.exe文件。

Winetricks

Winetricks是一個可以幫助用戶安裝一些 Windows 程序所需依賴的腳本。可安裝的組件包括 Direct9、MSXML(Office 2007 和 Internet Explorer 所需依賴)、Visual 運行時庫和很多其它組件。

安裝winetricks(或winetricks-gitAUR)後,直接執行下面命令即可使用:

$ winetricks

如果希望使用圖形界面,需要安裝 zenity(GTK)或 kdialog(QT)。

性能

CSMT

CSMT 是 Wine 使用的一項技術,它為 OpenGL 調用使用了一個單獨的線程,以顯著提高性能。從 Wine 3.2 開始,CSMT 被默認啟用。

更多:

強制使用OpenGL模式運行遊戲

有些遊戲可能有 OpenGL 模式,其性能可能比其默認的 DirectX 模式更好。雖然啟用 OpenGL 渲染的是 "特定應用",但許多遊戲可以使用 -opengl 參數。

$ wine /path/to/3d_game.exe -opengl

你應該參考你的應用程式文檔和 Wine 的官網 AppDB 來了解這些應用程式的具體信息。

VKD3D-Proton

VKD3D-ProtonVKD3D 的一個 fork,這旨在用 Vulkan 實現完整的 Direct3D 12 API。該項目是 Proton 中 Direct3D 12 支持的開發項目,旨在提高 DirectX 12 遊戲的性能和兼容性。

為使用它,安裝 vkd3d-proton-binAUR。然後運行下面的指令來在你的 Wine 前綴中激活它(默認是 ~/.wine)。

$ WINEPREFIX=your-prefix setup_vkd3d_proton install
警告: VKD3D-Proton 會覆蓋 DirectX 12 DLL,這也許會被一些在線多玩家遊戲認定為作弊,然後你的帳戶可能會被 banned。用的時候小心!

DXVK

DXVK 是在 Vulkan 上對 DirectX 9、10 和 11 的一個可能的新實現。這應該有更好的性能,在某些情況下,甚至更好的兼容性。例如,《戰地1》在 DXVK 下運行。另一方面,DXVK 並不支持所有的 Wine 遊戲(目前)。

安裝 dxvk-binAUR 以使用它. 然後運行以下命令,在 wine 前綴中激活它(默認為 ~/.wine):

$ WINEPREFIX=your-prefix setup_dxvk install
警告:DXVK 覆蓋了 DirectX 10 和 11 的許多dll,這可能被認為是在線多人遊戲中的作弊行為,並可能使你的帳戶被封。使用時風險自負!

Gallium Nine

這裡是Gallium Direct3D state tracker,協同開源的基於 gallium 的驅動(可用於絕大部分的 AMD 與 Intel 顯卡),目標是可提供接近真實的 DirectX 9 性能。在大多數情況下,它相對上游 wine 故障更少,卻擁有著加倍的性能。相對於 CSMT,它消耗更少的 CPU 分時。

安裝 wine-nine 來使用它。這是個單獨包,可以同任何 wine 版本一起安裝。使用 wine ninewinecfg 來檢查它是否啟用。

對於老 Intel 顯示卡(en4-7: GMA 3000, GMA 4500, HD 2000-5000; 2006-2014 年),自 Mesa 21.2 開始,Crocus Gallium 驅動需要使用 i965 。Export 這個環境變量在運行 wine 之前:

MESA_LOADER_DRIVER_OVERRIDE=crocus

取消註冊已經存在的Wine檔案關聯

默認情況下,Wine 接管了許多格式的默認程序。一些(例如 vbs 或是 chm )都是 Windows 獨有的,並且用 Wine 打開他們是方便的。但是,很多其它的格式(例如 gif、{{ic}jpeg}}、txtjs 在Wine的模擬 Internet Explorer 或 Notepad 中打開是煩人的

Wine的檔案關聯都設定在 ~/.local/share/applications/ 作為 wine-extension-extension.desktop 檔案。刪除這些檔案對應的就像你想的那樣取消註冊了。或者,刪除所有的 wine 拓展:

$ rm -f ~/.local/share/applications/wine-extension*.desktop
$ rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*

接下來,刪除舊緩存:

$ rm -f ~/.local/share/applications/mimeinfo.cache
$ rm -f ~/.local/share/mime/packages/x-wine*
$ rm -f ~/.local/share/mime/application/x-wine-extension*

並且,升級這些緩存:

$ update-desktop-database ~/.local/share/applications
$ update-mime-database ~/.local/share/mime/

請注意,如果應用程式再次設置文件關聯,Wine仍將創建新的文件關聯,甚至重新創建文件關聯。

阻止 Wine 創建文件關聯

注意:必須對每個 WINEPREFIX 執行此操作,除非您選擇更改 /usr/share/wine/wine.inf,否則不應更新文件關聯。

這個方法避免建立檔案類型關聯,但是保留建立的 XDG .desktop 檔案(你可能會在選單中看到它們)。

如果你想阻止 wine 通過 winecfg 創建檔案關聯,你必須不檢查桌面通訊選項卡下的「管理檔案關聯」複選框,見 Wine FAQ

為了創建相同的更改通過註冊表,在以下的路徑加入字符串值 N啟用

HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations

你也許需要先創建鍵 FileOpenAssociations

為了在命令行創建相同的改變,運行下面的指令:

$ wine reg add "HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations" /v Enable /d N

如果你想去應用默認設置在新的 Wine 前綴,編輯 /usr/share/wine/wine.inf 並加入這一行到 Services 段下:

HKCU,"Software\Wine\FileOpenAssociations","Enable",2,"N"

為了防止包升級覆蓋設置檔案,創建一個 pacman 鉤子來讓這個變化自動進行:

/etc/pacman.d/hooks/stop-wine-associations.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Path
Target = usr/share/wine/wine.inf

[Action]
Description = Stopping Wine from hijacking file associations...
When = PostTransaction
Exec = /bin/sh -c '/usr/bin/grep -q "HKCU,\"Software\\\Wine\\\FileOpenAssociations\",\"Enable\",2,\"N\"" /usr/share/wine/wine.inf || /usr/bin/sed -i "s/\[Services\]/\[Services\]\nHKCU,\"Software\\\Wine\\\FileOpenAssociations\",\"Enable\",2,\"N\"/g" /usr/share/wine/wine.inf'

See Pacman#Hooks

自動使用 Wine 執行 Windows 程序

wine 軟體包會安裝一個 binfmt 文件,這可使你能夠直接運行 Windows 程序,例如,./myprogram.exe 將與 wine ./myprogram.exe 效果相同。服務默認在開機時啟動,如果在安裝 Wine 之後還沒有重啟過,啟動 systemd-binfmt.service 即可。

注意:確保 Windows 程序可執行,否則程序將不會運行。

雙顯示器具有不同的解析度

如果您在雙顯示器設置與不同的顯示解析度方面有問題,這可能是缺少了 lib32-libxrandr

安裝 lib32-libxinerama 也許可以解決 wine 中的雙頭問題(例如,最底部或右側的顯示器的程序中的按鈕與選單不可被按下,該區域中應用程式的界面不可重繪,離開應用程式區域後拖動滑鼠光標狀態受阻)。

燒錄光碟

為了燒錄 CD 或者是 DVD,你將需要加載sg內核模塊

正確的掛載光碟

一些程序會將光碟作為一個設備檢查。他們可能只檢查數據,在這種情況下,可將相應路徑配置為「winecfg」中的 CD-ROM 驅動器。

但是。其它程序將找到媒體名稱或/和序列號,在這種情況下映像要用特殊的屬性掛載。

一些虛擬設備無法處理這些元數據,就像是基於 FUSE 的虛擬設備(譬如 Acetoneiso)。 CDemu 將會正確的處理它。

遊戲內顯示幀數

Wine 有一個內置的 FPS 檢測器,在環境變量 WINEDEBUG=fps 設定的情況下,它會運行在所有圖形程序上。這將會輸出幀率到標準輸出。你可以顯示幀率到屏幕最上面通過 xosd 包中的 osd_catwinefps.sh 為它的幫助腳本。

在單獨的用戶帳戶下運行 Wine

在一個專門創建的用戶帳戶下運行Wine可能是可取的,以便減少對 Windows 應用程式訪問你的主目錄的擔憂。

第一步,建立一個用戶帳戶給Wine:

# useradd -m -s /bin/bash wineuser

現在切換到另一個 TTY,像平常一樣啟動你的X WM或DE,或者繼續閱讀......

注意:以下方法僅在為Xorg啟用root時有效。關於如何在主用戶下執行xhost命令的更多信息,請參見Xorg#Rootless Xorg

之後,為了使用這個新的用戶帳戶打開Wine應用程式,你需要將這個新用戶添加到X伺服器的權限列表中。

$ xhost +SI:localuser:wineuser

最後,你可以通過以下命令來運行Wine,該命令使用env來啟動Wine,並加入它所期望的環境變量。

$ sudo -u wineuser env HOME=/home/wineuser USER=wineuser USERNAME=wineuser LOGNAME=wineuser wine arguments

可以使用如下的shell腳本,使用Wine運行Windows應用程式的過程自動化:

/usr/local/bin/runaswine
#!/bin/bash
xhost +SI:localuser:wineuser
sudo -u wineuser env HOME=/home/wineuser USER=wineuser USERNAME=wineuser LOGNAME=wineuser wine "$@"

Wine程序可以被通過以下指令啟動:

$ runaswine "C:\path\to\application.exe"

為了在每次以其他用戶身份運行Wine時不被要求輸入密碼,可以在sudoers文件中加入以下條目。mainuser ALL=(wineuser) NOPASSWD: ALL。更多信息見Sudo#Configuration

建議以Wine用戶身份運行winecfg,並在配置窗口的 "桌面集成 "部分刪除Wine用戶主目錄以外的所有目錄綁定,這樣,使用Wine運行的程序就無法讀取特殊用戶主目錄以外的任何文件。

請記住,如果使用了PulseAudio,那麼在以這種方式運行的Wine程序中,音頻可能將無法發揮作用。請參閱 PulseAudio/Examples#Allowing multiple users to share a PulseAudio daemon 以了解關於允許Wine用戶訪問主用戶的PulseAudio daemon的信息。

Tmpfs 上的臨時目錄

為了防止 Wine 將臨時文件寫到物理硬碟上,需要設置一個另外的位置,例如 tmpfs。刪除 Wine 臨時文件的默認目錄並建立一個軟連結:

$ rm -r ~/.wine/drive_c/users/$USER/Temp ~/.wine/drive_c/windows/temp
$ ln -s /tmp/ ~/.wine/drive_c/users/$USER/Temp
$ ln -s /tmp/ ~/.wine/drive_c/windows/temp

防止 Mono/Gecko 的安裝

如果 Gecko 或/和 Mono 都不在系統或 Wine 前綴中,Wine 將提示從網路上下載他們。如果你並不需要 Gecko 或/和 Mono,你也許希望關閉這個提示,通過設置 WINEDLLOVERRIDES 環境變量mscoree=d;mshtml=d.。

Vulkan

默認的 wine Vulkan ICD 加載器在大多數程序中都工作地很好,但是不支持高級特性,例如 Vulkan 層。為使用這些特性,你需要安裝官方的 Vulkan SDK,見原始的Vulkan補丁作者的 GitHub page 的第二到四步。

刪除Wine文件綁定

因為安全因素,移除 Wine 綁定來讓 Windows 程序無法直接從文件管理器或是瀏覽器(Firefox 提供直接使用 Wine 打開 EXE 文件的方法)或許是有用的。 假如你想這麼做,你也需要加入下面的內容到 /etc/pacman.conf[options] 部分。

NoExtract = usr/lib/binfmt.d/wine.conf
NoExtract = usr/share/applications/wine.desktop

WineASIO

如果你需要 Wine 下的專業的音頻支持,你可以使用 wineasioAUR 來提供一個給 wine 的 ASIO 界面來讓你可以使用 JACK

為了使用 wineasio,你必須將自己加入realtime用戶組

然後你需要註冊 wineasio 到你的選定的 wine 前綴。註冊32位或/和64位版本作為需要的:

$ regsvr32 /usr/lib32/wine/i386-windows/wineasio.dll
$ wine64 regsvr32 /usr/lib/wine/x86_64-windows/wineasio.dll

疑難解答

Wine 用戶指北Wine FAQ (特別注意這個 Troubleshooting 會話)以參閱通用指北。

也請將運行程序的建議也反饋到 Wine AppDB

XWayland問題

如果你在 XWayland 下使用 wine,你可以在 winecfg 的顯示菜單啟用「模擬虛擬桌面」來避免以下的問題:

  • 窗口閃動;
  • 錯誤的窗口位置;
  • 錯誤的滑鼠位置和點擊;
  • 鍵盤監察錯誤。

鍵盤輸入不工作

這可能是由於窗口管理器沒有切換焦點造成的。在winecfg圖形標籤中,禁用'允許窗口管理器...'選項,或者用'模擬虛擬桌面'設置窗口模式。

  • 有人建議切換所有的 "窗口設置",點擊 "應用",然後把它們改回來。如果這不起作用,請嘗試上述方法。

如果在取消應用程式的焦點後,鍵盤不能工作,請嘗試編輯註冊表。

  • HKEY_CURRENT_USER\Software\Wine\X11 Driver下,添加一個字符串值 UseTakeFocus 並將其設置為 N
  • 另外,你也可以用 winetricks 來設置這個值。
winetricks usetakefocus=n

參見