Clone
2
Romexis Client
Patrick Gniza edited this page 2026-08-22 15:46:50 +02:00

Deutsch | English

Romexis Client

The romexis-client service provides browser-based access to the Linux Romexis Client through the same X11/noVNC runtime concept used by the Admin container.

It is built independently from romexis-admin: both images share romexis-gui-runtime, while the Client application files come from the dedicated romexis-client-payload image.


Image Dependencies

romexis-client-payload:<version>
            |
            v
romexis-gui-runtime:1-<arch>
            |
            v
romexis-client:<version>-<arch>

The separation prevents Admin-only changes from forcing a Client rebuild and keeps the large installer extraction independent from architecture-specific GUI dependencies.


Runtime Components

The shared GUI runtime provides:

Java 17
OpenJFX
Xvfb
Openbox
x11vnc
noVNC / websockify
GTK / Mesa / OpenGL dependencies
Chilkat
DxService compatibility library

The final Client image adds the version-specific Romexis Client payload and the Client startup/test scripts.


Access

The Client is exposed through noVNC. The concrete host port is controlled by the Compose configuration.

For logs:

docker compose logs -f romexis-client

Open a shell for troubleshooting:

docker compose run --rm --entrypoint /bin/bash romexis-client

Build and Tags

Published version tags follow the same pattern as Server and Admin:

romexis-client:<version>-amd64
romexis-client:<version>-arm64
romexis-client:<version>
romexis-client:latest

The architecture tags are created first. The public multi-architecture tags are published only after both architectures completed successfully.


Runtime Behavior

The container starts Xvfb, Openbox, idesk, x11vnc and noVNC. Romexis itself is not started automatically. Open the noVNC desktop and double-click the Romexis Client icon. This keeps an unused Client session from consuming a large Java heap and makes application startup visible to the operator.

The launcher uses a lock file to prevent duplicate Romexis processes and writes the Client log to:

/tmp/romexis-client.log

The optional debug terminal is controlled by CLIENT_DEBUG_XTERM.


Browser and Runtime Configuration

The default browser URL is:

http://localhost:6081/vnc.html?autoconnect=true
Variable Default Purpose
CLIENT_NOVNC_PORT 6081 Published noVNC host port
CLIENT_VNC_PASSWORD promax Password for the internal VNC server
CLIENT_RESOLUTION 1280x900x24 Virtual desktop resolution
CLIENT_JAVA_OPTS -Xss500k -Xmx16G Client JVM options
CLIENT_LANGUAGE de Romexis language
CLIENT_COUNTRY DE Java locale country
CLIENT_DEBUG_XTERM false Enables an additional debug terminal
ROMEXIS_AGENT_OPTIONPANE_PATCH true Enables the Java 17 Swing lifecycle fix

Compose publishes noVNC only. x11vnc listens on port 5900 inside the container but is not exposed as a host port by default.


RMI Resolution and Identity

The Client uses the public SERVER_RMI_HOSTNAME as the server and certificate identity. During container startup, that hostname is mapped to the internal address of the Compose service romexis. The Client launcher connects to the fixed container ports 1099 and 2099, even when the corresponding public host ports are translated.

Use a DNS hostname rather than an IP address when port translation is required. An IP address cannot be remapped to the internal service through /etc/hosts.


RomexisOptionPaneUI Patch

The shared RomexisPropertyAgent is loaded when the Client starts. Its server-specific RxCr2 replacement is disabled, while the OptionPane patch is enabled by default.

Under Java 17, an AWT property-change event can run a fraction too early, before the Planmeca class has initialized m_MessageArea. When the original listener subsequently calculates the dialog size, it calls getPreferredSize() on this null reference. The resulting NullPointerException occurs on the AWT event thread and can terminate the complete application instead of merely drawing the popup.

RomexisOptionPaneUIPatch transforms only romexis_laf.RomexisOptionPaneUI$MyPCListener.propertyChange() and inserts a null guard immediately before the failing call. The original Romexis JAR stays unchanged on disk. Disable the patch only for a controlled comparison:

ROMEXIS_AGENT_OPTIONPANE_PATCH=false

Persistent Data and Healthcheck

Client ProgramData is stored separately from Server and Admin state:

${ROMEXIS_DATA_ROOT}/docker/client/programdata
  -> /ProgramData/Planmeca/Romexis

The healthcheck validates the X display, the running Romexis.jar process and the noVNC port. Because Romexis starts on demand, the service can remain in starting or become unhealthy until the desktop icon has been used.


Operations and Troubleshooting

docker compose up -d romexis-client
docker compose logs -f romexis-client
docker compose exec romexis-client tail -f /tmp/romexis-client.log

If no desktop appears, check the Xvfb, Openbox, x11vnc and websockify messages in the container log. If Romexis exits after the icon is activated, inspect /tmp/romexis-client.log and confirm that SERVER_RMI_HOSTNAME resolves to the internal romexis service.