# Can I execute/open VNC viewer exe from Perspective Client?

**URL:** <https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [August 21, 2025, 4:12pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050 "2025-08-21T16:12:59Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![suraj.shelake](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@suraj.shelake](https://forum.inductiveautomation.com/u/suraj.shelake)\
**Post date:** [August 21, 2025, 4:13pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/1 "2025-08-21T16:13:00Z")

</div>

I want to open a VNC viewer exe from the Ignition perspective client.  
The gateway for this specific project is on Linux-based system, The perspective clients will be launched on Windows-based systems (most of the times)

I have tried the system.util.execute and system.net.openURL function too - I guess these functions does not support in perspective.

Any other possible way?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [August 21, 2025, 4:15pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/2 "2025-08-21T16:15:00Z")

</div>

No, it won't be possible from Perspective.

In general it would be a bad thing if websites could execute arbitrary programs on your computer...

---

<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:** [August 21, 2025, 4:17pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/3 "2025-08-21T16:17:44Z")

</div>

The closest thing \[1\] would be a custom application (that your users have to install/you install for them) on each client computer that registers as a protocol handler and parses the provided URL to open some native executable:

> [@Emulating Mouse Clicks With Perspective](https://forum.inductiveautomation.com/t/emulating-mouse-clicks-with-perspective/95864/5):
>
> If you can guarantee where you're running these instances, you could theoretically "escape" the browser in a safe way using a deeplink. That is, inside Perspective trigger a navigation event to customApplication://someArguments (instead of http://someUrl). Then, if the local system has a protocol handler registered (this must be done out of band, you cannot do this on the page for the reasons Phil called out already), the web browser will prompt the user asking if they want to use customApplic…

> [@WebDev to open File Explorer](https://forum.inductiveautomation.com/t/webdev-to-open-file-explorer/47969/5):
>
> ((hm i might have replied on the wrong topic xd)) You can install an uri (on windows) that works for browsers (not the app) You gotta unzip and run it (as admin) on every client pc tho [registerExplorerURIScheme.zip](https://forum.inductiveautomation.com/uploads/short-url/pPlxsSccetxa62JGDTDVaHosx42.zip) (286 Bytes) this one goes like so, i use the link component to open in a new tab: explorer:C:\yourfile.txt

* * *

1. and it's not very close

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [August 21, 2025, 4:18pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/4 "2025-08-21T16:18:33Z")

</div>

Ha, I had that thought, but didn't bother 🙃

---

<div class="post-metadata">

**Author:** ![Spencer\_Lommel1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/spencer_lommel1/32/78679_2.png) [@Spencer\_Lommel1](https://forum.inductiveautomation.com/u/Spencer_Lommel1)\
**Post date:** [August 21, 2025, 4:29pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/5 "2025-08-21T16:29:11Z")

</div>

Like Paul mentioned, you _kind of_ can and we do this quite a bit. We have an in-house website for managing all of our HMI’s and users across multiple facilities so you can just lookup a machine and there is a VNC button that links to a URL similar to this `<custom_program>:?<our_vnc_viewer>.exe%20-connect%<device_ip>:<device_port>%20-<user_password>`

so then when you click the VNC button, it either opens or if it doesn’t work it gives you instructions on how to install `custom_program` on your computer.

This is incredibly nice because then when we rotate passwords or update the IP of an HMI we can store that in some database and automatically update our internal tool.

You will need to build your own `custom_program` but this is certainly doable

---

<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:** [August 21, 2025, 4:37pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/6 "2025-08-21T16:37:19Z")

</div>

> [@Spencer\_Lommel1](#):
>
> URL similar to this

What? You embed arbitrary executable names into URLs? Oy! 😬

On closer inspection, it encodes an _ **arbitrary command line** _ into the URL. That's not just scary, but an invitation to bad guys to abuse your employer. Aauuuugh! That's in your profile!

"Incredibly nice" is no excuse for a severity 10 security hole.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [August 21, 2025, 4:39pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/7 "2025-08-21T16:39:43Z")

</div>

A little scary.

I'd make it so the custom executable receives an alias, and the aliases are mapped to certain executables, with unknown aliases being ignored. And then still make it prompt the user with the executable before actually executing it.

---

<div class="post-metadata">

**Author:** ![Spencer\_Lommel1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/spencer_lommel1/32/78679_2.png) [@Spencer\_Lommel1](https://forum.inductiveautomation.com/u/Spencer_Lommel1)\
**Post date:** [August 21, 2025, 4:44pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/8 "2025-08-21T16:44:00Z")

</div>

Well the `<custom_program>` is always the same and is hard coded and only works with certain commands.

We do have quite a bit more security than I mentioned, I just typically don’t share exactly how our system works mostly for security reasons.

But I would definitely agree with you that a setup like this needs to be implemented very carefully

---

<div class="post-metadata">

**Author:** ![Spencer\_Lommel1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/spencer_lommel1/32/78679_2.png) [@Spencer\_Lommel1](https://forum.inductiveautomation.com/u/Spencer_Lommel1)\
**Post date:** [August 21, 2025, 4:54pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/9 "2025-08-21T16:54:14Z")

</div>

The command and arguments are all hard coded, I just used `<our_vnc_viewer>` and the other stuff in \<\> as placeholders for actual values. So at no point can you input any value that influences the command that is executed.

Do you see any issues with a setup like this?

---

<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:** [August 21, 2025, 4:58pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/10 "2025-08-21T16:58:31Z")

</div>

If things are hard-coded, you shouldn't need to include privileged info in the URL. Just a URL like `custom-proto-handler://some-named-target`. I would **not** include a target's password in either URL or hard-coded config.

---

<div class="post-metadata">

**Author:** ![Spencer\_Lommel1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/spencer_lommel1/32/78679_2.png) [@Spencer\_Lommel1](https://forum.inductiveautomation.com/u/Spencer_Lommel1)\
**Post date:** [August 21, 2025, 5:07pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/11 "2025-08-21T17:07:25Z")

</div>

I would agree and this could easily be moved into the `custom-proto-handler`. I believe the reason it wasn’t is because this internal tool is only accessible to certain people to change the IP’s and passwords of devices but this `custom-proto-handler` is used in some other places so we didn’t want to bundle in any database integration for pulling in VNC passwords.

This tool is also only accessible on an internal network and doesn’t make any calls outside of the network which is why the password in the URL was allowed

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [August 21, 2025, 7:03pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/12 "2025-08-21T19:03:26Z")

</div>

Some VNC servers include a listener on port 5800 which will serve a HTML page offering a link to download a Java-based VNC viewer into the browser. This will then connect as normal via port 5900.

Try it out in the client browser. If that works then try embedding it in a Perspective Inline Frame component. (I haven't tested it so I don't know where this scheme might come unstuck.)

For remote viewing-only mode you shouldn't need username / password. This should be configurable on the VNC server.

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [August 21, 2025, 9:58pm UTC](https://forum.inductiveautomation.com/t/can-i-execute-open-vnc-viewer-exe-from-perspective-client/110050/13 "2025-08-21T21:58:37Z")

</div>

There’s a resource on the Ignition Exchange that uses NoVNC and the WebDev module in Ignition to do a web based VNC client. I’ve personally modified it to work with some additional changes/features:

> [@Siemens HMI on VNC](https://forum.inductiveautomation.com/t/siemens-hmi-on-vnc/104308/4):
>
> No guarantees with this as it's not fully tested in the field yet, but seemed to work in-house. I've upgraded noVNC to the latest v1.6.0 version also just in case any improvements there help. Original Exchange Resource that was modified: I've moved configuration/passwords for each connection from being parameters on the URL to extra entries in the hosts.json file and added an option to allow immediate control of the VNC connection. Here's the help I put together for our in-house users: Im…

This has been field tested now and works very well.
