ITADN
any1/wayvnc
any1/wayvnc · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

wayvnc

builds.sr.ht status Packaging status

简介

这是一个用于基于 wlroots 的 Wayland 合成器(:no_entry: Gnome、 KDE 和 Weston 受支持)的 VNC 服务器。它会附加到一个正在运行的 Wayland 会话, 创建虚拟输入设备,并通过 RFB 协议暴露单个显示。Wayland 会话可以是无头(headless)的,因此 也可以在没有连接物理显示器的情况下运行 wayvnc。

请查阅 FAQ 以获取常见问题的答案。如需进一步 支持,请加入 libera.chat 上的 #wayvnc IRC 频道,或在 GitHub 上针对该项目的 讨论区 提问。

构建

运行时依赖

  • aml
  • drm
  • gbm(可选)
  • libxkbcommon
  • neatvnc
  • pam(可选)
  • pixman
  • jansson

构建依赖

  • GCC
  • meson
  • ninja
  • pkg-config

适用于 Arch Linux

pacman -S base-devel libglvnd libxkbcommon pixman gnutls jansson

适用于 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

适用于 Debian(unstable / testing)

apt build-dep wayvnc

适用于 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

额外的构建时依赖

满足 neatvnc 和 aml 依赖的最简单方法是在 subprojects 目录中链接它们:

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 -

配置与构建

meson build
ninja -C build

运行单元测试:

meson test -C build

运行集成测试

./test/integration/integration.sh

运行

可以从构建目录按如下方式运行 Wayvnc:

./build/wayvnc

:radioactive: 服务器默认仅接受来自 localhost 的连接。若要 接受通过任意接口的连接,请将地址设置为 0.0.0.0,如下所示:

./build/wayvnc 0.0.0.0

:warning: 在未启用用户身份验证的情况下,请勿在公共网络或互联网上执行此操作。保护 VNC 连接的最佳方式是在监听 localhost 时使用 SSH 隧道,但用户也可以在连接到 wayvnc 时进行身份验证。

加密与身份验证

VeNCrypt (TLS)

对于 TLS,您需要一个私有的 X509 密钥和一个证书。可以通过以下方式生成带有证书的自签名密钥:

cd ~/.config/wayvnc
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -sha384 \
	-days 3650 -nodes -keyout tls_key.pem -out tls_cert.pem \
	-subj /CN=localhost \
	-addext subjectAltName=DNS:localhost,DNS:localhost,IP:127.0.0.1
cd -

将上述命令中的 localhost127.0.0.1 分别替换为您的对外主机名和 IP 地址,或者如果您是在本地测试,则保持原样即可。

创建一个包含身份验证信息的配置文件,并使用 --config 命令行选项加载它,或者将其放置在默认位置 $HOME/.config/wayvnc/config

use_relative_paths=true
address=0.0.0.0
enable_auth=true
username=luser
password=p455w0rd
private_key_file=tls_key.pem
certificate_file=tls_cert.pem

RSA-AES

RSA-AES 安全类型将 RSA 与 EAX 模式下的 AES 相结合,提供能够抵御窃听和 MITM 的安全身份验证和加密。其主要弱点是用户必须在首次使用时验证服务器的凭据。此后,如果服务器凭据发生变化,客户端软件应警告用户。这是一种类似于 SSH 所采用的首次使用信任 (TOFU) 方案。

要启用 RSA-AES,您需要生成一个 RSA 密钥。可以按以下方式实现:

ssh-keygen -m pem -f ~/.config/wayvnc/rsa_key.pem -t rsa -N ""

您还需要通过设置 rsa_private_key_file 配置参数来告诉 wayvnc 该文件的位置:

use_relative_paths=true
address=0.0.0.0
enable_auth=true
username=luser
password=p455w0rd
rsa_private_key_file=rsa_key.pem

您还可以添加 TLS 凭据与 RSA 结合使用。客户端将自行选择。

DES 身份验证 (遗留)

:warning: DES 认证不提供 VNC 会话的加密。它 使用过时的质询-响应方案,仅使用密码的前 8 个字符。这不安全,不符合任何现代标准。

此选项仅用于兼容支持 DES 但不支持无认证模式的 VNC 客户端,例如 macOS 屏幕共享。

如果需要支持此类客户端,请在配置中添加以下内容:

enable_auth=true
password=p455w0rd
relax_encryption=true
allow_broken_crypto=true

当启用 enable_pam 时,DES 认证不起作用,因为 PAM 会覆盖 基于密码的认证。

在不完全信任的网络中,请使用 SSH 隧道或 VPN 来提供 加密。

wayvncctl 控制套接字

为了便于运行时交互和控制,wayvnc 会在 $XDG_RUNTIME_DIR/wayvncctl(或回退到 /tmp/wayvncctl-$UID)打开一个 unix 域套接字。 客户端可以连接并交换 json 格式的 IPC 消息,以查询和控制 正在运行的 wayvnc 实例。

使用 wayvncctl 工具从 命令行与此控制套接字交互。

请参阅 wayvnc(1) 手册页,深入了解 IPC 协议和 可用命令,以及 wayvncctl(1) 了解命令行 接口的更多信息。

还有一种便捷的事件循环模式,可用于在 wayvnc 中发生各种事件时运行命令。请参阅 examples/event-watcher 以获取更多详细信息。