【linux】

🧩 可选:设置开机自启(可选)

如果你希望每次重启后自动启动 VNC,可以创建一个 systemd 服务或写个脚本:

nano /root/startvnc.sh

内容:

#!/bin/bash

vncserver -kill :1 2>/dev/null

vncserver :1 -geometry 1280x720 -depth 24

然后:

chmod +x /root/startvnc.sh

以后只需运行:

/root/startvnc.sh

🧩 可选:让 VNC 随系统启动(开机自启)

如果你希望每次重启服务器后自动启动 VNC,可以创建一个 systemd 服务:

  1. 创建服务文件:
    nano /etc/systemd/system/vncserver.service
  2. 粘贴以下内容:

    Unit

    Description=Start TigerVNC Server at boot
    After=syslog.target network.target

Service

Type=forking

User=root

Group=root

WorkingDirectory=/root

PIDFile=/root/.vnc/%H:1.pid

ExecStartPre=-/usr/bin/vncserver -kill :1

ExecStart=/usr/bin/vncserver :1 -geometry 1280x720 -depth 24

ExecStop=/usr/bin/vncserver -kill :1

Install

WantedBy=multi-user.target

  1. 启用并启动服务:

systemctl daemon-reload

systemctl enable vncserver

systemctl start vncserver

✅ 解决方案:不用 systemd,改用脚本 + crontab 自启动

既然不能用 systemctl,我们可以用更简单、兼容性更强的方法:

✅ 方法:使用 crontab 实现开机自启(推荐)

  1. 编辑 root 的 crontab:

    crontab -e

  2. 在文件末尾添加一行:

    @reboot /root/startvnc.sh

    ✅ @reboot 表示系统启动时自动执行这个脚本。

  3. 保存并退出:

    按 Ctrl + O → 回车 → Ctrl + X

    ✅ 验证是否生效:

    你可以手动测试一下脚本是否能正常运行:

/root/startvnc.sh

如果看到:

Killing Xtigervnc process ID ... success!

New Xtigervnc server ... on port 5901

✅ 说明脚本没问题,下次重启系统后会自动运行!

📌 补充:如果你在 Docker 容器中

你不能用 systemd,也不能用 @reboot(因为容器不是"系统",没有"重启"概念)。

✅ 正确做法:

在启动容器时,直接运行你的 VNC 启动脚本:

docker run -d -p 5901:5901 --name myvnc your-image /root/startvnc.sh

或者在 Dockerfile 中设置:

CMD "/root/startvnc.sh"

这样每次容器启动,都会自动运行 VNC 服务。

🎯 总结:

问题 原因 解决方案

System has not been booted with systemd 你不在 systemd 系统中(如 Docker、Alpine、最小化系统) ✅ 改用 crontab @reboot 或容器启动命令

✅ 现在你已经:

✅ 配置好 VNC 服务;

✅ 写好启动脚本 /root/startvnc.sh;

✅ 用 crontab 实现了"开机自启";

✅ 可以随时用 VNC 客户端连接 你的IP:5901;

🎉 你已经完成了所有关键配置!现在可以愉快地使用图形界面了!

如果连接后看到桌面,记得回来告诉我 👏

如果遇到黑屏、卡顿、无法连接等问题,也随时问我,我帮你一步步排查! 😊

root@760inpb4plcdq-0:/125090409# crontab -e

no crontab for root - using an empty one

Select an editor. To change later, run 'select-editor'.

  1. /bin/nano <---- easiest
  2. /usr/bin/vim.basic

Choose 1-2 1:

你当前看到的是 crontab -e 的编辑器选择界面,这是系统在问你:"你想用哪个编辑器来编辑定时任务?"

✅ 推荐选择:1. /bin/nano(最简单、最适合新手)

👉 直接按键盘输入:

1 → 然后按 回车(Enter)

📝 接下来你会看到一个空白的 crontab 文件,像这样:

m h dom mon dow command

这是定时任务的格式说明。

✅ 在文件末尾添加这一行:

@reboot /root/startvnc.sh

✅ @reboot 表示系统启动时自动执行这个脚本。

📥 保存并退出:

按 Ctrl + O → 保存文件;

按 Enter → 确认保存;

按 Ctrl + X → 退出编辑器。

✅ 验证是否添加成功:

crontab -l

你会看到:

@reboot /root/startvnc.sh

✅ 说明定时任务已成功添加!

🚀 现在你可以:

重启系统(如果是真实服务器或虚拟机),VNC 会自动启动;

如果是 Docker 容器,记得在启动容器时运行 /root/startvnc.sh(因为容器没有"重启"概念);

用 VNC 客户端连接 你的IP:5901,输入密码,即可看到桌面!

🎉 你已经完成了所有关键配置!现在可以愉快地使用图形界面了!

如果连接后看到桌面,记得回来告诉我 👏

如果遇到黑屏、卡顿、无法连接等问题,也随时问我,我帮你一步步排查! 😊

Attachment Image

你当前在 nano 编辑器 中编辑 crontab 文件,这是你运行 crontab -e 后进入的界面。

✅ 你要做的操作:

在文件最后一行(或空白处)添加以下内容:

@reboot /root/startvnc.sh

📝 操作步骤:

移动光标到最后一行(可以用方向键或 Ctrl + V 翻页);

在最后一行下面输入:

@reboot /root/startvnc.sh

保存并退出:

按 Ctrl + O → 保存文件;

按 Enter → 确认保存;

按 Ctrl + X → 退出编辑器。

✅ 验证是否添加成功:

crontab -l

你会看到:

@reboot /root/startvnc.sh

✅ 说明定时任务已成功添加!

✅ 解决方案:让 VNC 服务监听所有网络接口(0.0.0.0)

🛠 方法一:临时解决(立即生效)

在服务器终端运行:

vncserver -kill :1

vncserver -localhost no :1 -geometry 1280x720 -depth 24

✅ -localhost no 表示允许外部连接。

🛠 方法二:永久解决(修改启动脚本)

编辑你的启动脚本 /root/startvnc.sh:

nano /root/startvnc.sh

修改内容为:

#!/bin/bash

vncserver -kill :1 2>/dev/null

vncserver -localhost no :1 -geometry 1280x720 -depth 24

✅ 关键是加了 -localhost no

然后保存并退出:

Ctrl + O → 回车 → Ctrl + X

✅ 太好了!你终于说出来了 ------ 你在 Docker 上运行 VNC!

这解释了之前所有的"奇怪问题":

❌ ufw 无法启用(Docker 容器没有完整内核支持);

❌ iptables 报错(容器内没有防火墙模块);

❌ "目标计算机积极拒绝"(因为 Docker 没有映射端口);

✅ netstat 显示 0.0.0.0:5901(服务在容器内运行正常);

❌ 但外部无法连接 ------ 因为端口没映射!

🚀 解决方案:在启动容器时映射 5901 端口

你必须在 运行 docker run 命令时,加上 -p 5901:5901,这样外部才能访问容器内的 5901 端口。

✅ 正确的 Docker 启动命令:

docker run -d -p 5901:5901 --name myvnc your-image /root/startvnc.sh

🔁 如果你已经运行了容器,先删除旧容器,再重新启动:

docker stop myvnc

docker rm myvnc

docker run -d -p 5901:5901 --name myvnc your-image /root/startvnc.sh

📌 重要提示:

your-image 是你构建或拉取的镜像名称(比如 ubuntu-vnc、my-vnc-image 等);

如果你不知道镜像名,可以运行:

docker images

查看所有镜像。

🧪 验证端口是否映射成功:

在服务器终端运行:

docker ps

你会看到类似:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

abc123def456 your-image "/root/startvnc.sh" 5 minutes ago Up 5 minutes 0.0.0.0:5901->5901/tcp myvnc

✅ 0.0.0.0:5901->5901/tcp 表示端口映射成功!

🖥️ 现在你可以连接桌面了!

在你的 Windows 电脑上:

打开 TigerVNC Viewer;

输入:

10.31.26.222:5901

输入密码;

✅ 成功连接!你会看到 XFCE 桌面环境!

🛡️ 安全提醒:

由于你现在允许局域网连接,建议:

使用强密码;

不要开放 5901 端口到公网(除非必要);

或者使用 SSH 隧道 更安全:

ssh -L 5901:localhost:5901 root@10.31.26.222

然后在本地 VNC 客户端连接 localhost:5901。

🚨 现在我们进入"终极排查模式" ------ 你可能在 特殊环境 中运行(比如 Docker、云服务器、最小化系统、或有安全策略限制)

✅ 终极解决方案:用 x11vnc 替代 tigervnc(更轻量、兼容性更强)

  1. 安装 x11vnc

    apt update && apt install -y x11vnc

  2. 创建一个 VNC 密码(如果还没设置)

    x11vnc -storepasswd /root/.vnc/passwd

    会提示你输入密码,确认后保存。

  3. 启动 x11vnc 服务(绑定到 0.0.0.0)

    x11vnc -display :1 -passwd /root/.vnc/passwd -localhost no -forever -shared -rfbport 5901

    ✅ -localhost no:允许外部连接

    ✅ -forever:保持运行

    ✅ -shared:允许多个客户端连接

    ✅ -rfbport 5901:指定端口

  4. 在 VNC 客户端连接:

    localhost:5901

    或

127.0.0.1:5901

✅ 你应该能看到一个 轻量级桌面环境(可能是 xterm 或 xfce4,取决于你是否安装了桌面)。

🧪 如果你只想看到终端(最简模式),可以跳过桌面:

x11vnc -display :1 -passwd /root/.vnc/passwd -localhost no -forever -shared -rfbport 5901 -xstartup /usr/bin/xterm

相关推荐
HRTOS1 分钟前
HRTOS Shell继续完善:优化printf缓冲区与字符串越界保护,国庆后随新版本更新
运维·单片机·嵌入式硬件·算法·51单片机
智能RPA3 分钟前
农业与矿业行业智能体自动化平台对比评测(计量与巡检场景)
运维·人工智能·python·自动化·agent·rpa
沫璃染墨13 分钟前
《从零入门Linux系统篇(五十一):线程篇·四——pthread线程库详解:从线程创建到终止与分离》
linux·运维·服务器·开发语言·c++·系统架构·线程
YYRAN_ZZU15 分钟前
GMSL开发加解串配置介绍
linux·嵌入式硬件
墨家前任巨子24 分钟前
定时关机脚本
运维
云计算练习生24 分钟前
什么是上下文切换?进程切换时 CPU 到底在保存什么
linux·服务器·操作系统·进程切换
用户05101225729625 分钟前
RGA(二)——RK3588 的核拓扑与能力差异
linux·嵌入式
ESDWAN26 分钟前
企业组网后网络频繁掉线,常见故障排查指南
运维·网络·架构
用户05101225729627 分钟前
RGA(一)——基础知识
linux·嵌入式
qetfw30 分钟前
Debian 综合服务实训:Apache2、Samba、LDAP、vsftpd 与 OpenVPN
linux·服务器·debian