Linux(含嵌入式设备如泰山派)VNC 完整配置指南:含开机自启动(适配 Ubuntu/Debian 系)

完整配置步骤(含安装、基础配置、开机自启)

阶段 1:安装 VNC 服务器(tightvncserver)

适用于 Ubuntu、Debian 及泰山派等嵌入式 Linux(需确保网络正常):

复制代码
# 1. 更新 apt 缓存(避免安装时找不到包)
sudo apt update -y

# 2. 安装 tightvncserver(轻量、稳定,适配嵌入式设备)
sudo apt install tightvncserver -y

# 3. 首次启动 VNC:生成配置文件 + 设置访问密码
vncserver
  • 按提示输入两次 VNC 访问密码(建议 6-8 位,过长可能被截断);
  • 可选 "是否设置 view-only 密码"(仅允许查看不允许操作):需则输入 y 并设置,无需则输入 n
  • 首次启动后,系统会自动生成配置文件 ~/.vnc/xstartup(后续需修改此文件启用图形桌面)。

阶段 2:配置 VNC 图形桌面(修复 "仅显示命令行" 问题)

默认情况下,VNC 仅加载命令行界面,需修改 xstartup 脚本启用图形桌面(适配 Xfce/GNOME,泰山派常用 Xfce):

复制代码
# 1. 先关闭当前 VNC 会话(避免配置文件被占用)
vncserver -kill :1  # ":1" 表示第一个 VNC 桌面(对应端口 5901)

# 2. 编辑 xstartup 配置文件
nano ~/.vnc/xstartup

# 3. 删除原有内容,粘贴以下配置(适配 Xfce 桌面,泰山派默认桌面)
#!/bin/sh
# 禁用 X 键盘映射,避免乱码
export XKL_XMODMAP_DISABLE=1
# 清除会话管理器和 DBUS 地址,防止图形桌面冲突
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
# 启动 Xfce 桌面(若为 GNOME 桌面,替换为 "gnome-session &")
startxfce4 &

# 4. 赋予脚本执行权限(否则 VNC 无法加载图形桌面)
chmod +x ~/.vnc/xstartup

# 5. 手动启动 VNC 验证配置:若弹出图形桌面则基础配置成功
vncserver
  • 启动成功标志:终端显示 New 'X' desktop is 主机名:1,且无报错。

阶段 3:核心配置 ------ 开机自启动(systemd 服务)

这是实现 "重启后 VNC 自动运行" 的关键步骤,通过创建 systemd 服务文件注册 VNC 为系统服务:

步骤 1:创建 VNC 服务文件
复制代码
# 1. 编辑 systemd 服务文件(文件名建议为 vncserver@.service,支持多桌面)
sudo nano /etc/systemd/system/vncserver@.service
步骤 2:粘贴服务配置(需替换 2 处关键信息)
复制代码
[Unit]
# 服务描述(自定义,便于识别)
Description=VNC Server for %i
# 服务依赖:网络启动后再启动 VNC(避免网络未就绪导致失败)
After=syslog.target network.target

[Service]
# 类型:forking(后台运行模式,VNC 需后台启动)
Type=forking
# 关键:替换为你的用户名(如 root、lckfb,通过 "whoami" 命令查看)
User=root
# PID 文件路径:记录 VNC 进程 ID,用于停止/重启服务(%H 为主机名,%i 为桌面号)
PIDFile=/home/%u/.vnc/%H%i.pid
# 启动前先停止旧会话(避免冲突)
ExecStartPre=-/usr/bin/vncserver -kill %i
# 启动命令:%i 为桌面号(如 :1),-geometry 设分辨率(适配嵌入式屏幕,可改)
ExecStart=/usr/bin/vncserver %i -geometry 1024x600 -depth 24
# 停止命令:关闭对应桌面的 VNC 会话
ExecStop=/usr/bin/vncserver -kill %i

[Install]
# 开机自启的目标:多用户模式(嵌入式设备默认启动模式)
WantedBy=multi-user.target
  • 必须修改的内容User=root 中的 root,若你用普通用户(如 lckfb),需改为 User=lckfb(否则 VNC 会因权限问题启动失败);
  • 可选调整-geometry 1024x600 为 VNC 桌面分辨率,可根据需求改为 1280x720(嵌入式设备建议不超过 1024x600,避免卡顿)。
步骤 3:启用并启动 VNC 服务
复制代码
# 1. 重新加载 systemd 配置(让系统识别新创建的服务文件)
sudo systemctl daemon-reload

# 2. 启用开机自启:针对桌面 1(对应端口 5901)
sudo systemctl enable vncserver@:1.service

# 3. 立即启动 VNC 服务(无需重启,测试是否能正常运行)
sudo systemctl start vncserver@:1.service

# 4. 查看服务状态:确保显示 "active (running)"
sudo systemctl status vncserver@:1.service
  • 成功标志 :终端输出中含 active (running),无 failedexited 状态;
  • 若失败:执行 sudo journalctl -u vncserver@:1.service 查看日志,定位错误(常见原因:User 配置错误、xstartup 权限不足)。

阶段 4:验证开机自启(关键测试)

配置后需重启设备,确认 VNC 服务是否自动启动:

复制代码
# 1. 重启设备(嵌入式设备需等待 1-2 分钟)
sudo reboot

# 2. 重启后无需手动执行 vncserver,直接查看服务状态
sudo systemctl status vncserver@:1.service

# 3. 进一步验证:查看 VNC 端口(5901)是否在监听(远程可连接的标志)
ss -tuln | grep 5901
  • ss -tuln 输出 tcp LISTEN 0 5 *:5901 *:*,说明 VNC 服务已自动启动,且端口开放。

三、远程连接 VNC(手机 / 电脑均可)

步骤 1:获取设备 IP

在 Linux 终端执行以下命令,获取设备的局域网 IP(如泰山派连接 WiFi 后的 IP):

复制代码
# 查看 WiFi 接口(wlan0)的 IP(网线连接则看 eth0)
ip addr show wlan0 | grep "inet "
  • 示例输出:inet 192.168.167.72/24,其中 192.168.167.72 即为设备 IP。

步骤 2:用 VNC 客户端连接

  • 电脑端 :下载 RealVNC ViewerTightVNC Viewer,输入 设备IP:1(如 192.168.167.72:1),输入之前设置的 VNC 密码,即可连接;
  • 手机端:在应用商店搜索 "VNC Viewer",按提示输入 IP 和密码,适合移动场景操作。

四、适配嵌入式设备(如泰山派)的注意事项

  1. 防火墙问题 :泰山派等嵌入式 Linux 通常未预装 ufw/firewalld,默认无防火墙拦截,无需额外开放端口;若之前安装了 ufw 且启动失败(如内核缺模块),可执行 sudo systemctl stop ufw && sudo systemctl disable ufw 禁用,避免影响 VNC 连接。

  2. 系统目录权限 :若执行 sudo 时提示 "uid is 0 but '/etc' is owned by 1000",需先修复权限(否则服务可能启动失败):

    复制代码
    sudo chown -R root:root /etc /lib /usr
    sudo chmod -R 755 /etc /lib /usr
  3. 主机名解析警告 :若 sudo 提示 "unable to resolve host localhost.localdomain",编辑 /etc/hosts 补充映射:

    复制代码
    sudo nano /etc/hosts
    # 添加以下内容(替换 "localhost.localdomain" 为你的主机名,通过 "hostname" 查看)
    127.0.0.1   localhost localhost.localdomain
    ::1         localhost localhost.localdomain

五、常见问题排查

  1. VNC 服务启动失败,日志显示 "xstartup 无执行权限" :执行 chmod +x ~/.vnc/xstartup 赋予权限,再重启服务:sudo systemctl restart vncserver@:1.service

  2. 重启后 VNC 服务未启动,状态为 "failed" :查看日志定位原因:sudo journalctl -u vncserver@:1.service,常见问题:User 配置错误(非当前用户名)、xstartup 中桌面命令错误(如 GNOME 用了 startxfce4)。

  3. 远程连接时提示 "连接被拒绝" :① 确认 VNC 服务已启动:sudo systemctl status vncserver@:1.service;② 确认设备 IP 正确(重启后 IP 可能变化,需重新查看);③ 嵌入式设备需与客户端在同一局域网(如同一 WiFi)。

六、总结

通过本文步骤,你将实现:

  1. 手动启动 VNC 服务并加载图形桌面;
  2. VNC 服务 "开机自动运行",重启后无需手动操作;
  3. 远程设备(电脑 / 手机)可稳定连接 Linux 桌面。

核心关键是 systemd 服务配置 ------ 通过 /etc/systemd/system/vncserver@.service 文件,将 VNC 注册为系统服务,确保其随系统启动而自动运行,彻底解决 "重启后 VNC 失效" 的问题。

相关推荐
不做无法实现的梦~4 小时前
jetson刷系统之后没有浏览器--解决办法
开发语言·javascript·ecmascript
湖南人爱科技有限公司4 小时前
RaPhp和Python某音最新bd-ticket-guard-client-data加密算法解析(视频评论)
android·python·php·音视频·爬山算法·raphp
一只小松许️4 小时前
深入理解:Rust 的内存模型
java·开发语言·rust
eqwaak05 小时前
数据预处理与可视化流水线:Pandas Profiling + Altair 实战指南
开发语言·python·信息可视化·数据挖掘·数据分析·pandas
共享家95276 小时前
QT-常用控件(一)
开发语言·qt
Y学院6 小时前
实战项目:鸿蒙多端协同智能家居控制 App 开发全流程
开发语言·鸿蒙
dlraba8027 小时前
用 Python+OpenCV 实现实时文档扫描:从摄像头捕捉到透视矫正全流程
开发语言·python·opencv
一人の梅雨8 小时前
1688 店铺商品全量采集与智能分析:从接口调用到供应链数据挖掘
开发语言·python·php
小何好运暴富开心幸福8 小时前
C++之日期类的实现
开发语言·c++·git·bash