Skip to content

shinyhut/vernacular-vnc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f9969c5 · Nov 9, 2020

History

90 Commits
Nov 4, 2020
Jul 24, 2017
Nov 2, 2018
Oct 12, 2018
Sep 8, 2020
Nov 9, 2020

Repository files navigation

Vernacular VNC

Latest release Build Status License: MIT

Vernacular is a pure Java VNC remote desktop client library. Vernacular is open-source and released under the MIT license. If you find it useful, consider buying me a coffee:

ko-fi

Getting Started

The latest releases are available for manual download from our releases page. Vernacular is also available through Maven thanks to JCenter:

Maven

<dependencies>
    <dependency>
        <groupId>com.shinyhut</groupId>
        <artifactId>vernacular</artifactId>
        <version>1.10</version>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>central</id>
        <name>jcenter</name>
        <url>http://jcenter.bintray.com</url>
    </repository>
</repositories>

Gradle

repositories {
    jcenter()
}

dependencies {
    compile 'com.shinyhut:vernacular:1.10'
}

Usage

The Vernacular .jar file is executable, and it can be used as a simple but functional VNC client. However, Vernacular is primarily intended to be used as a library in third-party applications:

package com.shinyhut.vernacular;

import com.shinyhut.vernacular.client.VernacularClient;
import com.shinyhut.vernacular.client.VernacularConfig;
import com.shinyhut.vernacular.client.rendering.ColorDepth;

public class VernacularDemo {

    public static void main(String[] args) {

        VernacularConfig config = new VernacularConfig();
        VernacularClient client = new VernacularClient(config);

        // Select 8-bits per pixel indexed color, or 8/16/24 bits per pixel true color
        config.setColorDepth(ColorDepth.BPP_8_INDEXED);

        // Set up callbacks for the various events that can happen in a VNC session

        // Exception handler
        config.setErrorListener(Throwable::printStackTrace);

        // Password supplier - this is only invoked if the remote server requires authentication
        config.setPasswordSupplier(() -> "my secret password");

        // Handle system bell events from the remote host
        config.setBellListener(v -> System.out.println("DING!"));

        // Receive content copied to the remote clipboard
        config.setRemoteClipboardListener(text -> System.out.println(String.format("Received copied text: %s", text)));

        // Receive screen updates from the remote host
        // The 'image' parameter is a java.awt.Image containing a current snapshot of the remote desktop
        // Expect this event to be triggered several times per second
        config.setScreenUpdateListener(image -> {
            int width = image.getWidth(null);
            int height = image.getHeight(null);
            System.out.println(String.format("Received a %dx%d screen update", width, height));
        });

        try {
            // Start the VNC session
            client.start("localhost", 5900);

            // Move the mouse
            client.moveMouse(400, 300);

            // Click a mouse button. Buttons are numbered 1 - 3
            client.click(1);

            // Type some text.
            client.type("Hello world!");

            // Copy some text to the remote clipboard
            client.copyText("Hello from the VNC client!");

            // Let the VNC session continue as long as required
            try {
                Thread.sleep(10000);
            } catch (InterruptedException ignored) {
            }
        } finally {
            // Terminate the VNC session and cleanup
            client.stop();
        }
    }
}

For a more realistic example, see Vernacular Viewer in the source distribution, which demonstrates how to use Vernacular to build a working remote desktop application.