AutoStart noVNC - GDM 自动登录远程桌面解决方案
·
项目简介
这是一个基于 Ubuntu GDM 自动登录功能的远程桌面访问解决方案。项目通过配置系统在用户登录时自动启动 x11VNC 和 noVNC 服务,实现在浏览器中远程访问 Ubuntu 桌面环境的功能。
功能特点
- ✅ 全自动部署:一键安装配置所有依赖和服务
- ✅ 浏览器访问:无需安装客户端,通过浏览器即可远程访问
- ✅ 安全加密:支持 VNC 密码验证
- ✅ 自动启动:利用 GDM 自启动机制,开机即用
- ✅ 自适应网络:自动获取本机 IP 地址
- ✅ 资源清理:自动终止已有进程,避免端口冲突
系统要求
- 操作系统: Ubuntu 20.04/22.04/24.04 (支持 GDM 的 Ubuntu 版本)
- 桌面环境: GNOME (默认桌面环境)
- 内存: 至少 2GB RAM
- 存储: 至少 1GB 可用空间
快速开始
1. 下载项目文件
# 克隆项目或下载所有脚本文件到同一目录
mkdir -p autostart-novnc
cd autostart-novnc
2. 运行配置脚本
# 给予执行权限并运行
chmod +x install.sh
./install.sh
脚本将执行以下操作:
- 安装 x11vnc 和 novnc 软件包
- 创建 VNC 密码文件(会提示设置密码)
- 设置脚本执行权限
- 创建必要的目录结构
- 复制配置文件到正确位置
3. 配置 GDM 自动登录
# 编辑 GDM 自动登录配置
sudo nano /etc/gdm3/custom.conf
取消注释并修改以下内容:
[daemon]
# 启用自动登录
AutomaticLoginEnable = true
AutomaticLogin = 你的用户名
[security]
AllowRoot = false
[xdmcp]
[chooser]
[debug]
4. 重启系统
# 重启系统使配置生效
sudo reboot
访问方式
1. 获取本机 IP 地址
# 在目标机器上执行
hostname -I | awk '{print $1}'
2. 浏览器访问
在浏览器中访问:
http://[你的IP地址]:6080/vnc.html
示例:
http://192.168.1.100:6080/vnc.html
文件结构说明
autostart-novnc/
├── install.sh # 安装配置脚本
├── uninstall.sh # 卸载脚本(不卸载软件包)
├── first-login-lock.desktop # 锁屏自启动配置
├── first-login-lock.sh # 锁屏脚本
├── novnc.desktop # noVNC 自启动配置
├── novnc-start.sh # noVNC 启动脚本
├── x11vnc.desktop # x11vnc 自启动配置
└── x11vnc-start.sh # x11vnc 启动脚本
脚本功能详解
1. install.sh
主配置脚本,负责:
- 安装必要软件包
- 创建 VNC 密码
- 设置文件权限
- 部署配置文件
2. x11vnc-start.sh
启动 x11vnc 服务,监听 5900 端口:
# 终止可能存在的旧进程
pkill -f "x11vnc.*5900"
# 启动 x11vnc 服务
x11vnc -auth guess -forever -loop -noxdamage -repeat \
-rfbauth ~/.vnc/passwd -rfbport 5900 -shared
3. novnc-start.sh
启动 noVNC 代理,将 5900 端口转发到 6080 端口:
# 终止旧进程
pkill -f "websockify.*5900"
# 启动 websockify 代理
websockify --web /usr/share/novnc/ 6080 \
$(hostname -I | awk '{print $1}'):5900
4. first-login-lock.sh
自动锁屏脚本,确保登录后桌面安全:
#!/bin/bash
# 等待桌面环境就绪
sleep 5
# 执行锁屏
xdg-screensaver lock
端口说明
| 端口 | 服务 | 说明 |
|---|---|---|
| 5900 | x11vnc | VNC 协议默认端口 |
| 6080 | noVNC | WebSocket 代理端口 |
安全注意事项
1. 密码安全
- 运行配置脚本时会提示设置 VNC 密码
- 密码保存在
~/.vnc/passwd文件中 - 建议使用强密码并定期更换
2. 网络访问控制
# 如果需要限制访问 IP,可以使用防火墙
sudo ufw allow from 192.168.1.0/24 to any port 6080
sudo ufw allow from 192.168.1.0/24 to any port 5900
3. 禁用服务
# 临时禁用自启动
mv ~/.config/autostart/x11vnc.desktop ~/.config/autostart/x11vnc.desktop.disabled
mv ~/.config/autostart/novnc.desktop ~/.config/autostart/novnc.desktop.disabled
# 停止正在运行的服务
pkill -f "x11vnc.*5900"
pkill -f "websockify.*5900"
故障排除
1. 无法访问 noVNC 页面
# 检查端口是否监听
netstat -tlnp | grep -E '(5900|6080)'
# 检查服务是否运行
ps aux | grep -E '(x11vnc|websockify)'
# 检查防火墙设置
sudo ufw status
2. 自动登录失败
# 检查 GDM 配置
sudo cat /etc/gdm3/custom.conf | grep -A2 -B2 AutomaticLogin
# 查看 GDM 日志
journalctl -u gdm -f
3. VNC 连接无画面
# 重启 x11vnc 服务
pkill x11vnc
~/.local/bin/x11vnc-start.sh
4. 修改 VNC 密码
# 重新创建密码文件
x11vnc -storepasswd ~/.vnc/passwd
# 重启服务使新密码生效
pkill x11vnc
高级配置
1. 修改监听地址
如果需要绑定到特定 IP:
# 修改 novnc-start.sh
websockify --web /usr/share/novnc/ 6080 192.168.1.100:5900
2. 启用 SSL/TLS
# 生成 SSL 证书
openssl req -x509 -nodes -newkey rsa:2048 \
-keyout ~/.vnc/novnc.key -out ~/.vnc/novnc.crt \
-days 365 -subj "/CN=$(hostname)"
# 修改启动参数
websockify --web /usr/share/novnc/ \
--cert ~/.vnc/novnc.crt --key ~/.vnc/novnc.key \
6080 localhost:5900
3. 调整性能参数
# 修改 x11vnc-start.sh 添加性能优化参数
x11vnc -auth guess -forever -loop -noxdamage \
-repeat -rfbauth ~/.vnc/passwd -rfbport 5900 \
-shared -ncache 10 -tightfilexfer -nodpms
卸载指南
chmod +x uninstall.sh
./uninstall.sh
常见问题解答
Q1: 这个方案安全吗?
A: 方案使用 VNC 密码保护,建议在受信任的网络环境中使用。对于生产环境,建议启用 SSL 加密和防火墙限制。
Q2: 支持多用户同时访问吗?
A: 是的,x11vnc 使用 -shared 参数支持多用户同时连接。
Q3: 会影响本地显示性能吗?
A: 会有轻微影响,因为 x11vnc 需要捕获屏幕内容。建议在硬件性能足够的机器上使用。
Q4: 如何更改访问端口?
A: 修改脚本中的端口号并确保防火墙规则相应更新。
Q5: 支持 Wayland 吗?
A: 目前只支持 X11 会话,不支持 Wayland。
贡献与反馈
如果你发现任何问题或有改进建议:
- 提交 Issue 描述问题
- Fork 项目并提交 Pull Request
- 联系维护者获取帮助
许可证
本项目基于 MIT 许可证开源,详情请见 LICENSE 文件。
致谢
- x11vnc - VNC 服务器
- noVNC - HTML5 VNC 客户端
- websockify - WebSocket 代理
更多推荐
所有评论(0)