Wine
Wine (Wine Is Not an Emulator) is an application compatibility layer that allows Microsoft Windows software to run on Linux and other POSIX-compliant operating systems. This article deals with installing, configuring, and maintaining a general purpose Wine environment on Gentoo.
Packaging details
As many Wine users know, there are often regressions or an application works better on one version of wine than another. Going forward, packaging in Gentoo will allow simultaneous installation of multiple versions of Wine.
Additionally, to expedite vanilla releases as well as permit multiple configurations for each Wine installation, the major patchsets have been split out into separate packages.
Quick start
For most users, worrying about the various packages and what they do should not be a concern.The split packaging and slotting is a power user feature, and most users will be OK with simply installing virtual/wine, which chooses which wine version for the user.
root #
emerge --ask virtual/wine
Wine variants
- app-emulation/wine-vanilla: upstream Wine with no external patchsets.
- (like if the old packaging forced USE="-staging -d3d9".)
- app-emulation/wine-staging: Wine with Wine-Staging's patchset.
- (like if the old packaging forced USE="+staging -d3d9".)
- app-emulation/wine-proton: Wine with Valve Software's patchset.
- (like if the old packaging forced USE="+staging -d3d9".)
- Provided natively by the Steam client, but can be manually emerged if desiredt.
- app-emulation/wine-d3d9: Wine with Ixit's Gallium Nine patchset.
- (like if the old packaging forced USE="-staging +d3d9".)
- Deprecated and unmaintained, available only via the Wine overlay. Use app-emulation/gallium-nine-standalone instead.
- app-emulation/wine-any: Wine with any of the patchsets or flags.
- (exactly like the old packaging regarding USE flags.)
- Deprecated and unmaintained, available only via the Wine overlay.
- wine-any exists to allow the user to build any combination that they'd like (like the old packaging). This means the user could use wine-any to use both Wine-Staging and Gallium Nine. Alternatively, the user could use wine-any to try out another configuration from other packages. For example, the user could build wine-vanilla without PulseAudio, and could build wine-any with PulseAudio. The sky is the limit on how a user may choose to use app-emulation/wine-any.
Choosing a variant
- virtual/wine manages selection of a variant in such a way as to provide the best experience to the user. Most users don't want to be dealing with external patchsets. External patchsets may introduce bugs that don't exist in the vanilla Wine release and can make using Wine more complicated for the user. External patchsets also can be released up to a week or two after vanilla wine (or each other), meaning that the period for releases can be significantly slower for those using app-emulation/wine-staging.
- What if I want to manually choose a variant anyway? Which should I choose?
- This really isn't a question that the authors of this document can answer. Typically, the logic works as follows:
- Unless you need something more, choose app-emulation/wine-vanilla.
- If an application requires advanced features only available in Wine-Staging, choose app-emulation/wine-staging.
- If you do research online and find that Wine-Staging provides better performance for an application, choose app-emulation/wine-staging.
Installation
USE flags
USE flags for virtual/wine Virtual for Wine that supports multiple variants and slotting
USE flags for app-emulation/wine-vanilla Free implementation of Windows(tm) on Unix, without external patchsets
X
|
Add support for X11 |
alsa
|
Add support for media-libs/alsa-lib (Advanced Linux Sound Architecture) |
capi
|
Enable ISDN support using net-libs/libcapi |
crossdev-mingw
|
Use sys-devel/crossdev for the toolchain rather than dev-util/mingw64-toolchain (requires manual setting up) |
cups
|
Add support for CUPS (Common Unix Printing System) |
custom-cflags
|
Build with user-specified CFLAGS (unsupported) |
dos
|
Pull in games-emulation/dosbox to run DOS applications |
fontconfig
|
Support for configuring and customizing font access via media-libs/fontconfig |
gecko
|
Enable mshtml support using app-emulation/wine-gecko |
gphoto2
|
Add digital camera support |
gstreamer
|
Add support for media-libs/gstreamer (Streaming media) |
kerberos
|
Add kerberos support |
llvm-libunwind
|
Use sys-libs/llvm-libunwind instead of sys-libs/libunwind |
mingw
|
Build PE files using a MinGW toolchain for better compatibility |
mono
|
Enable .NET support using app-emulation/wine-mono |
netapi
|
Enable support for configuring remote shares using net-fs/samba |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
odbc
|
Add ODBC Support (Open DataBase Connectivity) |
opencl
|
Enable OpenCL support |
opengl
|
Add support for OpenGL (3D graphics) |
osmesa
|
Enable off-screen rendering (OpenGL in bitmaps) support |
pcap
|
Support packet capture software (e.g. wireshark) |
perl
|
Install helpers that require perl (winedump/winemaker) |
pulseaudio
|
Add sound server support via media-libs/libpulse (may be PulseAudio or PipeWire) |
samba
|
Pull in net-fs/samba with winbind for NTLM auth support |
scanner
|
Add support for scanner hardware (e.g. build the sane frontend in kdegraphics) |
sdl
|
Enable gamepad support using media-libs/libsdl2 |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
smartcard
|
Enable smartcard support |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
strip
|
Allow symbol stripping to be performed by the ebuild for special files |
truetype
|
Add support for FreeType and/or FreeType2 fonts |
udev
|
Enable virtual/udev integration (device discovery, power and storage device support, etc) |
udisks
|
Enable storage management support (automounting, volume monitoring, etc) |
unwind
|
Add support for call stack unwinding and function name resolution |
usb
|
Add USB support to applications that have optional USB support (e.g. cups) |
v4l
|
Enable support for video4linux (using linux-headers or userspace libv4l libraries) |
vulkan
|
Add support for 3D graphics and computing via the Vulkan cross-platform API |
wayland
|
Enable dev-libs/wayland backend |
wow64
|
Enable running 32bit applications without 32bit ELF multilib by mapping to 64bit calls (experimental/WIP, USE=abi_x86_32 is recommended for complete support) |
xcomposite
|
Enable support for the Xorg composite extension |
xinerama
|
Add support for querying multi-monitor screen geometry through the Xinerama API |
USE flags for app-emulation/wine-staging Free implementation of Windows(tm) on Unix, with Wine-Staging patchset
X
|
Add support for X11 |
alsa
|
Add support for media-libs/alsa-lib (Advanced Linux Sound Architecture) |
capi
|
Enable ISDN support using net-libs/libcapi |
crossdev-mingw
|
Use sys-devel/crossdev for the toolchain rather than dev-util/mingw64-toolchain (requires manual setting up) |
cups
|
Add support for CUPS (Common Unix Printing System) |
custom-cflags
|
Build with user-specified CFLAGS (unsupported) |
dos
|
Pull in games-emulation/dosbox to run DOS applications |
fontconfig
|
Support for configuring and customizing font access via media-libs/fontconfig |
gecko
|
Enable mshtml support using app-emulation/wine-gecko |
gphoto2
|
Add digital camera support |
gstreamer
|
Add support for media-libs/gstreamer (Streaming media) |
kerberos
|
Add kerberos support |
llvm-libunwind
|
Use sys-libs/llvm-libunwind instead of sys-libs/libunwind |
mingw
|
Build PE files using a MinGW toolchain for better compatibility |
mono
|
Enable .NET support using app-emulation/wine-mono |
netapi
|
Enable support for configuring remote shares using net-fs/samba |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
opencl
|
Enable OpenCL support |
opengl
|
Add support for OpenGL (3D graphics) |
osmesa
|
Enable off-screen rendering (OpenGL in bitmaps) support |
pcap
|
Support packet capture software (e.g. wireshark) |
perl
|
Install helpers that require perl (winedump/winemaker) |
pulseaudio
|
Add sound server support via media-libs/libpulse (may be PulseAudio or PipeWire) |
samba
|
Pull in net-fs/samba with winbind for NTLM auth support |
scanner
|
Add support for scanner hardware (e.g. build the sane frontend in kdegraphics) |
sdl
|
Enable gamepad support using media-libs/libsdl2 |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
smartcard
|
Enable smartcard support |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
strip
|
Allow symbol stripping to be performed by the ebuild for special files |
truetype
|
Add support for FreeType and/or FreeType2 fonts |
udev
|
Enable virtual/udev integration (device discovery, power and storage device support, etc) |
udisks
|
Enable storage management support (automounting, volume monitoring, etc) |
unwind
|
Add support for call stack unwinding and function name resolution |
usb
|
Add USB support to applications that have optional USB support (e.g. cups) |
v4l
|
Enable support for video4linux (using linux-headers or userspace libv4l libraries) |
vulkan
|
Add support for 3D graphics and computing via the Vulkan cross-platform API |
wayland
|
Enable dev-libs/wayland backend |
wow64
|
Enable running 32bit applications without 32bit ELF multilib by mapping to 64bit calls (experimental/WIP, USE=abi_x86_32 is recommended for complete support) |
xcomposite
|
Enable support for the Xorg composite extension |
xinerama
|
Add support for querying multi-monitor screen geometry through the Xinerama API |
USE flags for app-emulation/wine-proton Valve Software's fork of Wine
alsa
|
Add support for media-libs/alsa-lib (Advanced Linux Sound Architecture) |
crossdev-mingw
|
Use sys-devel/crossdev for the toolchain rather than dev-util/mingw64-toolchain (requires manual setting up) |
custom-cflags
|
Build with user-specified CFLAGS (unsupported) |
fontconfig
|
Support for configuring and customizing font access via media-libs/fontconfig |
gecko
|
Enable mshtml support using app-emulation/wine-gecko |
gstreamer
|
Add support for media-libs/gstreamer (Streaming media) |
llvm-libunwind
|
Use sys-libs/llvm-libunwind instead of sys-libs/libunwind |
mono
|
Enable .NET support using app-emulation/wine-mono |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
osmesa
|
Enable off-screen rendering (OpenGL in bitmaps) support |
perl
|
Install helpers that require perl (winedump/winemaker) |
pulseaudio
|
Add sound server support via media-libs/libpulse (may be PulseAudio or PipeWire) |
sdl
|
Enable gamepad support using media-libs/libsdl2 |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
strip
|
Allow symbol stripping to be performed by the ebuild for special files |
udev
|
Enable virtual/udev integration (device discovery, power and storage device support, etc) |
udisks
|
Enable storage management support (automounting, volume monitoring, etc) |
unwind
|
Add support for call stack unwinding and function name resolution |
usb
|
Add USB support to applications that have optional USB support (e.g. cups) |
v4l
|
Enable support for video4linux (using linux-headers or userspace libv4l libraries) |
xcomposite
|
Enable support for the Xorg composite extension |
xinerama
|
Add support for querying multi-monitor screen geometry through the Xinerama API |
Users may also find information about specific USE flags required to run their applications here.
32-bit vs 64-bit
Invariably, users want to understand why they have to rebuild tons of packages to install Wine because they have to enable abi_x86_32
on a lot of Wine's dependencies... This is unavoidable, and we must highly warn against disabling abi_x86_32
and installing only with abi_x86_64 unless you really know what you are doing. Often, an application will have components that are 32-bit (or even 16-bit) and by installing Wine without 32-bit support, the user is left unable to install or launch an application. It is best to enable 32-bit support on a per-package basis, as indicated by the package manager, rather than globally.
Note that some dependencies of Wine need CONFIG_COMPAT_32BIT_TIME
set in the kernel config to work. Failing to do so will generate error messages of the kind: “The futex facility returned an unexpected error code.” during build or at runtime. Affected are for example the packages dev-libs/icu[1] and sys-devel/llvm.
Environment variables
Traditionally, live (9999) ebuilds support setting the repository commit as an environmental variable. This poses some issues with an ebuild that has multiple upstream repositories. To work around this issue, Wine's live ebuilds support three environmental variables for individually configuring the commit that each repository checks out. The WineHQ repository is controlled by WINE_COMMIT, Wine-Staging repository by STAGING_COMMIT, and Ixit's Gallium Nine repository by D3D9_COMMIT. The *_COMMIT variables may contain either a commit hash from that repository or a git tag from that repository.
For example, one could select the WineHQ tag "wine-2.0-rc5" to emerge the 2.0 RC 5:
root #
WINE_COMMIT="wine-2.0-rc5" emerge -av '=app-emulation/wine-vanilla-9999'
One could additionally pin Wine-Staging to the same release by finding the appropriate tag, "v2.0-rc5" and augmenting the previous as follows:
root #
WINE_COMMIT="wine-2.0-rc5" STAGING_COMMIT="v2.0-rc5" emerge -av '=app-emulation/wine-staging-9999'
Other environmental variables, which affect Wine at runtime, are discussed below.
Emerge
Enable the USE flags of your choosing on the virtual and then on the variant selected (automatically by the virtual or manually by yourself) and emerge the package:
root #
emerge --ask virtual/wine
or
root #
emerge --ask app-emulation/wine-${VARIANT}
Only versions classified as "stable" by upstream will be stabilized in Gentoo, and only as the app-emulation/wine-vanilla variant, as external patchsets are not considered stable. Some users may opt to add Wine variants to their package.accept_keywords file to allow for installation of development versions of Wine.
Configuration
Runtime environment variables
The environment variables of the shell that wine is started from are made accessible to the Windows/DOS processes. Some very useful Wine-specific variables include, but are not limited to, WINEPREFIX, WINEARCH, and WINEDEBUG.
See the man wine and man wineserver manual entries for more detailed information concerning Wine's environment variables.
WINEPREFIX
The prefix directory (by default $HOME/.wine) is generated when Wine is executed in any way (by for example, running
winecfg
). This also means that, if executed as the root user (see WineHQ FAQ - Should I Run Wine as Root), a Wine prefix will (by default) be generated at /root/.wine.To create a Wine prefix in a custom location (instead of ~/.wine) without affecting the default:
user $
WINEPREFIX="$HOME/.wine-someprefix" wineboot
The above would create a Wine prefix at /home/<user>/.wine-someprefix.
Once a prefix has been created, the 'bitness' (arch) can not be changed. As such, the WINEARCH should be defined the when the prefix is created if the user wants to override the default. WINEARCH is meaningless beyond prefix instantiation.
WINEARCH
To create a 32-bit installation instead of the default (when built) 64-bit:
user $
WINEARCH="win32" WINEPREFIX="$HOME/.wine-someprefix" wineboot
The Wine executable used could be anything that runs Wine, such as winecfg, which often makes sense while creating a clean, new prefix.
WINEARCH requires that Wine be built with the corresponding abi_x86
flags.
WINEDEBUG
Essential in finding out why an application is misbehaving when the basic terminal output or messages boxes are not enough. See https://wiki.winehq.org/Debug_Channels for examples.
Configuration tools
The following tools include graphical and command line interfaces for managing Wine prefixes:
- app-emulation/q4wine – Qt5 GUI configuration tool for Wine.
- app-emulation/winetricks – Easy way to install DLLs needed to work around problems in Wine.
Automatically start wine on Windows executables
With the appropriate kernel support and a bit of system configuration, it is possible to automatically start wine when executing.
Kernel support for miscellaneous binary format is necessary as a prerequisite. See the Kernel section of the Embedded Handbook article.
systemd
The following file should be created so that systemd can register the correct service handler for Windows executables.
/etc/binfmt.d/wine.conf
:DOSWin:M::MZ::/usr/bin/wine:
After /etc/binfmt.d/wine.conf was created, restart systemd-binfmt.
root #
systemctl restart systemd-binfmt
Upstream FAQs
Some upstream FAQ entries that users might find useful:
- How to uninstall individual applications
- How to remove a Wine prefix
- How to prevent Wine from creating menu items
Troubleshooting
When a user encounters a problem with an application, they should try the latest development version to see if the unwanted behavior still exists. If Wine has been built with options such as -fomit-frame-pointer
or --hash-style=both
, the Wine developers will likely be unable to help with the issue, and reports including output from such builds should not be reported to the Wine Bugzilla.
The custom-cflags
USE flag should be enabled for debugging builds.
For more directions on reporting bugs, see Bugzilla and Bugs at wiki.winehq.
Bad floating windows behaviour without compositor
Some Wine applications won't work correctly on Xorg without compositor. This includes such issues as rendering glitches or unable to dock floating windows in programs like Adobe Photoshop. One window environments without compositor, try Picom is recommended:
root #
emerge --ask x11-misc/picom
Execute compositor to check if issues are resolved instantly:
user $
picom --daemon
Support
Users may find additional support in the #gentoo-wine (webchat) channel on Libera.Chat.
See also
- Wine application USE flags — used to specify to USE flag configurations required to support specific Windows applications.
- Game emulators – Contains lists of game emulators available through Gentoo.
- Steam (With Proton) - The Steam package now provides Proton, providing compatibility support for Windows games.
- Lutris — an open source gaming platform for Linux.
- DOSEMU — an application compability layer for MS-DOS geared more towards running MS-DOS applications than running games.
External resources
- Gentoo bugtracker: known bugs – Wine related bugs.
- WineHQ Wiki
- Wine Application Database – Search for the game or program to install here to see if it is stable.
- Wine Staging at GitHub
- ↑ Can't emerge dev-libs/icu[abi_x86_32], futex error? [SOLVED], Gentoo Forums. Retrieved on October 17th, 2020.