A VNC server for wlroots based Wayland compositors
Alternatives To Wayvnc
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
3 days ago814mitC
i3-compatible Wayland compositor
12 hours ago205bsd-3-clauseC++
Hyprland is a highly customizable dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
3 days ago406mitC++
Highly customizable Wayland bar for Sway and Wlroots based compositors. :v: :tada:
10 days ago316mitC++
A modular and extensible wayland compositor
6 days ago32otherC
dwm for Wayland
Awesome Wayland1,143
5 months ago5cc0-1.0
A curated list of Wayland code and resources.
19 hours ago4July 25, 2021110mitRust
A smithy for rusty wayland compositors
Papyros Shell975
7 years ago77gpl-3.0C++
:shell: The desktop shell for Papyros, built using QtQuick and QtCompositor as a compositor for Wayland.
a year ago10mitC
Grab images from a Wayland compositor
2 months agon,ullmitC
A Wayland kiosk
Alternatives To Wayvnc
Select To Compare

Alternative Project Comparisons


Build and Unit Test builds.sr.ht status Packaging status


This is a VNC server for wlroots-based Wayland compositors (⛔️ Gnome, KDE and Weston are not supported). It attaches to a running Wayland session, creates virtual input devices, and exposes a single display via the RFB protocol. The Wayland session may be a headless one, so it is also possible to run wayvnc without a physical display attached.

Please check the FAQ for answers to common questions. For further support, join the #wayvnc IRC channel on libera.chat, or ask your questions on the GitHub discussion forum for the project.


# Arch Linux
pacman -S wayvnc

# FreeBSD
pkg install wayvnc

# Fedora
dnf install wayvnc

# Debian (unstable / testing)
apt install wayvnc

# openSUSE Tumbleweed
zypper install wayvnc

# Void Linux
xbps-install wayvnc


Runtime Dependencies

  • aml
  • drm
  • gbm (optional)
  • libxkbcommon
  • neatvnc
  • pam (optional)
  • pixman
  • jansson

Build Dependencies

  • GCC
  • meson
  • ninja
  • pkg-config

For Arch Linux

pacman -S base-devel libglvnd libxkbcommon pixman gnutls jansson

For Fedora 37

dnf install -y meson gcc ninja-build pkg-config egl-wayland egl-wayland-devel \
	mesa-libEGL-devel mesa-libEGL libwayland-egl libglvnd-devel \
	libglvnd-core-devel libglvnd mesa-libGLES-devel mesa-libGLES \
	libxkbcommon-devel libxkbcommon libwayland-client \
	pam-devel pixman-devel libgbm-devel libdrm-devel scdoc \
	libavcodec-free-devel libavfilter-free-devel libavutil-free-devel \
	turbojpeg-devel	wayland-devel gnutls-devel jansson-devel

For Debian (unstable / testing)

apt build-dep wayvnc

For Ubuntu

apt install meson libdrm-dev libxkbcommon-dev libwlroots-dev libjansson-dev \
	libpam0g-dev libgnutls28-dev libavfilter-dev libavcodec-dev \
	libavutil-dev libturbojpeg0-dev scdoc

Additional build-time dependencies

The easiest way to satisfy the neatvnc and aml dependencies is to link to them in the subprojects directory:

git clone https://github.com/any1/wayvnc.git
git clone https://github.com/any1/neatvnc.git
git clone https://github.com/any1/aml.git

mkdir wayvnc/subprojects
cd wayvnc/subprojects
ln -s ../../neatvnc .
ln -s ../../aml .
cd -

mkdir neatvnc/subprojects
cd neatvnc/subprojects
ln -s ../../aml .
cd -

Configure and Build

meson build
ninja -C build

To run the unit tests:

meson test -C build

To run the integration tests:



Wayvnc can be run from the build directory like so:


☢️ The server only accepts connections from localhost by default. To accept connections via any interface, set the address to like this:


⚠️ Do not do this on a public network or the internet without user authentication enabled. The best way to protect your VNC connection is to use SSH tunneling while listening on localhost, but users can also be authenticated when connecting to wayvnc.

Encryption & Authentication

You'll need a private X509 key and a certificate. A self-signed key with a certificate can be generated like so:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
	-keyout key.pem -out cert.pem -subj /CN=localhost \
	-addext subjectAltName=DNS:localhost,DNS:localhost,IP:

Replace localhost and in the command above with your public facing host name and IP address, respectively, or just keep them as is if you're testing locally.

Create a config with the authentication info and load it using the --config command line option or place it at the default location $HOME/.config/wayvnc/config.


wayvncctl control socket

To facilitate runtime interaction and control, wayvnc opens a unix domain socket at $XDG_RUNTIME_DIR/wayvncctl (or a fallback of /tmp/wayvncctl-$UID). A client can connect and exchange json-formatted IPC messages to query and control the running wayvnc instance.

Use the wayvncctl utility to interact with this control socket from the command line.

See the wayvnc(1) manpage for an in-depth description of the IPC protocol and the available commands, and wayvncctl(1) for more on the command line interface.

There is also a handy event-loop mode that can be used to run commands when various events occur in wayvnc. See examples/event-watcher for more details.

Popular Compositor Projects
Popular Wayland Projects
Popular Graphics Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Remote Desktop