VNC 服务器 sharePolicy 属性详解及多客户端共享访问示例
VNC 服务器 sharePolicy 属性详解及多客户端共享访问示例
DomainGraphicVNC 结构体的 sharePolicy 属性可以设置以下几个值:
-
'allow-exclusive'(默认值):允许客户端通过断开其他连接来请求独占访问。连接多个客户端并行需要所有客户端都请求共享会话(vncviewer: -Shared 开关)。
-
'force-shared':禁用独占客户端访问,每个连接都必须指定 -Shared 开关以供 vncviewer 使用。
-
'ignore':无条件欢迎每个连接,自 1.0.6 版本开始。
这些值的不同之处在于对于多个客户端共享访问的处理方式。
以下是一个示例,演示如何运行多个客户端共享访问:
package main
import (
"fmt"
"log"
"net"
"os"
"os/exec"
"strings"
"time"
)
func main() {
// 启动 VNC 服务器
cmd := exec.Command("vncserver")
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
// 获取 VNC 服务器监听地址和端口
vncInfo, err := getVNCServerInfo()
if err != nil {
log.Fatal(err)
}
// 启动多个 VNC 客户端
for i := 0; i < 5; i++ {
go startVNCClient(vncInfo)
}
// 等待客户端连接
time.Sleep(30 * time.Second)
// 关闭 VNC 服务器
cmd = exec.Command("vncserver", "-kill", ":1")
err = cmd.Run()
if err != nil {
log.Fatal(err)
}
}
func getVNCServerInfo() (string, error) {
cmd := exec.Command("vncserver", "-list")
output, err := cmd.Output()
if err != nil {
return "", err
}
lines := strings.Split(string(output), "\n")
for _, line := range lines {
if strings.Contains(line, "localhost:1") {
parts := strings.Split(line, " ")
if len(parts) >= 3 {
return parts[1], nil
}
}
}
return "", fmt.Errorf("VNC server info not found")
}
func startVNCClient(vncInfo string) {
cmd := exec.Command("vncviewer", vncInfo)
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
}
这个示例中,我们首先使用 vncserver 命令启动 VNC 服务器。然后,使用 vncserver -list 命令获取 VNC 服务器的监听地址和端口。接下来,我们使用 vncviewer 命令启动多个 VNC 客户端连接到 VNC 服务器。最后,等待一段时间后,使用 vncserver -kill :1 命令关闭 VNC 服务器。
请注意,这个示例假设您已经正确安装和配置了 VNC 服务器和客户端,并且可以从命令行运行相关命令。
原文地址: https://www.cveoy.top/t/topic/fQjO 著作权归作者所有。请勿转载和采集!