Wine - Arch Linux 中文维基

跳至內容

# Wine

出自 Arch Linux 中文维基

相關文章

- CrossOver
- Deepin-wine
- Wine package guidelines

翻譯狀態：

- 本文（或部分內容）譯自 Wine，最近一次同步於 2025-07-28，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

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

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

警告：

- Wine 並非與你的系統隔離：如果你使用你的用戶帳戶訪問某個文件或資源，那麼在 Wine 中運行的程序也可以。參見#在單獨的用戶帳戶下運行 Wine和安全#沙盒程序了解可能的預防措施。
- Wine 也可以運行惡意軟體（參見 Wine 關於惡意軟體兼容性的 FAQ）

## 安裝

可以通過 wine包（開發版），wine-stableAUR（穩定版）或 wine-staging包（測試版本）來安裝 Wine。Wine Staging 是 Wine 的修補版本, 其中包含了漏洞修復和尚未集成到穩定或開發分支中的特性。

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

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

### 可選依賴項

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

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

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

#### 圖形驅動程序

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

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

    直接渲染被禁用,很可能是 OpenGL 驱动程序未被正确安装

注意：安裝正確的庫後，您可能需要重新啟動 Xorg 。

#### 聲音

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

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

- ALSA ：安裝 lib32-alsa-lib包 和 lib32-alsa-plugins包
- PulseAudio ：安裝 lib32-libpulse包
- PipeWire ：安裝 lib32-pipewire包 以及根據需求安裝下面的包：
  - 安裝 pipewire-pulse包 和 lib32-libpulse包 以使用 PulseAudio 作為聲音前端
  - 安裝 pipewire-alsa包、lib32-alsa-lib包 和 lib32-alsa-plugins包 以使用 ALSA 作為聲音前端
- OSS ： 安裝 lib32-alsa-oss包

如果 winecfg 仍然無法檢測到音頻驅動程序（Selected driver: (none)）， 請嘗試配置註冊表。例如，在一個 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 頁面）

- TLS 的 32 位支持可以安裝 lib32-gnutls包
- 手柄和遊戲杆的 32 位支持可以安裝 lib32-sdl2AUR
- 媒體播放的 32 位支持可以根據需求安裝 lib32-gst-plugins-base包、 lib32-gst-plugins-good包、lib32-gst-plugins-badAUR、lib32-gst-plugins-uglyAUR 和 lib32-gst-libavAUR
- 對於 NTLM 驗證可以安裝 samba包

### Wine前綴內依賴

除了系統依賴項之外，一些程序還需要額外的字體或 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 通常使用以下方法：

- control - Wine 對 Windows 控制面板的實現，可以通過運行 `wine control` 啟動。
- regedit - 是 Wine 的註冊表編輯工具，可以通過運行 `regedit` 來啟動。另見 WineHQ 關於有用的註冊表鍵。
- winecfg——Wine 的 GUI 配置工具，可以通過 `winecfg` 運行。

- 完整列表見 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.exe` 和 `env 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

如果你已經安裝了 winetricks包 ，有更簡單的方式：

    winetricks fontsmooth=rgb

相關內容詳見[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-installerAUR 或 wine-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 綁定的不想使用的擴展，可以執行以下命令（摘自 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

所有正在運行中的 `wine` 和 `wineconsole` 進程都可以被 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 被默認啟用。

注意，CSMT可以會在某些應用中損害性能。如果這種情況發生，通過運行 `wine regedit` 並設置 HKEY_CURRENT_USER -> Software > Wine > Direct3D > csmt 的 DOWRD 值為 0x00 （禁用）。

更多信息：

- Phoronix 論壇討論

#### 強制使用OpenGL模式運行遊戲

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

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

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

#### DXVK

DXVK 是在 Vulkan 上對 DirectX 8,9,10 和 11 的一個可能的新實現。其在大部分遊戲上的性能和兼容性優於 WineD3D。其不支持 DirectX 12，另請參閱 #VKD3D-Proton。DXVK 和 VKD3D-Proton 可以且應當一同安裝以支持所有 DirectX 版本。

用 #Winetricks 來安裝最新的版本：

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

    $ WINEPREFIX=your-prefix winetricks dxvk

你可以安裝一個特殊的版本。例如，若要安裝一個對驅動要求較低的 DXVK 版本，使用以下命令：

    $ WINEPREFIX=your-prefix winetricks dxvk1103

或者，安裝 dxvk-mingwAUR 或 dxvk-binAUR。然後運行下面的指令來在你的 Wine 前綴中激活它（默認是 `~/.wine`）。

    $ WINEPREFIX=your-prefix setup_dxvk install --symlink

#### VKD3D-Proton

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

注意：儘管這些 DLL 名稱中帶有「Proton」，它們在普通版本的 Wine 中也能正常工作，並且可以與 DXVK 一起使用 #DXVK 。

為使用最新的版本，使用 #Winetricks：

    $ WINEPREFIX=your-prefix winetricks vkd3d

或者安裝 vkd3d-proton-mingwAUR 或 vkd3d-proton-binAUR 。然後運行下面的指令來在你的 Wine 前綴中激活它（默認是 `~/.wine`）。

    $ WINEPREFIX=your-prefix setup_vkd3d_proton install --symlink

警告： VKD3D-Proton 會覆蓋 DirectX 12 DLL，這可能會被一些在線多玩家遊戲認定為作弊，從而 封禁 您的帳戶。用的時候小心！
提示：僅對於 AMDGPU 用戶：當搭配 Gamescope 使用時，DXVK v2.1 及以上版本支持 HDR10 顯示器。詳情請參見 HDR 顯示器支持

#### Gallium Nine

這一章節正在考慮移除。

原因: No point in keeping historical details if they have no relevance. (在 Talk:Wine 討論)

Gallium Nine was available for Mesa users only. But now Gallium Nine have been totally dropped from Mesa. And so, now you cannot use Gallium Nine at all. Now you should use #DXVK instead.

#### xSync

Some games heavily use windows sync objects to run multi-threaded workloads, Wine is able to provide a userspace implementation through wineserver, however most of the time the default implementation have major performance impact in CPU bound scenarios.

Currently there are 3 options available to improve the performance, and you should use only one of it at same time:

- ESync - User-space eventfd-based synchronization.
  - Not included in wine包. Included in wine-staging包, but not enabled by default.
  - Enabled by default in Proton unless FSync is available. FSync is not available if you use very old release of Linux kernel.

- FSync - In-kernel Futex2-based implementation of synchronization, should have better performance than ESync.
  - Enabled by default in Proton, however for Wine you will need a patched version.

- NTSync - In-kernel implementation of synchronization, that compared to ESync and FSync, NTsync closely emulates the behavior of MS Windows implementation, which currently not implemented yet in upstream Wine, and not included in Proton, but require to be implemented in Wine or/and Proton to NTsync can work. However, out-of-tree patches exist for both. Usually is on par with FSync or smoother. NTSync is now implemented in kernel and require Linux 6.14 or newer. Also you should manually load "ntsync" Linux kernel module, because it disabled by default. For example:

    /etc/modules-load.d/ntsync.conf

    # Automaticaly load ntsync kernel module at every boot

    ntsync

注意：None of those options are now available in wine包, but NTsync maybe soon.

To enable ESync Export the following environment variable before running Wine:

    WINEESYNC=1

Or for FSync with patched Wine:

    WINEFSYNC=1

NTsync does not require setting an environment variable.

Also MangoHud can shows the absence or presence of ESync, FSync or NTsync in games if you have enabled an indication of wsync in its config file.

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

默認情況下，Wine 接管了許多格式的默認程序。一些（例如 `vbs` 或是 `chm` ）都是 Windows 獨有的，並且用 Wine 打開他們是方便的。但是，很多其它的格式（例如 `gif`、`jpeg`、`txt`、`js` 在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 創建文件關聯

注意：必須對每個 Wine 前綴執行此操作，除非您選擇更改 `/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'

見 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_cat`。winefps.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` 中加入下面的 NoExtract 行：

    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 FAQ (特別注意這個 Troubleshooting 選段)以參閱通用指南。

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

### XWayland問題

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

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

### 鍵盤輸入不工作

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

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

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

- 在 `HKEY_CURRENT_USER\Software\Wine\X11 Driver` 下，添加一個字符串值 `UseTakeFocus` 並將其設置為 `N` 。
- 另外，你也可以用 winetricks 來設置這個值。

    $ winetricks usetakefocus=n

或者使用wine註冊表

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

### 應用程式啟動失敗

有些舊的遊戲和應用程式會假設當前工作目錄與可執行文件所在目錄相同。如果從其他位置啟動這些可執行文件，可能會導致它們無法正常啟動。在運行 Wine 之前，使用 `cd path_containing_exe` 來排除這種可能性。

## 參見

- Wine 主頁
- Wine 維基
- Wine 程序資料庫 (AppDB) - 關於運行一些特定的 Windows 程序的訊息 (已知問題、指北、等級、其它關於程序的訊息)
- Wine 論壇 - 一個問問題的好地方在你看了 FAQ 和 AppDB 後。
- Gentoo:Wine
- Darling - 一個模擬 MacOS 程序的小項目
- WineASIO - WineASIO 項目的 Github Page，有更多的訊息。

分類：​

- 仿真
- 遊戲
- 使用「模板:Remove」標記的章節

Wine
新增話題