# 2021-01-14 #「VNC」- 在登录后,显示当前桌面(而不是登录新桌面)

问题描述

在大多数场景中,我们搭建 VNC 服务,然后远程登录,输入密码,在登录成功后,将显示新会话(新桌面、新登录)。

但是,我们希望连接 VNC 服务后,可以显示当前会话(当前桌面、已经登录桌面),而不是在连接成功后显示新桌面。

解决方案

如果想实现「在连接 VNC 服务时,显示已经存在的会话」功能,关键是找到正确的软件。这里有两个解决方案,属于同类型:
1)使用 TigerVNC 的 x0vncserver 服务。它也实现相同功能;
2)使用 x11vnc 来搭建 VNC 服务。它将附加到正在运行的会话,共享桌面;

方法一、使用 TigerVNC/x0vncserver 服务(推荐)

系统环境:Debian GNU/Linux 10 (buster)

第一步、安装服务

apt-get install -y tigervnc-scraping-server

第二步、运行服务

方法一、使用独立的帐号密码

// 切换到当前用户,设置密码

# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

// 依旧使用当前登录用户,执行命令行启动

# x0vncserver -rfbauth "~/.vnc/passwd"

// 或者创建 systemd 单元文件,在用户登录后,自动启动服务:

# mkdir -pv ~/.config/systemd/user/

cat > ~/.config/systemd/user/x0vncserver.service <<EOF
[Unit]
Description=Remote desktop service (VNC)

[Service]
Type=simple
ExecStartPre=/bin/sh -c 'while ! pgrep -U "$USER" Xorg; do sleep 2; done'
ExecStart=/usr/bin/x0vncserver -rfbauth %h/.vnc/passwd

# 注意事项,
# 需要根据实际情况调整 ExecStartPre= 指令,因为不同桌面环境启动桌面的方式不同。
# ExecStartPre= 是为了判断当前用户是否登录桌面,避开 TTY 登录的情况。

[Install]
WantedBy=default.target
EOF

# systemctl start --user x0vncserver.service
# systemctl enable --user x0vncserver.service

方法二、使用当前用户的帐号密码

mkdir -pv ~/.config/systemd/user/

cat > ~/.config/systemd/user/x0vncserver.service <<EOF
[Unit]
Description=Remote desktop service (VNC)

[Service]
Type=simple
ExecStartPre=/bin/sh -c 'while ! pgrep -U "$USER" Xorg; do sleep 2; done'
ExecStart=/usr/bin/x0vncserver -PAMService=login -PlainUsers=${USER} -SecurityTypes=TLSPlain

[Install]
WantedBy=default.target
EOF

systemctl start --user x0vncserver.service
systemctl enable --user x0vncserver.service

第三步、远程登录

使用 VNC 客户端进行登录即可,这里不再赘述。

方法二、使用 x11vnc 来搭建 VNC 服务

接下来开始搭建 x11vnc 服务,实验环境为 Debian GNU/Linux 10 (buster) 发行版。

第一步、安装软件

apt-get install x11vnc

第二步、运行服务

x11vnc -display $DISPLAY -usepw -listen <IP_of_interface> -autoport 5903

# -display : 要显示的屏幕。这里使用「$DISPLAY」获取当前显示器,通常为「:0」。
# -usepw   : 使用用户密码进行认证。服务启动后会提示你输入密码。
# -listen  : 要监听的IP地址。
# -autoport: 指定要监听的端口号。如果未指定,则会自动创建监听端口号,并在控制台输出监听的端口号。

如果要使用 xinetd 运行,可以参考 How to VNC to the primary display in ubuntu (display :0) 一文。

第三步、远程访问

使用 VNC 客户端进行连接即可,这里不再详细介绍。

附加说明

如果以 root 身份运行它以连接到 xdm 会话,则需要对 Xauth 进行一些研究,因为设置它可能有点繁琐。

常见问题汇总

Unable to connect to VNC Server using your chosen security setting

VNC Connect Error Messages – RealVNC Help Center

问题描述:在使用 REALVNC 连接 x0vncserver 服务时,REALVNC 客户端提示如下信息:

Unable to connect to VNC Server using your chosen security setting.

Either upgrade VNC Server to a more recent version from RealVNC, or select a weaker level of encryption

问题原因:客户端不支持服务端设置的 SecurityTypes 类型

解决方法:设置双方都支持的安全类型,或者修改 x0vncserver 的 -SecurityTypes=None 以关闭

参考文献

WikiNotes/在登录后,显示当前桌面(而不是登录新桌面)
Start vncserver on :0 instead of :1
How to VNC into an existing X session?
x11vnc: a VNC server for real X displays
tightvncserver - show the same screen on hdmi and vncclient
TigerVNC - ArchWiki

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值