# Version 8 32-bit vision clients

**URL:** <https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658>\
**Category:** Ignition\
**Tags:** ignition80\
**Created:** [May 3, 2019, 7:28pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658 "2019-05-03T19:28:58Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 7, 2020, 3:46pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/42 "2020-04-07T15:46:19Z")

</div>

Is there any way to specify a backup / redundant gateway when using these scripts?  
I have a use case where there will be PI3s needing access to the redundant failover mechanism.

Thanks

---

<div class="post-metadata">

**Author:** ![jcoffman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jcoffman/32/6429_2.png) [@jcoffman](https://forum.inductiveautomation.com/u/jcoffman)\
**Post date:** [April 7, 2020, 5:25pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/43 "2020-04-07T17:25:01Z")

</div>

Sure, you should be able to add `-Djavaws.sr.gateway.addr.1=${BACKUP_ADDRESS}` to the launch command when targeting the `legacyClient.sh`

Thanks,  
Jonathan C

---

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 7, 2020, 5:56pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/44 "2020-04-07T17:56:04Z")

</div>

How would I modify it to look for the backup server if the main server isn’t available at runtime?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [April 7, 2020, 6:00pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/45 "2020-04-07T18:00:43Z")

</div>

It should do so automatically; the `sr.gateway.addr` prop is the list of addresses to check. They’ll be evaluated in order; so `.0`, then `.1`, etc, until a successful connection is made.

---

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 7, 2020, 6:13pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/46 "2020-04-07T18:13:16Z")

</div>

The script specifically downloads the .jar file each time from the master. Would there be a simple way to let it time out and check the backup?

edit: This type of code doesn’t help because it sets the primary as the server that the jar file is downloaded from.

```auto
curl -o .......
if [7 -eq $?] ; then
  curl -o backupserver

```

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [April 7, 2020, 7:28pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/47 "2020-04-07T19:28:38Z")

</div>

my bash-fu isn’t quite up to speed yet, but I think you use the ‘or’ double-pipe ( || ).

Example:

```bash
curl -k -o "$CURRENT_DIR/launchclient.jar" "$GATEWAY_ADDRESS/system/launchbin/launchclient.jar" ||
curl -k -o "$CURRENT_DIR/launchclient.jar" "$BACKUP_ADDRESS/system/launchbin/launchclient.jar"
```

---

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 7, 2020, 7:58pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/48 "2020-04-07T19:58:54Z")

</div>

The problem is that if the client runs the launchclient.jar from the backup machine, it won’t target the master when it comes back online. It will show trying to connect.

---

<div class="post-metadata">

**Author:** ![jcoffman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jcoffman/32/6429_2.png) [@jcoffman](https://forum.inductiveautomation.com/u/jcoffman)\
**Post date:** [April 8, 2020, 3:59pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/49 "2020-04-08T15:59:16Z")

</div>

When launching a client which must fallback to the backup are you still including the master in the launch command? Even when launching using the backup gateway’s launchclient.jar you should include both addresses (for example: `-Djavaws.sr.gateway.addr.0=${MASTER} -Djavaws.sr.gateway.addr.1=${BACKUP}`)  
When the master comes back on the client will be notified and the client will automatically switch over to the master.

---

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 13, 2020, 1:06pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/50 "2020-04-13T13:06:32Z")

</div>

Yes, I’m still using the master in the launch command. The problem stems from the launchclient.jar being downloaded from the backup server earlier in the script.

It appears that when the launchclient.jar is downloaded from the backup server, the master location is already set to the backup IP address. So when the master comes back online and resumes control, the client that was launched from the backup will show that the master is offline (trying to go to backup IP) and the backup (correct IP) is available but not in use.

---

<div class="post-metadata">

**Author:** ![jcoffman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jcoffman/32/6429_2.png) [@jcoffman](https://forum.inductiveautomation.com/u/jcoffman)\
**Post date:** [April 13, 2020, 2:54pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/51 "2020-04-13T14:54:11Z")

</div>

You may have to modify the script so that the master address is stored before download and referenced in the launch command?

---

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 13, 2020, 3:18pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/52 "2020-04-13T15:18:01Z")

</div>

Here’s my script verbatim. As you can see, `GATEWAY_ADDRESS="$1"` doesn’t depend on successful `curl` of `launchclient.jar`.

```auto
#! /bin/bash

CURRENT_DIR=$(cd "$( dirname "$; thenBASH_SOURCE[0]fi")" && pwd)
JAVA_CMD="/usr/lib/jvm/bellsoft-java11-arm32-vfp-hflt/bin/java"
GATEWAY_ADDRESS="$1"
SCOPE="$2"
PROJECT="$3"
BACKUP_ADDRESS="$4"

DESIGNER_MAIN=com.inductiveautomation.ignition.designer.DesignerStartupHook
VISION_MAIN=com.inductiveautomation.factorypmi.application.runtime.ClientLaunchHook
MAIN=$VISION_MAIN
BOOTSTRAP_MAIN=com.inductiveautomation.ignition.client.launch.BootstrapSwingFS

if ["$GATEWAY_ADDRESS" == ""]; then
  echo Must declare a gateway address
  usage
fi

if ["$GATEWAY_ADDRESS" == ""] ; then
  echo Must declare a scope of either "D" or "C"
  usage
else
  true=0
  if ["$SCOPE" == "d"] ; then
    true=1
  fi
  if ["$SCOPE" == "D"] ; then
    true=1
  fi
  if [$true == 1] ; then
    MAIN=$DESIGNER_MAIN
  else
    if ["$SCOPE" == "c"] ; then
      true=1
    fi
    if ["$SCOPE" == "C"] ; then
      true=1
    fi
    if [$true == 1] ; then
      if ["$PROJECT" == ""] ; then
        echo Must declare a Vision project when using Vision Client scope.
        usage
      fi
      MAIN=$VISION_MAIN
    else
      echo Must declare a scope value of 'D' or 'C'
      goto :usage
    fi
  fi
fi

if [-f "$CURRENT_DIR/launchclient.jar"]; then
  rm "$CURRENT_DIR/launchclient.jar"
fi

curl -o "$CURRENT_DIR/launchclient.jar" $GATEWAY_ADDRESS/system/launchbin/launchclient.jar
if [7 -eq $?] ; then

        curl -o "$CURRENT_DIR/launchclient.jar" $BACKUP_ADDRESS/system/launchbin/launchclient.jar
fi

if ["$PROJECT" != ""] ; then
  "$JAVA_CMD" -cp "$CURRENT_DIR/launchclient.jar" -Djavaws.sr.gateway.addr.0=$GATEWAY_ADDRESS -Djavaws.sr.gateway.addr.1=$BACKUP_ADDRESS -Djavaws.sr.scope=$SCOPE -Djavaws.sr.main=$MAIN -Djavaws.sr.project=$PROJECT -Djavaws.sr.runtimeOverride=true $BOOTSTRAP_MAIN
 else
  "$JAVA_CMD" -cp "$CURRENT_DIR/launchclient.jar" -Djavaws.sr.gateway.addr.0=$GATEWAY_ADDRESS -Djavaws.sr.gateway.addr.1=$BACKUP_ADDRESS -Djavaws.sr.scope=$SCOPE -Djavaws.sr.main=$MAIN -Djavaws.sr.runtimeOverride=true $BOOTSTRAP_MAIN
fi

usage() {
  echo Usage: legacyClient.sh GATEWAY_ADDRESS SCOPE PROJECT BACKUP_ADDRESS
}

```

---

<div class="post-metadata">

**Author:** ![jcoffman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jcoffman/32/6429_2.png) [@jcoffman](https://forum.inductiveautomation.com/u/jcoffman)\
**Post date:** [April 13, 2020, 3:37pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/53 "2020-04-13T15:37:59Z")

</div>

I just tested your script locally with a down master. The client launched (targeting the backup in the backup slot with a master status of “unknown”) and when the master came back online the client received a push notification and successfully connected to the master gateway.

Also, there were some fixes in ignition for gateway connections in 8.0.10 which _may_ affect this? Double check that you are on the latest version.

---

<div class="post-metadata">

**Author:** ![cbiela](https://avatars.discourse-cdn.com/v4/letter/c/a87d85/32.png) [@cbiela](https://forum.inductiveautomation.com/u/cbiela)\
**Post date:** [April 13, 2020, 4:11pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/54 "2020-04-13T16:11:29Z")

</div>

Ok, it appears to be working as of now. I’ll update if this changes. Not sure what the issue was.

---

<div class="post-metadata">

**Author:** ![mlopez48](https://avatars.discourse-cdn.com/v4/letter/m/bb73d2/32.png) [@mlopez48](https://forum.inductiveautomation.com/u/mlopez48)\
**Post date:** [August 27, 2020, 12:39am UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/55 "2020-08-27T00:39:44Z")

</div>

I tried launching the Designer and Client in Window and Full Screen but I keep getting the error message below. Any ideas?

![Screen Shot 2020-08-26 at 5.38.46 PM](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/0/9012b065725cd5864db9d2c98252adbef882c2c6.png)

---

<div class="post-metadata">

**Author:** ![Doug\_Jones](https://avatars.discourse-cdn.com/v4/letter/d/90db22/32.png) [@Doug\_Jones](https://forum.inductiveautomation.com/u/Doug_Jones)\
**Post date:** [November 9, 2023, 3:19pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/56 "2023-11-09T15:19:15Z")

</div>

...and then three years later, new problems arise.  
Configured a Pi4 running Debian GNU/Linux 12 to run a Vision Client using the previously mentioned legacyClient.sh laucher with BellSoft JDK-11-full.

I ran this successfully on my developement gateway. When I moved it over to the live ignition gateway for the facility, it broke with the error:  
UnsupportedClassVersionError: com/inductiveautomation/factrorypmi/application/runtime/ClientLaunchHook has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file version up to 55.0

My Developement Gateway was v8.1.23, while the Live Gateway is v8.1.33.  
I upgraded Java to BellSoft JDK-17-full to correct the class file version issue, but now get the error:  
ValidationException: JPMS Module opens/export check failed! check your --add-opens and --add-exports clauses

From what I have read they are trying to tighten the security of Java JDK with v17+  
I found that I will need to add a series of "--add-opens=" and "--add-exports" clauses to make the JDK work, but I am not a Java expert, and am not entirely sure where these clauses need to be added nor exactly which clauses need to be added.

Please advise on how to resolve this issue.  
Doug  
\m/

---

<div class="post-metadata">

**Author:** ![kcollins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kcollins/32/19646_2.png) [@kcollins](https://forum.inductiveautomation.com/u/kcollins)\
**Post date:** [November 9, 2023, 3:59pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/57 "2023-11-09T15:59:17Z")

</div>

Normally, the Launcher will query the gateway to retrieve the proper lists of opens/exports clauses for the Client/Designer.. You can query the list from your gateway via:

```bash
curl http://localhost:8088/system/clientJavaModules

```

---

<div class="post-metadata">

**Author:** ![Doug\_Jones](https://avatars.discourse-cdn.com/v4/letter/d/90db22/32.png) [@Doug\_Jones](https://forum.inductiveautomation.com/u/Doug_Jones)\
**Post date:** [November 9, 2023, 4:54pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/58 "2023-11-09T16:54:38Z")

</div>

Nifty. I run this command and get a list of add-opens and a list of add-expports, so they do exist at the gateway.  
Question 1: Why does the Launcher not perform this task?  
Question 2: How do I modify the Launcher to perform this task?

I appreciate the help and quick response,  
Doug  
\m/

---

<div class="post-metadata">

**Author:** ![jcoffman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jcoffman/32/6429_2.png) [@jcoffman](https://forum.inductiveautomation.com/u/jcoffman)\
**Post date:** [November 9, 2023, 5:14pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/59 "2023-11-09T17:14:08Z")

</div>

Hi @Doug_Jones,

The Launcher _does_ perform this task. You are using the stop-gap 32-bit launch scripts which don't do a lot of things the supported Launchers do. We don't ship a 32-bit arm launcher since 8.0 as support for 32-bit arm clients was dropped. This script is and has always been meant as a way to buy time to upgrade these devices to ones which support 64-bit architecture, so they no longer receive updates. However, you are free to update these scripts as you see fit, though I would recommend upgrading those systems in the near future.

Hope that sheds some light.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 9, 2023, 5:57pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/60 "2023-11-09T17:57:25Z")

</div>

Also keep in mind that the gateway service doesn't use a launcher itself. Only the Vision clients need a launcher.

---

<div class="post-metadata">

**Author:** ![Doug\_Jones](https://avatars.discourse-cdn.com/v4/letter/d/90db22/32.png) [@Doug\_Jones](https://forum.inductiveautomation.com/u/Doug_Jones)\
**Post date:** [November 10, 2023, 6:10pm UTC](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658/61 "2023-11-10T18:10:51Z")

</div>

This is helpful. This Pi4b is a 64bit ARM. I was running the 32bit launcher because it was recommended in another thread. Given that this is a 64bit Pi, I have downloaded the Ignition Gateway for 64bit ARM, and successfully /easily established a Gateway on this PI. From that Gateway, have downloaded the Vision Client Launcher for Linux that was offered. Following the instructions associated to that download, I have not had success launching the vision client.  
digging into the launch shell, it should be creating a log file for errors that it experiences, but it is not doing that. It appears that it is terminating without fault, but is not launching a vision client.  
Question1: Is there a separate linux vision client launcher for 64bit ARM that I am not finding?  
Question2: If not, is there any plan to develope such a thing?  
Question3: Should I move this line of questions to another thread, as I am no longer pursuing a 32-bit vision client?

[Previous page](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658.md?page=2)

[Next page](https://forum.inductiveautomation.com/t/version-8-32-bit-vision-clients/24658.md?page=4)
