aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/en/books/handbook/wine/_index.adoc
blob: 7b1aff26a25ee3317bc5e5361b6586f3dc3c25c0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
---
title: Chapter 11. WINE
part: Part II. Common Tasks
prev: books/handbook/linuxemu
next: books/handbook/partiii
description: This chapter will describe how to install WINE on a FreeBSD system and how to configure WINE
tags: ["WINE", "emulation", "guide", "tutorial"]
showBookMenu: true
weight: 14
path: "/books/handbook/"
---

[[wine]]
= WINE
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/wine/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[wine-synopsis]]
== Synopsis

https://www.winehq.org/[WINE], which stands for Wine Is Not an Emulator, is technically a software translation layer.
It enables to install and run some software written for Windows(R) on FreeBSD (and other) systems.

It operates by intercepting system calls, or requests from the software to the operating system, and translating them from Windows(R) calls to calls that FreeBSD understands.
It will also translate any responses as needed into what the Windows(R) software is expecting.
So in some ways, it _emulates_ a Windows(R) environment, in that it provides many of the resources Windows(R) applications are expecting.

However, it is not an emulator in the traditional sense.
Many of these solutions operate by constructing an entire other computer using software processes in place of hardware Virtualization (such as that provided by the package:emulators/qemu[] port) operates in this way.
One of the benefits of this approach is the ability to install a full version of the OS in question to the emulator.
It means that the environment will not look any different to applications than a real machine, and chances are good that everything will work on it.
The downside to this approach is the fact that software acting as hardware is inherently slower than actual hardware.
The computer built in software (called the _guest_) requires resources from the real machine (the _host_), and holds on to those resources for as long as it is running.

The WINE Project, on the other hand, is much lighter on system's resources.
It will translate system calls on the fly, so while it is difficult to be as fast as a real Windows(R) computer, it can come very close.
On the other hand, WINE is trying to keep up with a moving target in terms of all the different system calls and other functionality it needs to support.
As a result there may be applications that do not work as expected on WINE, will not work at all, or will not even install to begin with.

At the end of the day, WINE provides another option to try to get a particular Windows(R) software program running on FreeBSD.
It can always serve as the first option which, if successful, offers a good experience without unnecessarily depleting the host FreeBSD system's resources.

This chapter will describe:

* How to install WINE on a FreeBSD system.
* How WINE operates, and how it is different from other alternatives like virtualizaton.
* How to fine-tune WINE to the specific needs of some applications.
* How to install GUI helpers for WINE.
* Common tips and solutions for on FreeBSD.
* Considerations for WINE on FreeBSD in terms of the multi-user environment.

Before reading this chapter, it will be useful to:

* Understand the crossref:basics[basics,basics of UNIX(R) and FreeBSD].
* Know how to crossref:bsdinstall[bsdinstall,install FreeBSD].
* Know how to crossref:advanced-networking[advanced-networking,set up a network connection].
* Know how to crossref:ports[ports,install additional third-party software].

[[wine-overview-concepts]]
== WINE Overview & Concepts

WINE is a complex system, so before running it on a FreeBSD system it is worth gaining an understanding of what it is and how it works.

[[what-is-wine]]
=== What is WINE?

As mentioned in the <<wine-synopsis,Synopsis>> for this chapter, WINE is a compatibility layer that allows Windows(R) applications to run on other operating systems.
In theory, it means these programs should run on systems like FreeBSD, macOS, and Android.

When WINE runs a Windows(R) executable, two things occur:

* Firstly, WINE implements an environment that mimics that of various versions of Windows(R). For example, if an application requests access to a resource such as RAM, WINE has a memory interface that looks and acts (as far as the application is concerned) like Windows(R).
* Then, once that application makes use of that interface, WINE takes the incoming request for space in memory and translates it to something compatible with the host system. In the same way when the application retrieves that data, WINE facilitates fetching it from the host system and passing it back to the Windows(R) application.

[[wine-and-the-os-system]]
=== WINE and the FreeBSD System

Installing WINE on a FreeBSD system will entail a few different components:

* FreeBSD applications for tasks such as running the Windows(R) executables, configuring the WINE sub-system, or compiling programs with WINE support.
* A large number of libraries that implement the core functions of Windows(R) (for example [.filename]#/lib/wine/api-ms-core-memory-l1-1-1.dll.so#, which is part of the aforementioned memory interface).
* A number of Windows(R) executables, which are (or mimic) common utilities (such as [.filename]#/lib/wine/notepad.exe.so#, which provides the standard Windows(R) text editor).
* Additional Windows(R) assets, in particular fonts (like the Tahoma font, which is stored in [.filename]#share/wine/fonts/tahoma.ttf# in the install root).

[[graphical-versus-text-modeterminal-programs-in-wine]]
=== Graphical Versus Text Mode/Terminal Programs in WINE

As an operating system where terminal utilities are "first-class citizens," it is natural to assume that WINE will contain extensive support for text-mode program.
However, the majority of applications for Windows(R), especially the most popular ones, are designed with a graphical user interface (GUI) in mind.
Therefore, WINE's utilities are designed by default to launch graphical programs.

However, there are three methods available to run these so-called Console User Interface (CUI) programs:

* The _Bare Streams_ approach will display the output directly to standard output.
* The _wineconsole_ utility can be used with either the _user_ or _curses_ backed to utilize some of the enhancements the WINE system provides for CUI applications.

These approaches are described in greater detail on the https://wiki.winehq.org/Wine_User%27s_Guide#Text_mode_programs_.28CUI:_Console_User_Interface.29[WINE Wiki].

[[wine-derivative-projects]]
=== WINE Derivative Projects

WINE itself is a mature open source project, so it is little surprise it is used as the foundation of more complex solutions.

[[commercial-wine-implementations]]
==== Commercial WINE Implementations

A number of companies have taken WINE and made it a core of their own, proprietary products (WINE's LGPL license permits this).
Two of the most famous of these are as follows:

* Codeweavers CrossOver

This solution provides a simplified "one-click" installation of WINE, which contains additional enhancements and optimizations (although the company contributes many of these back upstream to the WINE project).
One area of focus for Codeweavers is to make the most popular applications install and run smoothly.

While the company once produced a native FreeBSD version of their CrossOver solution, it appears to have long been abandoned.
While some resources (such as a https://www.codeweavers.com/compatibility/crossover/forum/freebsd[dedicated forum]) are still present, they also have seen no activity for some time.

* Steam Proton

Gaming company Steam also uses WINE to enable Windows(R) games to install and run on other systems.
it is primary target is Linux-based systems, though some support exists for macOS as well.

While Steam does not offer a native FreeBSD client,there are several options for using the Linux(R) client using FreeBSD's Linux Compatibility Layer.

[[wine-companion-programs]]
==== WINE Companion Programs

In addition to proprietary offerings, other projects have released applications designed to work in tandem with the standard, open source version of WINE.
The goals for these can range from making installation easier to offering easy ways to get popular software installed.

These solutions are covered in greater detail in the later section on <<wine-management-guis,GUI frontends>>, and include the following:

* winetricks
* Homura

[[alternatives-to-wine]]
=== Alternatives to WINE

For FreeBSD users, some alternatives to using WINE are as follows:

* Dual-Booting: A straightforward option is to run desired Windows(R) applications natively on that OS. This of course means existing FreeBSD in order to boot Windows(R), so this method is not feasible if access to programs in both systems is required simultaneously.
* Virtual Machines: Virtual Machines (VMs), as mentioned earlier in this chapter, are software processes that emulate full sets of hardware, on which additional operating systems (including Windows(R)) can be installed and run. Modern tools make VMs easy to create and manage, but this method comes at a cost. A good portion of the host systems resources must be allocated to each VM, and those resources cannot be reclaimed by the host as long as the VM is running. A few examples of VM managers include the open source solutions qemu, bhyve, and VirtualBox. See the chapter on <<virtualization,Virtualization>> for more detail.
* Remote Access: Like many other UNIX(R)-like systems, FreeBSD can run a variety of applications enabling users to remotely access Windows(R) computers and use their programs or data. In addtion to clients such as xrdp that connect to the standard Windows(R) Remote Desktop Protocol, other open source standards such as vnc can also be used (provided a compatible server is present on the other side).

[[installing-wine-on-freebsd]]
== Installing WINE on FreeBSD

WINE can be installed via the pkg tool, or by compiling the port(s).

[[wine-prerequistes]]
=== WINE Prerequistes

Before installing WINE itself, it is useful to have the following pre-requisites installed.

* A GUI

Most Windows(R) programs are expecting to have a graphical user interface available.
If WINE is installed without one present, its dependencies will include the Wayland compositor, and so a GUI will be installed along with WINE.
But it is useful to have the GUI of choice installed, configured, and working correctly before installing WINE.

* wine-gecko

The Windows(R) operating system has for some time had a default web browser pre-installed: Internet Explorer.
As a result, some applications work under the assumption that there will always be something capable of displaying web pages.
In order to provide this functionality, the WINE layer includes a web browser component using the Mozilla project's Gecko engine.
When WINE is first launched it will offer to download and install this, and there are reasons users might want it do so (these will be covered in a later chapter).
But they can also install it prior to installing WINE, or alongside the install of WINE proper.

Install this package with the following:

[source,shell]
....
# pkg install wine-gecko
....

Alternately, compile the port with the following:

[source,shell]
....
# cd /usr/ports/emulator/wine-gecko
# make install
....

* wine-mono

This port installs the MONO framework, an open source implementation of Microsoft's .NET.
Including this with the WINE installation will make it that much more likely that any applications written in .NET will install and run on the system.

To install the package:

[source,shell]
....
# pkg install wine-mono
....

To compile from the ports collection:

[source,shell]
....
# cd /usr/ports/emulator/wine-mono
# make install
....

[[installing-wine]]
=== Installing WINE via FreeBSD Package Repositories

With the pre-requisites in place, install WINE via package with the following command:

[source,shell]
....
# pkg install wine
....

Alternately compile the WINE sub-system from source with the following:

[source,shell]
....
# cd /usr/ports/emulator/wine
# make install
....

[[thirtytwo-vs-sixtyfour-bit-wine]]
=== Concerns of 32- Versus 64-Bit in WINE Installations

Like most software, Windows(R) applications made the upgrade from the older 32-bit architecture to 64 bits.
And most recent software is written for 64-bit operating systems, although modern OSes can sometimes continue to run older 32-bit programs as well.
FreeBSD is no different, having had support for 64-bit since the 5.x series.

However, using old software no longer supported by default is a common use for emulators, and users commonly turn to WINE to play games and use other programs that do not run properly on modern hardware.
Fortunately, FreeBSD can support all three scenarios:

* On modern, 64-bit machine and want to run 64-bit Windows(R) software, simply install the ports mentioned in the above sections. The ports system will automatically install the 64-bit version.
* Alternately, users might have an older 32-bit machine that they do not want to run with its original, now non-supported software. They can install the 32-bit (i386) version of FreeBSD, then install the ports in the above sections.

[[running-first-wine-program]]
== Running a First WINE Program on FreeBSD

Now that WINE is installed, the next step is to try it out by running a simple program.
An easy way to do this is to download a self-contained application, i.e., one can simply unpack and run without any complex installation process.

So-called "portable" versions of applications are good choices for this test, as are programs that run with only a single executable file.

[[running-a-program-from-the-command-line]]
=== Running a Program from the Command Line

There are two different methods to launch a Windows program from the terminal.
The first, and most straightforward is to navigate to the directory containing the program's executable ([.filename]#.EXE#) and issue the following:

[source,shell]
....
% wine program.exe
....

For applications that take command-line arguments, add them after the executable as usual:

[source,shell]
....
% wine program2.exe -file file.txt
....

Alternately, supply the full path to the executable to use it in a script, for example:

[source,shell]
....
% wine /home/user/bin/program.exe
....

[[running-a-program-from-a-gui]]
=== Running a Program from a GUI

After installation graphical shells should be updated with new associations for Windows executable ([.filename]#.EXE#) files.
It will now be possible to browse the system using a file manager, and launch the Windows application in the same way as other files and programs (either a single- or double-click, depending on the desktop's settings).

On most desktops, check to make sure this association is correct by right-clicking on the file, and looking for an entry in the context menu to open the file.
One of the options (hopefully the default one) will be with the *Wine Windows Program Loader*, as shown in the below screenshot:

image::wine-run-np++-1.png[]

In the event the program does not run as expected, try launching it from the command line and review any messages displayed in the terminal to troubleshoot.

In the event WINE is not the default application for [.filename]#.EXE# files after install, check the MIME associate for this extension in the current desktop environment, graphical shell, or file manager.

[[configuring-wine-installation]]
== Configuring WINE Installation

With an understanding of what WINE is and how it works at a high level, the next step to effectively using it on FreeBSD is becoming familiar with its configuration.
The following sections will describe the key concept of the _WINE prefix_, and illustrate how it is used to control the behavior of applications run through WINE.

[[wine-prefixes]]
=== WINE Prefixes

A WINE _prefix_ is a directory, usually located beneath the default location of [.filename]#$HOME/.wine# though it can be located elsewhere.
The prefix is a set of configurations and support files used by the wine to configure and run the Windows(R) environment a given application needs.
By default, a brand new WINE installation will create the following structure when first launched by a user:

* [.filename]#.update-timestamp#: contains the last modified date of [.filename]#file /usr/share/wine/wine.inf#. It is used by WINE to determine if a prefix is out of date, and automatically update it if needed.
* [.filename]#dosdevices/#: contains information on mappings of Windows(R) resources to resources on the host FreeBSD system. For example, after a new WINE installation, this should contain at least two entries which enable access to the FreeBSD filesystem using Windows(R)-style drive letters:

** [.filename]#c:@#: A link to [.filename]#drive_c# described below.
** [.filename]#z:@#: A link to the root directory of the system.

* [.filename]#drive_c/#: emulates the main (i.e., [.filename]#C:#) drive of a Windows(R) system. It contains a directory structure and associated files mirroring that of standard Windows(R) systems. A fresh WINE prefix will contain Windows(R) 10 directories such as _Users_ and _Windows_ that holds the OS itself. Furthermore, applications installed within a prefix will be located in either _Program Files_ or _Program Files (x86)_, depending on their architecture.
* [.filename]#system.reg#: This Registry file contains information on the Windows(R) installation, which in the case of WINE is the environment in [.filename]#drive_c#.
* [.filename]#user.reg#: This Registry file contains the current user's personal configurations, made either by varous software or through the use of the Registry Editor.
* [.filename]#userdef.reg#: This Registry file is a default set of configurations for newly-created users.

[[creating-and-using-wine-prefixes]]
=== Creating and Using WINE Prefixes

While WINE will create a default prefix in the user's [.filename]#$HOME/.wine/#, it is possible to set up multiple prefixes.
There are a few reasons to do this:

* The most common reason is to emulate different versions of Windows(R), according to the compatibility needs of the software in question.
* In addition, it is common to encounter software that does not work correctly in the default environment, and requires special configuration. it is useful to isolate these in their own, custom prefixes, so the changes do not impact other applications.
* Similarly, copying the default or "main" prefix into a separate "testing" one in order to evaluate an application's compatibility can reduce the chance of corruption.

Creating a prefix from the terminal requires the following command:

[source,shell]
....
% WINEPREFIX="/home/username/.wine-new" winecfg
....

This will run the winecfg program, which can be used to configure wine prefixes (more on this in a later section).
But by providing a directory path value for the `WINEPREFIX` environment variable, a new prefix is created at that location if one does not already exist.

Supplying the same variable to the wine program will similarly cause the selected program to be run with the specified prefix:

[source,shell]
....
% WINEPREFIX="/home/username/.wine-new" wine program.exe
....

[[configuring-wine-prefixes-with-winecfg]]
=== Configuring WINE Prefixes with winecfg

As described above WINE includes a tool called winecfg to configure prefixes from within a GUI.
It contains a variety of functions, which are detailed in the sections below.
When winecfg is run from within a prefix, or provided the location of a prefix within the `WINEPREFIX` variable, it enables the configuration of the selected prefix as described in the below sections.

Selections made on the _Applications_ tab will affect the scope of changes made in the _Libraries_ and _Graphics_ tabs, which will be limited to the application selected.
See the section on https://wiki.winehq.org/Wine_User%27s_Guide#Using_Winecfg[Using Winecfg] in the WINE Wiki for more details.

[[applications]]
==== Applications

image::wine-config-1.png[]

The _Applications_ contains controls enabling the association of programs with a particular version of Windows(R).
On first start-up the _Application settings_ section will contain a single entry: _Default Settings_.
This corresponds to all the default configurations of the prefix, which (as the disabled _Remove application_ button implies) cannot be deleted.

But additional applications can be added with the following process:

. Click the _Add application_ button.
. Use the provided dialog to select the desired program's executable.
. Select the version of Windows(R) to be used with the selected program.

[[libraries]]
==== Libraries

image::wine-config-2.png[]

WINE provides a set of open source library files as part of its distribution that provide the same functions as their Windows(R) counterparts.
However, as noted earlier in this chapter, the WINE project is always trying to keep pace with new updates to these libraries.
As a result, the versions that ship with WINE may be missing functionality that the latest Windows(R) programs are expecting.

However, winecfg makes it possible specify overrides for the built-in libraries, particularly there is a version of Windows(R) available on the same machine as the host FreeBSD installation. For each library to be overridden, do the following:

. Open the _New override for library_ drop-down and select the library to be replaced.
. Click the _Add_ button.
. The new override will appear in the _Existing overrides_ list, notice the _native, builtin_ designation in parentheses.
. Click to select the library.
. Click the _Edit_ button.
. Use the provided dialog to select a corresponding library to be used in place of the built-in one.

Be sure to select a file that is truly the corresponding version of the built-in one, otherwise there may be unexpected behavior.

[[graphics]]
==== Graphics

image::wine-config-3.png[]

The _Graphics_ tab provides some options to make the windows of programs run via WINE operate smoothly with FreeBSD

* Automatic mouse capture when windows are full-screen.
* Allowing the FreeBSD window manager to decorate the windows, such as their title bars, for programs running via WINE.
* Allowing the window manager to control windows for programs running via WINE, such as running resizing functions on them.
* Create an emulated virtual desktop, within which all WINE programs will run. If this item is selected, the size of the virtual desktop can be specified using the _Desktop size_ input boxes.
* Setting the screen resolution for programs running via WINE.

[[desktop-integration]]
==== Desktop Integration

image::wine-config-4.png[]

This tab allows configuration of the following items:

* The theme and related visual settings to be used for programs running via WINE.
* Whether the WINE sub-system should manage MIME types (used to determine which application opens a particular file type) internally.
* Mappings of directories in the host FreeBSD system to useful folders within the Windows(R) environment. To change an existing association, select the desired item and click _Browse_, then use the provided dialog to select a directory.

[[drives]]
==== Drives

image::wine-config-5.png[]

The _Drives_ tab allows linking of directories in the host FreeBSD system to drive letters in the Windows(R) environment.
The default values in this tab should look familiar, as they're displaying the contents of [.filename]#dosdevices/# in the current WINE prefix.
Changes made via this dialog will reflect in [.filename]#dosdevices#, and properly-formatted links created in that directory will display in this tab.

To create a new entry, such as for a CD-ROM (mounted at [.filename]#/mnt/cdrom#), take the following steps:

. Click the _Add _ button.
. In the provided dialog, choose a free drive letter.
. Click _OK_.
. Fill in the _Path_ input box by either typing the path to the resource, or click _Browse _ and use the provided dialog to select it.

By default WINE will autodetect the type of resource linked, but this can be manually overridden.
See https://wiki.winehq.org/Wine_User%27s_Guide#Drive_Settings[the section in the WINE Wiki] for more detail on advanced options.

[[audio]]
==== Audio

image::wine-config-6.png[]

This tab contains some configurable options for routing sound from Windows(R) programs to the native FreeBSD sound system, including:

* Driver selection
* Default device selection
* Sound test

[[about]]
==== About

image::wine-config-7.png[]

The final tab contains information on the WINE project, including a link to the website.
It also allows entry of (entirely optional) user information, although this is not sent anywhere as it is in other operating systems.

[[wine-management-guis]]
== WINE Management GUIs

While the base install of WINE comes with a GUI configuration tool in winecfg, it is main purpose is just that: strictly configuring an existing WINE prefix.
There are, however, more advanced applications that will assist in the initial installation of applications as well as optimizing their WINE environments.
The below sections include a selection of the most popular.

[[winetricks]]
=== Winetricks

winetricks is a cross-platform, general purpose helper program for WINE.
It is not developed by the WINE project proper, but rather maintained on https://github.com/Winetricks/winetricks[Github] by a group of contributors.
It contains some automated "recipes" for getting common applications to work on WINE, both by optimizing the settings as well as acquiring some DLL libraries automatically.

[[installing-winetricks]]
==== Installing winetricks

To install winetricks on a FreeBSD using binary packages, use the following commands (note winetricks requires either the i386-wine or i386-wine-devel package, and is therefore not installed automatically with other dependencies):

[source,shell]
....
# pkg install i386-wine winetricks
....

To compile it from source, issue the following in the terminal:

[source,shell]
....
# cd /usr/ports/emulators/i386-wine
# make install
# cd /usr/ports/emulators/winetricks
# make install
....

If a manual installation is required, refer to the https://github.com/Winetricks/winetricks[Github] account for instructions.

[[using-winetricks]]
==== Using winetricks

Run winetricks with the following command:

[source,shell]
....
% winetricks
....

Note: this should be in a 32-bit prefix to run winetricks.
Launching winetricks displays a window with a number of choices, as follows:

image::winetricks-run-1.png[]

Selecting either _Install an application_, _Install a benchmark_, or _Install a game_ shows a list with supported options, such as the one below for applications:

image::winetricks-run-2.png[]

Selecting one or more items and clicking _OK_ will start their installation process(es).
Initially, some messages that appear to be errors may show up, but they're actually informational alerts as winetricks configures the WINE environment to get around known issues for the application:

image::winetricks-app-install-1.png[]

Once these are circumvented, the actual installer for the application will be run:

image::winetricks-app-install-2.png[]

Once the installation completes, the new Windows application should be available from the desktop environment's standard menu (shown in the screenshot below for the LXQT desktop environment):

image::winetricks-menu-1.png[]

In order to remove the application, run winetricks again, and select _Run an uninstaller_.

image::winetricks-uninstall-1.png[]

A Windows(R)-style dialog will appear with a list of installed programs and components.
Select the application to be removed, then click the _Modify/Remove_ button.

image::winetricks-uninstall-2.png[]

This will run the applications built-in installer, which should also have the option to uninstall.

image::winetricks-uninstall-3.png[]

[[homura]]
=== Homura

Homura is an application similar to winetricks, although it was inspired by the https://lutris.net/[Lutris] gaming system for Linux.
But while it is focused on games, there are also non-gaming applications available for install through Homura.

[[installing-homura]]
==== Installing Homura

To install Homura's binary package, issue the following command:

[source,shell]
....
# pkg install homura
....

Homura is available in the FreeBSD Ports system.
However, than the _emulators_ section of Ports or binary packages, look for it in the _games_ section.

[source,shell]
....
# cd /usr/ports/games/homura
# make install
....

[[using-homura]]
==== Using Homura

Homura's usage is quite similar to that of winetricks.
When using it for the first time, launch it from the command line (or a desktop environment runner applet) with:

[source,shell]
....
% Homura
....

This should result in a friendly welcome message.
Click _OK_ to continue.

image::homura-launch-1.png[]

The program will also offer to place a link in the application menu of compatible environments:

image::homura-run-2.png[]

Depending on the setup of the FreeBSD machine, Homura may display a message urging the install of native graphics drivers.

image::homura-run-3.png[]

The application's window should then appear, which amounts to a "main menu" with all its options.
Many of the items are the same as winetricks, although Homura offers some additional, helpful options such as opening its data folder (_Open Homura Folder_) or running a specified program (_Run a executable in prefix_).

image::homura-install-1.png[]

To select one of Homura's supported applications to install, select _Installation_, and click _OK_.
This will display a list of applications Homura can install automatically.
Select one, and click _OK_ to start the process.

image::homura-install-2.png[]

As a first step Homura will download the selected program.
A notification may appear in supported desktop environments.

image::homura-install-3.png[]

The program will also create a new prefix for the application.
A standard WINE dialog with this message will display.

image::homura-install-4.png[]

Next, Homura will install any prerequisites for the selected program.
This may involve downloading and extracting a fair number of files, the details of which will show in dialogs.

image::homura-install-5.png[]

Downloaded packages are automatically opened and run as required.

image::homura-install-6.png[]

The installation may end with a simple desktop notification or message in the terminal, depending on how Homura was launched.
But in either case Homura should return to the main screen.
To confirm the installation was successful, select _Launcher_, and click _OK_.

image::homura-install-7.png[]

This will display a list of installed applications.

image::homura-install-8.png[]

To run the new program, select it from the list, and click _OK_.
To uninstall the application, select _Uninstallation_ from the main screen, which will display a similar list.
Select the program to be removed, and click _OK_.

image::homura-uninstall-1.png[]

[[running-multiple-management-guis]]
=== Running Multiple Management GUIs

it is worth noting that the above solutions are not mutually exclusive.
it is perfectly acceptable, even advantageous, to have both installed at the same time, as they support a different set of programs.

However, it is wise to ensure that they do not access any of the same WINE prefixes.
Each of these solutions applies workarounds and makes changes to the registries based on known workarounds to existing WINE issues in order to make a given application run smoothly.
Allowing both winetricks and Homura to access the same prefix could lead to some of these being overwritten, with the result being some or all applications do not work as expected.

[[wine-in-multi-user-os-installations]]
== WINE in Multi-User FreeBSD Installations

[[issues-with-using-a-common-wine-prefix]]
=== Issues with Using a Common WINE Prefix

Like most UNIX(R)-like operating systems, FreeBSD is designed for multiple users to be logged in and working at the same time.
On the other hand, Windows(R) is multi-user in the sense that there can be multiple user accounts set up on one system.
But the expectation is that only one will be using the physical machine (a desktop or laptop PC) at any given moment.

More recent consumer versions of Windows(R) have taken some steps to improve the OS in multi-user scenarios.
But it is still largely structured around a single-user experience.
Furthermore, the measures the WINE project has taken to create a compatible environment means, unlike FreeBSD applications (including WINE itself), it will resemble this single-user environment.

So it follows that each user will have to maintain their own set of configurations, which is potentially good.
Yet it is advantageous to install applications, particularly large ones like office suites or games, only once.
Two examples of reasons to do this are maintenance (software updates need only be applied once) and efficiency in storage (no duplicated files).

There are two strategies to minimize the impact of multiple WINE users in the system.

[[installing-applications-to-a-common-drivesettings]]
=== Installing Applications to a Common Drive

As shown in the section on WINE Configuration, WINE provides the ability to attach additional drives to a given prefix.
In this way, applications can be installed to a common location, while each user will still have an prefix where individual settings may be kept (depending on the program).
This is a good setup if there are relatively few applications to be shared between users, and they are programs that require few custom tweaks changes to the prefix in order to function.

The steps to make install applications in this way are as follows:

. First, set up a shared location on the system where the files will be stored, such as [.filename]#/mnt/windows-drive_d/#. Creating new directories is described in man page for the mkdir command.
. Next, set permissions for this new directory to allow only desired users to access it. One approach to this is to create a new group such as "windows," add the desired users to that group (see the sub-section on groups in the Handbook's Users and Basic Account Management section), and set to the permissions on the directory to `770` (the section on Permissions in the FreeBSD Basics chapter of the Handbook illustrates this process).
. Finally, add the location as a drive to the user's prefix using the winecfg as described in the above section on WINE Configuration in this chapter.

Once complete, applications can be installed to this location, and subsequently run using the assigned drive letter (or the standard UNIX(R)-style directory path).
However, as noted above, only one user should be running these applications (which may be accessing files within their installation directory) at the same time.
Some applications may also exhibit unexpected behavior when run by a user who is not the owner, despite being a member of the group that should have full "read/write/execute" permissions for the entire directory.

[[using-a-common-installation-of-wine]]
=== Using a Common Installation of WINE

If, on the other hand, there are many applications to be shared, or they require specific tuning in order to work correctly, a different approach may be required.
In this method, a completely separate user is created specifically for the purposes of storing the WINE prefix and all its installed applications.
Individual users are then granted permission to run programs as this user using the su command.
The result is that these users can launch a WINE application as they normally would, only it will act as though launched by the newly-created user, and therefore use the centrally-maintained prefix containing both settings and programs.
To accomplish this, take the following steps.

Create a new user with the following command (as root), which will step through the required details:

[source,shell]
....
# adduser
....

Enter the username (e.g., _windows_) and Full name ("Microsoft Windows").
Then accept the defaults for the remainder of the questions. Next, install the sudo utility using binary packages with the following:

[source,shell]
....
# pkg install sudo
....

Once installed, edit [.filename]#/etc/sudoers# as follows:

[.programlisting]
....
# User alias specification

# define which users can run the wine/windows programs
User_Alias WINDOWS_USERS = user1,user2

# define which users can administrate (become root)
User_Alias ADMIN = user1

# Cmnd alias specification

# define which commands the WINDOWS_USERS may run
Cmnd_Alias WINDOWS = /usr/bin/wine,/usr/bin/winecfg

# Defaults
Defaults:WINDOWS_USERS env_reset
Defaults:WINDOWS_USERS env_keep += DISPLAY
Defaults:WINDOWS_USERS env_keep += XAUTHORITY
Defaults    !lecture,tty_tickets,!fqdn

# User privilege specification
root    ALL=(ALL) ALL

# Members of the admin user_alias, defined above, may gain root privileges
ADMIN ALL=(ALL) ALL

# The WINDOWS_USERS may run WINDOWS programs as user windows without a password
WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS
....

The result of these changes is the users named in the _User_Alias_ section are permitted to run the programs listed in the _Cmnd Alias_ section using the resources listed in the _Defaults_ section (the current display) as if they were the user listed in the final line of the file.
In other words, users designates as _WINDOWS_USERS_ can run the wine and winecfg applications as user _windows_.
As a bonus, the configuration here means they will not be required to enter the password for the _windows_ user.

Next provide access to the display back to the _windows_ user, as whom the WINE programs will be running:

[source,shell]
....
% xhost +local:windows
....

This should be added to the list of commands run either at login or when the default graphical environment starts.
Once all the above are complete, a user configured as one of the `WINDOW_USERS` in [.filename]#sudoers# can run programs using the shared prefix with the following command:

it is worth noting that multiple users accessing this shared environment at the same time is still risky.
However, consider also that the shared environment can itself contain multiple prefixes.
In this way an administrator can create a tested and verified set of programs, each with its own prefix.
At the same time, one user can play a game while another works with office programs without the need for redundant software installations.

[[wine-on-os-faq]]
== WINE on FreeBSD FAQ

The following section describes some frequently asked questions, tips/tricks, or common issues in running WINE on FreeBSD, along with their respective answers.

[[basic-installation-and-usage]]
=== Basic Installation and Usage

[[how-to-install-32-bit-and-64-bit-wine-on-the-same-system]]
==== How to Install 32-bit and 64-bit WINE on the Same System?

As described earlier in this section, the wine and i386-wine packages conflict with one another, and therefore cannot be installed on the same system in the normal way.
However, multiple installs can be achieved using mechanisms like chroots/jails, or by building WINE from source (note this does _not_ mean building the port).

[[can-dos-programs-be-run-on-wine]]
==== Can DOS Programs Be Run on WINE?

They can, as "Console User Interface" applications as mentioned earlier in this section.
However, there is an arguably better method for running DOS software: DOSBox.
On the other hand, there's little reason not to at least try it.
Simply create a new prefix, install the software, and if it does not work delete the prefix.

[[should-the-wine-devel-packageport-be-installed-to-use-the-development-version-of-wine-instead-of-stable]]
==== Should the "wine-devel" Package/Port be Installed to Use the Development Version of WINE Instead of Stable?

Yes, installing this version will install the "development" version of WINE.
As with the 32- and 64-bit versions, they cannot be installed together with the stable versions unless additional measures are taken.

Note that WINE also has a "Staging" version, which contains the most recent updates.
This was at one time available as a FreeBSD port; however, it has since been removed.
It can be compiled directly from source however.

[[install-optimization]]
=== Install Optimization

[[how-should-windows-hardware-graphics-drivers-be-handled]]
==== How Should Windows(R) Hardware (e.g., Graphics) Drivers be Handled?

Operating system drivers transfer commands between applications and hardware.
WINE emulates a Windows(R) environment, including the drivers, which in turn use FreeBSD's native drivers for this transfer.
it is not advisable to install Windows(R) drivers, as the WINE system is designed to use the host systems drivers.
If, for example, a graphics card that benefits from dedicated drivers, install them using the standard FreeBSD methods, not Windows(R) installers.

[[is-there-a-way-to-make-windows-fonts-look-better]]
==== Is There a way to Make Windows(R) Fonts Look Better?

A user on the FreeBSD forums suggests this configuration to fix out-of-the-box look of WINE fonts, which can be slightly pixelated.

According to https://forums.freebsd.org/threads/make-wine-ui-fonts-look-good.68273/[a post in the FreeBSD Forums], adding the following to [.filename]#.config/fontconfig/fonts.conf# will add anti-aliasing and make text more readable.

[.programlisting]
....
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd>"

<fontconfig>

  <!-- antialias all fonts -->
  <match target="font">
    <edit name="antialias" mode="assign"><bool>true</bool></edit>>
    <edit name="hinting" mode="assign"><bool>true</bool></edit>>
    <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>>
    <edit name="rgba" mode="assign"><const>rgb</const></edit>>
  </match>
</fontconfig>
....


[[does-having-windows-installed-elsewhere-on-a-system-help-wine-operate]]
==== Does Having Windows(R) Installed Elsewhere on a System Help WINE Operate?

It may, depending on the application being run.
As mentioned in the section describing winecfg, some built-in WINE DLLs and other libraries can be overridden by providing a path to an alternate version.
Provided the Windows(R) partition or drive is mounted to the FreeBSD system and accessible to the user, configuring some of these overrides will use native Windows(R) libraries and may decrease the chance of unexpected behavior.

[[application-specific]]
=== Application-Specific

[[where-is-the-best-place-to-see-if-application-x-works-on-wine]]
==== Where is the Best Place to see if Application X Works on WINE?

The first stop in determining compatibility should be the https://appdb.winehq.org/[WINE AppDB].
This is a compilation of reports of programs working (or not) on all supported platforms, although (as previously mentioned), solutions for one platform are often applicable to others.

[[is-there-anything-that-will-help-games-run-better]]
==== Is There Anything That Will Help Games Run Better?

Perhaps.
Many Windows(R) games rely on DirectX, a proprietary Microsoft graphics layer.
However there are projects in the open source community attempting to implement support for this technology.

The _dxvk_ project, which is an attempt to implement DirectX using the FreeBSD-compatible Vulkan graphics sub-system, is one such.
Although its primary target is WINE on Linux, https://forums.freebsd.org/threads/what-about-gaming-on-freebsd.723/page-9[some FreeBSD users report] compiling and using dxvk.

In addition, work is under way on a https://www.freshports.org/emulators/wine-proton/[wine-proton port].
This will bring the work of Valve, developer of the Steam gaming platform, to FreeBSD.
Proton is a distribution of WINE designed to allow many Windows(R) games to run on other operating systems with minimal setup.

[[is-there-anywhere-freebsd-wine-users-gather-to-exchange-tips-and-tricks]]
==== Is There Anywhere FreeBSD WINE Users Gather to Exchange Tips and Tricks?

There are plenty of places FreeBSD users discuss issues related to WINE that can be searched for solutions:

* https://forums.freebsd.org/[The FreeBSD forums], particularly the _Installation and Maintenance of Ports or Packages_ or _Emulation and virtualization_ forums.
* https://wiki.freebsd.org/IRC/Channels[FreeBSD IRC channels] including #freebsd (for general support), #freebsd-games, and others.
* https://discord.gg/2CCuhCt[The BSD World Discord server's] channels including _bsd-desktop_, _bsd-gaming_, _bsd-wine_, and others.

[[other-os-resources]]
=== Other OS Resources

There are a number of resources focused on other operating systems that may be useful for FreeBSD users:

* https://wiki.winehq.org/[The WINE Wiki] has a wealth of information on using WINE, much of which is applicable across many of WINE's supported operating systems.
* Similarly, the documentation available from other OS projects can also be of good value. https://wiki.archlinux.org/index.php/wine[The WINE page] on the Arch Linux Wiki is a particularly good example, although some of the "Third-party applications" (i.e., "companion applications") are obviously not available on FreeBSD.
* Finally, Codeweavers (a developer of a commercial version of WINE) is an active upstream contributor. Oftentimes answers to questions in https://www.codeweavers.com/support/forums[their support forum] can be of aid in troubleshooting problems with the open source version of WINE.