VNC remote desktop server app for Android
Find a file
Christian Beier eb84a8e538
res: fix splash screen icon for dark mode
This is using the Adaptive Icon resources where the icon itself
needs to have a transparent background. This commit makes the
adaptive icon's resources transparent.
2025-07-12 16:06:37 +02:00
.github build: let GitHub CI checkout submodules as well 2024-08-27 14:46:45 +02:00
.idea build: update IDEA gradle.xml 2025-05-27 08:24:56 +02:00
app res: fix splash screen icon for dark mode 2025-07-12 16:06:37 +02:00
doc README,doc: move Preseed Preferences description to doc subdir 2025-06-19 14:54:29 +02:00
fastlane/metadata/android res: add Russian translation 2025-07-11 19:18:06 +02:00
gradle/wrapper build: update Gradle 2025-06-29 11:34:40 +02:00
libjpeg-turbo@21b5817e60 build: update libjpeg-turbo submodule to 2.0.8-esr 2023-06-19 14:53:32 +02:00
libvncserver@0640ba52c0 build: update LibVNCServer submodule 2024-12-19 12:45:44 +01:00
noVNC@463c39e4af build: add noVNC v1.3.0 as a submodule 2024-08-19 18:25:29 +02:00
.gitignore Initial commit: add app scaffold 2020-07-10 15:07:13 +02:00
.gitmodules assets: link to noVNC submodule instead of shipping it verbatim 2024-08-19 18:25:54 +02:00
build.gradle build: update Gradle 2025-07-11 08:12:59 +02:00
CONTRIBUTING.md CONTRIBUTING: add section about code style 2021-08-15 13:44:14 +02:00
COPYING build: add GPL-2 license text 2020-12-20 21:45:14 +01:00
gradle.properties build: fix a Gradle deprecation warning 2025-03-28 08:35:23 +01:00
gradlew Initial commit: add app scaffold 2020-07-10 15:07:13 +02:00
gradlew.bat Initial commit: add app scaffold 2020-07-10 15:07:13 +02:00
logo.svg logo: add keyline grid layer, resize icon accordingly 2024-05-15 13:18:39 +02:00
notifications.svg notifications: add source file for different notification icons 2025-05-04 22:48:06 +02:00
playstore-banner.xcf playstore-banner: add 2020-12-20 20:31:35 +01:00
README.md InputService: add volume control keyboard shortcuts 2025-07-11 16:20:19 +02:00
settings.gradle Initial commit: add app scaffold 2020-07-10 15:07:13 +02:00

droidVNC-NG

Join the chat at https://gitter.im/droidVNC-NG/community

This is an Android VNC server using contemporary Android 7+ APIs. It therefore does not require root access. In reverence to the venerable droid-VNC-server is is called droidVNC-NG.

If you have a general question, it's best to ask in the community chat. If your concern is about a bug or feature request instead, please use the issue tracker.

Get it on F-Droid Get it on Google Play

Features

  • Network export of device frame buffer with optional server-side scaling.
  • Injection of remote pointer and basic keyboard events (Latin-1 charset plus some special keys, supporting any kind of UI widget on Android 14 and newer, on older devices into EditText widgets only).
  • Handling of client-to-server text copy & paste. Note that server-to-client copy & paste only works automatically for text selected in editable text fields or manually by sharing text to droidVNC-NG via Android's Share-To functionality.
  • Handling of special keys to trigger 'Recent Apps' overview, Home button, Back button, Power button and volume controls.
  • Android permission handling.
  • Screen rotation handling.
  • File transfer via the local network, assuming TightVNC viewer for Windows version 1.3.x is used.
  • Password protection for secure-in-terms-of-VNC connection. Note that setting a password is mandatory in case you want to access the server using MacOS's built-in Screen Sharing app.
  • Ability to specify the port used.
  • Start of background service on device boot.
  • Reverse VNC.
  • Ability to connect to a UltraVNC-style Mode-2 repeater.
  • Functionality to provide default configuration via a JSON file or Mobile Device Management.
  • Zeroconf/Bonjour publishing for VNC server auto-discovery.
  • Per-client mouse pointers on the controlled device.
  • Ability to control a devices shared screen directly from a web browser by shipping the fabulous noVNC client with the server app. This alleviates the need for a native VNC client.

How to use

Keyboard Shortcuts From a VNC Viewer

  • Ctrl-Shift-Esc triggers 'Recent Apps' overview
  • Home/Pos1 acts as Home button
  • End acts as Power button
  • Escape acts as Back button
  • Ctrl-Alt-PageUp increases audio volume
  • Ctrl-Alt-PageDown decreases audio volume

Within a Local Area Network

  1. Install the app from either marketplace.
  2. Get it all the permissions required.
  3. Set a good password and consider turning the Start on Boot off.
  4. Connect to your local Wi-Fi. For accepting a connection your device should be connected to some Local Area Network that you can control, normally it is a router.
  5. Click Start and connect to your device.

From The Internet

Disclaimer: Anything else than password exchange is currently not encrypted, so use at your own risk!

If you want to accept incoming connections from VNC viewers:

  1. You should allow Port Forwarding in your router's Firewall settings. Either find a UPnP supported app to open ports dynamically or log in to your router's settings (usually open 192.168.1.1 in your browser, some routers have password written on them).

  2. Find Port Forwarding, usually it's somewhere in Network - Firewall - Port Forwards.

  3. Create a new rule, this is an example from OpenWRT firmware.

    Name: VNC forwarding

    Protocol: TCP

    Source zone: wan may be "internet", "modem", something that suggests the external source.

    External port: 5900 by default or whatever you specified in the app.

    Destination zone: lan something that suggests local network.

    Internal IP address: your device's local IP address, leaving any is less secure. The device's address may change over time! You can look it up in your routers' connected clients info.

    Internal port: same as external port.

  4. Apply the settings, sometimes it requires rebooting a router.

  5. Figure out your public address i.e. https://www.hashemian.com/whoami/.

  6. Use this address and port from above to connect to your device.

Reverse VNC

Here's how to connect to a listening VNC viewer or repeater without opening a server port:

  1. Leave the VNC port blank, which will get the Admin Panel to state the server isn't listening for incoming connections.
  2. Make outbound connections by choosing either "Connect to a listening viewer" or "Connect to a repeater".

How to Pre-seed Preferences

DroidVNC-NG can be supplied with defaults for preferences that apply if preferences were not changed by the user.

See the Preseed Preferences Docs for more details.

Remote Control via the Intent Interface

droidVNC-NG features a remote control interface by means of Intents. This allows starting the VNC server from other apps or on certain events. It is designed to be working with automation apps like MacroDroid, Automate or Tasker as well as to be called from code.

See the Intent Interface Docs for more details.

Building

  • After cloning the repo, make sure you have the required git submodules set up via git submodule update --init.
  • Then simply build via Android Studio or gradlew.

Contributing

Contributions to the project are very welcome and encouraged! They can come in many forms. You can:

Notes

  • Requires at least Android 7.

  • Since Android 10, the permission to access the screen contents has to be given on each start and is not saved. You can, however, work around this by installing adb (or simply Android Studio) on a PC, connecting the device running droidVNC-NG to that PC and running adb shell cmd appops set net.christianbeier.droidvnc_ng PROJECT_MEDIA allow once. Alternatively, if using the intent interface, you can also start with net.christianbeier.droidvnc_ng.EXTRA_FALLBACK_SCREEN_CAPTURE set to true.

  • You can also use adb to manually give input permission prior to app start via adb shell settings put secure enabled_accessibility_services net.christianbeier.droidvnc_ng/.InputService:$(adb shell settings get secure enabled_accessibility_services).

  • If you are getting a black screen in a connected VNC viewer despite having given all permissions, it might be that your device does not support Android's MediaProjection API correctly. To find out, you can try screen recording with another app, ScreenRecorder. If it fails as well, your device most likely does not support screen recording via MediaProjection. This is known to be the case for Android-x86.

  • In case you happen to have a board with an Ethernet interface and experience strange hangs during a VNC session, setting the interface to a slower speed might help. This workaround can be applied with mii-tool, for instance.

  • If you see a a floating button similar to this on your screen after enabling accessibility, make sure you have the "shortcut" option in accessibility settings turned to off.

  • Due to limitations in Android API, secondary displays are not supported.