【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

相关推荐
阿豪只会阿巴1 小时前
项目心得——发布者和订阅者问题解决思路
linux·开发语言·笔记·python·ubuntu·ros2
Filotimo_1 小时前
Nginx 的概念
运维·nginx
Elieal1 小时前
常用的 Linux 命令
linux·运维·服务器
C.L.L1 小时前
Linux中capslock+实现——input-remapper
linux
装不满的克莱因瓶2 小时前
【2026最新 架构环境安装篇三】Docker安装RabbitMQ4.x详细教程
linux·运维·docker·容器·架构·rabbitmq
音无八重2 小时前
Linux(Ubuntu)下无法连接ppa.launchpadcontent.net的解决方法
linux·运维·ubuntu
超级大福宝2 小时前
Vim 和 tmux 的常用注意事项
linux·编辑器·vim
YongCheng_Liang2 小时前
MySQL 高级特性深度解析:从索引优化到高可用架构
运维·数据库·mysql
RisunJan2 小时前
Linux命令-jwhois(查询域名和IP地址注册信息)
linux·tcp/ip