PDS Software Client on macOS via Wine
The pds Software Client is Windows-only. It runs under Wine on macOS, but two things have to be fixed first or it will fail.
install-pds-wine.sh fixes both and creates a double-clickable app.
Verified on macOS 15 (Apple Silicon), Wine 11.0 (Homebrew), pds client 13.0.8.
brew install --cask wine-stable # if you don't have Wine
wine ./path-to/pds_13.0.8.exe # run the pds installer under Wine
./install-pds-wine.sh https://<your-tenant>.pdscloud.de/pdsThen launch pds Software Client from ~/Applications.
Use your own tenant URL — the same one the Windows install guide tells you to
put in the shortcut's properties. The installer's .desktop and .lnk files
on the Desktop are useless on macOS; ignore or delete them.
Overridable: WINEPREFIX, APP_DIR, WINE_BIN, APP_NAME. Re-running is
safe and idempotent.
1. Fonts. A fresh Wine prefix has an empty drive_c/windows/Fonts.
Java's Win32 font manager treats that as fatal — Probable fatal error: No physical fonts found. — and the client exits instantly, showing nothing. The
script copies the 34 MS core fonts macOS already ships in
/System/Library/Fonts/Supplemental into the prefix under the filenames Java
expects (arial.ttf, tahoma.ttf, …). Nothing is downloaded or redistributed.
2. Java2D's Direct3D pipeline. Java2D defaults to Direct3D on Windows.
Under Wine that fails via wined3d, and Swing paints into a surface that never
reaches the screen. The client logs in fine and the menus work, but any screen
you open afterwards is blank and button hover effects never appear. There is
no exception anywhere — the UI is fully alive underneath, just invisible
(the form will validate your input and refuse to close). Fixed with
-Dsun.java2d.d3d=false.
pdslauncher.jar is only a bootstrap. It hands off to getdown, which spawns
the real client (de.pds.application.client.PdsStandaloneLauncher) as a
separate process, with arguments taken from getdown.txt. A -D flag on
the javaw.exe command line reaches the bootstrap JVM and stops there — which
looks exactly like the flag not working. _JAVA_OPTIONS is read by every
HotSpot JVM in the process tree, so it reaches the client.
To check it landed, against the client pid (not the bootstrap):
export WINEPREFIX="$HOME/.wine"
JB="C:\\Program Files (x86)\\PDS\\pds Software Client\\pdsjre\\bin"
wine "$JB\\jps.exe" -l # find PdsStandaloneLauncher's pid
wine "$JB\\jcmd.exe" <pid> VM.system_properties | grep java2dThe embedded browser (JxBrowser/Chromium) does not start under Wine. Its
child process dies during init — IllegalStateException: Failed to receive the response from initChromium, leaving a ~45 MB dump under
AppData/Local/JxBrowser/<version>/CrashReports/. Screens embedding a browser
fail, and it can end the ULC session.
The client redirects its own stdout/stderr, so a terminal shows you nothing
useful. Look in ~/.wine/drive_c/users/$USER/polaris/:
| file | contents |
|---|---|
ulc-*.log |
application errors (ULC client logger, level WARNING) |
console-{out,err}-*.log |
redirected streams — empty if it died early |
direct-*.log |
native Windows message monitor |
For a startup crash that logs nothing at all, bypass the redirection entirely
with a JVM-level flag: -Xlog:exceptions=info:file=<path>.