Siemens LOGO! Soft Comfort Linux: Fixing Java GUI Display Errors

David Krause11 min read
HMI ProgrammingSiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Problem Overview

Siemens LOGO! Soft Comfort is the engineering environment used to program LOGO! logic modules (catalog prefix 6ED1, currently LOGO! 8.3 / 8.4 families). Earlier generations of the software (V5.x and V6.x, released approximately 2004 to 2010) were distributed as Java-based applications that could, in principle, execute on Linux. Operators deploying these versions on Linux frequently encounter a specific failure mode: the launcher starts, the JVM (Java Virtual Machine) loads, the process is visible in ps or the GNOME/KDE task list, but the main application frame renders as an empty gray window. No menus, no toolbar, no LAD/FBD editor canvas, and no program tree appear. The Java console, when enabled, reports no exceptions, but the AWT/Swing container never finishes its peer initialization.

One reproducer reported in the field looks like this:

  • Distribution: Linux Ubuntu 7.10 (Gutsy Gibbon), kernel 2.6.22, X.org 7.2, GTK+ 2.12
  • Runtime: JDK 6.0 installed (Sun Microsystems build), later downgraded to JRE 1.6.0_xx
  • Install path: /home/programs/logo and the Siemens default /usr/local/bin/Siemens/...
  • Symptom: launcher creates an empty 1024x768 frame, no widgets drawn, window cannot be closed cleanly without kill -9

The window does not crash; it is a hung render loop. The root cause is almost always environmental, not a defect in the LOGO! program file (.lsc / .lpd). The four environmental layers to inspect, in order, are: (1) JRE selection and registration, (2) JAVA_HOME and PATH, (3) X11 display and peer libraries (libXtst, libXrender), and (4) the install layout that the Siemens Java Web Start bootstrapper expects.

Scope notice: This document targets the legacy Java-delivered LOGO! Soft Comfort V5/V6/V7 line. LOGO! Soft Comfort V8.0 and later (8.0, 8.1, 8.2, 8.3, 8.4) are native Windows applications integrated with TIA Portal and are not Java-based. Linux deployment for those versions requires Windows + TIA Portal or a virtualized Windows host; the JRE troubleshooting below does not apply.

Affected Versions and Components

The Java-based distribution line covers the following software identifiers as published on the Siemens Industry Online Support portal:

Component Identifier / Order Number Java Runtime Required Status
LOGO! Soft Comfort V5.0 6ED1058-0BA02-0YA0 JRE 1.4.2 / 1.5 Discontinued
LOGO! Soft Comfort V6.0 6ED1058-0BA02-0YA1 JRE 1.5.0 Discontinued
LOGO! Soft Comfort V6.1 6ED1058-0BA02-0YA2 JRE 1.5.0 / 1.6.0 Discontinued
LOGO! Soft Comfort V7.0 6ED1058-0BA02-0YA3 JRE 1.6.0 (u7 or later recommended) Discontinued
LOGO! Soft Comfort V8.x 6ED1058-0BA02-0YA8 Not Java-based (Win32/.NET) Current

For the affected V5 to V7 range, the runtime is documented in the bundled readme.rtf and the LOGO! Soft Comfort V7.0 system manual (entry ID 109741776 in the Siemens Industry Online Support). The Java bootstrapper is delivered as a JNLP descriptor (logo.jnlp) plus a set of signed JAR archives (logo_base.jar, logo_fbd.jar, logo_comm.jar) totaling roughly 18 to 24 MB depending on locale pack.

Root Cause Analysis

Four root causes account for the empty-window symptom in roughly 95% of field cases. Confirm each in order.

Cause 1 - JRE versus JDK Mismatch

The Siemens launcher is a Swing/AWT application. It needs a JRE (Java Runtime Environment), not a JDK (Java Development Kit). A JDK install does not automatically register itself as the system JRE. On Linux Ubuntu 7.10 with the default sun-java6-jdk package, the JRE directory tree exists under /usr/lib/jvm/java-6-sun/jre but java -version may resolve to the JDK launcher, which is acceptable for the Java compiler but is not what the LOGO! JNLP wants. Verify with:

update-alternatives --list java

The output must contain a path ending in /jre/bin/java or /java/bin/java. If it points to a path that does not end in jre/bin/java, the launcher's classpath resolver will fail to locate the Swing peer libraries and will silently produce an empty frame.

Cause 2 - Missing or Unset JAVA_HOME

The java shell wrapper that ships with Siemens installers checks $JAVA_HOME before it scans $PATH. If JAVA_HOME is unset, the wrapper falls back to a hard-coded probe order that does not include the user's /home/programs/logo layout. Set it explicitly in /etc/profile, ~/.bashrc, or the launcher script:

export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre
export PATH=$JAVA_HOME/bin:$PATH

Then re-source the file or open a fresh terminal before relaunching.

Cause 3 - X11 Peer Libraries Missing

JDK 6 / JRE 6 on Linux requires three native libraries for the AWT peers. On Ubuntu 7.10 these are split out and frequently absent on minimal installs:

  • libXtst.so.6 - required by java.awt.Robot and the XTest extension
  • libXrender.so.1 - required by Swing text rendering
  • libXi.so.6 - required for XInput device registration

Install with:

sudo apt-get install libxtst6 libxrender1 libxi6

If any of these is missing, the JRE prints a non-fatal warning to stderr and Swing silently fails to instantiate the window peers. The result is exactly the empty gray window described in the source reproducer.

Cause 4 - Install Layout and Signed JAR Cache

The Siemens bootstrapper writes user settings and the signed JAR cache to $HOME/.siemens/logo/. If the cache becomes corrupted, the JNLP client refuses to revalidate the signed archives, and the launcher renders a blank canvas while waiting for an HTTP response from localhost:8080 (the embedded JNLP server). Clear the cache and retry:

rm -rf $HOME/.siemens
rm -rf $HOME/.java/deployment/cache

Reinstall to the Siemens default path (/usr/local/bin/Siemens/LOGOComfort) to ensure the wrapper's findJRE shell helper can locate the runtime:

sudo mkdir -p /usr/local/bin/Siemens
sudo chown $USER:$USER /usr/local/bin/Siemens
cd /home/programs/logo
./install.sh --target /usr/local/bin/Siemens

Prerequisites

Before applying the fixes below, confirm the following baseline:

  1. Siemens LOGO! Soft Comfort V5.x, V6.x, or V7.x installer is present on disk (e.g. LOGOComfort_V7_0_0.jar).
  2. Sun Microsystems JRE 6 update 7 or later, or the OpenJDK 6 build, is installed and reachable from $PATH.
  3. The Linux session has a valid X11 display: echo $DISPLAY returns :0.0 or similar.
  4. The user has write access to $HOME/.siemens and to the install target directory.
  5. Kernel 2.6.x or later, glibc 2.5 or later, and an X server that supports the XRender extension.

Step-by-Step Diagnostic Procedure

Work through the procedure in order. Do not skip steps; the empty window can be caused by any single layer in isolation or by a combination of two or more.

Step 1 - Verify the Active JRE

java -version 2>&1
which java
readlink -f $(which java)

Expected output (or equivalent) for JRE 1.6.0 update 7+:

java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

If you see Java(TM) SE Development Kit in the second line you are pointing at the JDK. Switch with:

sudo update-alternatives --config java

Step 2 - Confirm JAVA_HOME and PATH

echo "JAVA_HOME=$JAVA_HOME"
echo "PATH=$PATH" | tr ':' '\n' | head -5

JAVA_HOME must point at the JRE root, not the JDK root. Common correct value on Ubuntu 7.10:

JAVA_HOME=/usr/lib/jvm/java-6-sun/jre

If unset, append to ~/.bash_profile and re-login:

export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre
export PATH=$JAVA_HOME/bin:$PATH

Step 3 - Test the X11 Peer Stack

ldd $(which java) | grep -E 'libXtst|libXrender|libXi'
xdpyinfo | grep -E 'XRender|XTEST'

All three libraries must be present. xdpyinfo must list XRender and XTEST in the extensions list. If any line is missing, install the package and restart the X session.

Step 4 - Launch with Verbose Java Console

javaws -verbose -Xnosplash logo.jnlp 2>&1 | tee /tmp/logo_java.log

Inspect /tmp/logo_java.log for the strings JREFind, PeerCanvas, and WindowPeer. A successful run will show three or more WindowPeer initializations corresponding to the main frame, the toolbox palette, and the message window. A failure shows PeerCanvas null or simply never logs the second WindowPeer event.

Step 5 - Reinstall to Default Path and Reset Cache

rm -rf $HOME/.siemens $HOME/.java/deployment/cache
sudo rm -rf /usr/local/bin/Siemens
sudo mkdir -p /usr/local/bin/Siemens
sudo chown $USER:$USER /usr/local/bin/Siemens
java -jar LOGOComfort_V7_0_0.jar

Step 6 - Launch from the Terminal

cd /usr/local/bin/Siemens/LOGOComfort
./start.sh

If the empty window persists, capture a thread dump and attach to a support ticket:

jps -l
kill -3 <PID>
cat /proc/<PID>/fd/1 | tail -200

Troubleshooting Matrix

Symptom Likely Cause Diagnostic Command Fix
Empty gray window, no widgets X11 peer libs missing ldd $(which java) Install libxtst6 libxrender1 libxi6
Empty window, Java console reports Could not find JRE JAVA_HOME unset echo $JAVA_HOME Export JAVA_HOME to JRE root
Launcher exits immediately with no window JRE version too new (Java 7+) java -version Install JRE 1.6.0 u7+
Window appears, then freezes at splash Signed JAR cache corrupted Check $HOME/.java/deployment/log Clear deployment cache
Window appears offscreen Window manager quirks wmctrl -l Reset $HOME/.siemens
Empty window, no console output Running headless over SSH echo $DISPLAY Use ssh -X or local console
Empty window, locale errors in log Missing LANG variable echo $LANG Set LANG=en_US.UTF-8
Window appears black on XRender fallback GPU driver issues with XRender xdpyinfo | grep XRender Disable XRender with -Dsun.java2d.xrender=false

Advanced Configuration

Forcing a Specific JRE for the Launcher

Edit the start.sh wrapper or create a $HOME/.logo/jre.conf file with the absolute path to the desired JRE:

JRE_PATH=/usr/lib/jvm/java-6-sun/jre/bin/java

The wrapper checks this file before probing JAVA_HOME or PATH.

Disabling XRender for Broken GPU Drivers

On certain Intel i8xx and early NVIDIA chipsets, the XRender extension causes Swing to render into a black or gray bitmap that is then never composited. Disable it with:

java -Dsun.java2d.xrender=false -jar /usr/local/bin/Siemens/LOGOComfort/lib/logo_base.jar

Forcing Software Pipeline Rendering

java -Dsun.java2d.opengl=false -Dsun.java2d.pmoffscreen=false \
     -Dawt.useSystemAAFontSettings=on \
     -jar /usr/local/bin/Siemens/LOGOComfort/lib/logo_base.jar

Increasing JVM Heap for Large Programs

Programs that exceed 200 function blocks (the LOGO! 6/7 maximum of 200 was raised to 400 in the 0BA7 and 0BA8 hardware) may fail to render the canvas with a 256 MB default heap. Increase with:

export JAVA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=256m"

Verification

After applying the fixes, validate the installation with the following sequence:

  1. Launch the application from a terminal with javaws -Xnosplash logo.jnlp. The main frame, menu bar, and tool palette must appear within 8 to 12 seconds on a 1.6 GHz class CPU.
  2. Open the sample program $INSTALL_DIR/samples/light_staircase.lsc. The FBD canvas must show six function blocks wired to a relay coil.
  3. Click Simulation > Start. The status indicators on the function blocks must animate. If the animation runs, the peer library stack and the Java/Swing bridge are both functional.
  4. Click PC -> LOGO! or LOGO! -> PC in the Tools menu. The communication dialog must enumerate any connected LOGO! 0BA6/0BA7 device on COM or Ethernet.
  5. Close the application using the window manager close button. The process must exit cleanly with return code 0 (verify with echo $? in the terminal).

Preventive Hardening for Production Stations

For engineering stations that run the Java-based LOGO! Soft Comfort on a long-term basis, lock down the runtime to prevent drift:

  1. Pin the JRE with a wrapper script that exports JAVA_HOME, JRE_PATH, and _JAVA_OPTIONS before invoking the JNLP client.
  2. Lock $HOME/.siemens and $HOME/.java to a per-user ownership model; avoid chmod 777 on these directories.
  3. Disable JRE auto-update. The Siemens JNLP bootstrapper was signed under a 2008-vintage certificate, and JRE 8 or later rejects certificates with SHA1 signatures by default. Pin to a known-good JRE 6 update.
  4. Disable IPv6 on the engineering station. The JNLP client's HTTP retry loop on ::1 can stall for 30 to 75 seconds before falling back to IPv4, which the operator may interpret as a frozen launch.
  5. Reserve the engineering station as a single-purpose machine. Co-locating Eclipse, NetBeans, or LibreOffice on the same X session can cause the AWT focus sub-system to lose the LOGO! window to a backgrounded peer.

Migration Path to Current Releases

LOGO! Soft Comfort V8.x and V8.4 are no longer Java applications. The current engineering environment is bundled with TIA Portal V18 or V19, and runs as a native Windows .NET application. Siemens explicitly retired the Linux distribution line in 2014. The relevant migration milestones are:

  • LOGO! Soft Comfort V8.0 (2014): final Java-removed build; requires Windows 7 SP1 or later.
  • LOGO! Soft Comfort V8.1 (2016): TIA Portal V14 integration; first build that reads .lsc files exported by V7.x without re-save.
  • LOGO! Soft Comfort V8.2 (2018): TIA Portal V15.1; adds 0BA8 Standard and LOGO! CMR2020 cellular router support.
  • LOGO! Soft Comfort V8.3 (2020): TIA Portal V16; adds web server V2.0 configuration for the LOGO! 8.3 base module (6ED1052-1xx08-0BAx).
  • LOGO! Soft Comfort V8.4 (2022): TIA Portal V17; adds Modbus TCP client and energy meter function blocks.

For ongoing production support, plan migration to V8.4 on TIA Portal V18 or later. The JRE troubleshooting documented here remains relevant only for the small installed base of older stations still running the V7 line on legacy hardware.

Frequently Asked Questions

Why does LOGO! Soft Comfort V5/V6/V7 need a JRE and not a JDK?

LOGO! Soft Comfort V5 through V7 is a Swing/AWT client application and requires only a Java Runtime Environment (JRE) for execution. The JRE ships the JVM, the standard library, and the AWT peer libraries. A JDK adds the Java compiler (javac), debuggers, and Javadoc tooling that the LOGO! program does not need. Installing the JDK does not auto-register the JRE, which is the most common cause of the empty-window startup failure on Linux.

What JRE version is required for LOGO! Soft Comfort V7.0?

JRE 1.6.0 update 7 or later, build 1.6.0_xx where xx is at least 07. JRE 1.5.0 is also accepted but exhibits known memory leaks on programs that exceed 100 function blocks. JRE 1.7.0 and later are not officially supported on the V7 bootstrapper and trigger a JNLP signature validation failure that is not surfaced to the user.

Can LOGO! Soft Comfort V8.x be installed on Linux?

No. V8.0 and later are Windows-only Win32/.NET applications bundled with TIA Portal. Linux deployment requires Windows (native, on a virtualized host with full USB passthrough for the LOGO! PC cable order number 6ED1057-1AA00-0BA0, or on Wine with manual COM port mapping). The JRE troubleshooting steps in this article do not apply to V8.x.

How do I clear a corrupted Siemens JAR cache on Linux?

Delete the directories $HOME/.siemens and $HOME/.java/deployment/cache, then relaunch with javaws -Xnosplash logo.jnlp. The JNLP client will redownload the signed JARs from the local embedded JNLP server. The process takes 20 to 40 seconds on a typical engineering station.

Why does the window appear empty when running over SSH?

SSH sessions without X forwarding set DISPLAY to an empty string. The JRE starts, but the X server connection fails. The window is drawn into a 1x1 invisible root window. Use ssh -X user@host for X11 forwarding or ssh -Y for trusted forwarding, and confirm echo $DISPLAY returns a value such as localhost:10.0 on the remote host before launching LOGO! Soft Comfort.

Back to blog