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 it 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.
Start on Boot off.Start and connect to your device.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:
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.
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".
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.
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.
git submodule update --init.gradlew.Contributions to the project are very welcome and encouraged! They can come in many forms. You can:
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.
On some Android TVs, mouse input is not routed through. This seems to be an OS issue caused by the manufacturer's build config. You can still navigate the TV user interface via a VNC viewer by using cursor keys and Enter.
Starting with Android 16, app components can opt-out of of accepting input from AccessibilityService, so these will not be getting input from droidVNC-NG.
$ claude mcp add droidVNC-NG \
-- python -m otcore.mcp_server <graph>