Ubuntu 22.04离线部署TigerVNC:无头服务器远程桌面完整指南
一台不带显示器的 Ubuntu 服务器放在内网机房里平时想上去操作图形界面工具比如看报表、配置监控大屏、调一调运维平台的 Web 页面最直接的做法是装个远程桌面。但麻烦的是这类服务器往往和外网隔离apt 源连不上装什么都要先下载一堆 deb 包再拷进去。这篇文章就围绕 Ubuntu 22.04 离线环境下部署 TigerVNC 展开目标很明确在无显示器、纯命令行的服务器上跑起一个独立的远程桌面会话用 VNC 客户端从局域网任意机器连上去就能看到完整的图形环境。整个过程不依赖外网不依赖物理屏幕适合机房服务器、虚拟机和各种内网环境。TigerVNC 对做运维的人来说并不陌生它是 VNC 的一个活跃分支性能和兼容性都比较成熟尤其适合 Linux 远程桌面场景。我第一次在无头服务器上搞远程桌面也踩了不少坑最典型的两个问题一是离线环境下依赖关系理不清dpkg 装到一半报一堆依赖缺失二是好不容易装上了连接后却是黑屏或者灰屏根本没法操作。这篇文章会把这两条线完整捋一遍从方案选型、离线包准备、系统配置到 systemd 托管、客户端连接、故障排查全部用可复现的步骤写清楚。无论你是第一次接触 VNC 的新手还是被离线依赖折腾过几次的老手看了这篇应该能少走不少冤枉路。1. 方案选型为什么是 TigerVNC而不是 xrdp 或 X11 转发1.1 三种远程方案的差异对比在做内网图形远程访问时常见的选择有三类xrdp、X11 转发SSH 端口转发、还有 VNC 系TigerVNC、TightVNC 等。我直接把它们的核心差别列出来这样更容易判断什么场景该选谁。方案工作原理优点缺点适合场景xrdp自己实现 RDP 服务端连接后创建新的 X 会话Windows 自带客户端可连体验接近 Windows 远程桌面默认需要 Xvfb 配合会话管理偶尔抽风离线依赖数量并不少客户端以 Windows 为主、不想装 VNC 软件的环境X11 转发通过 SSH 隧道把单个应用的显示转发到本地安全不额外开端口重量轻只转发单应用不是完整桌面网络差时延迟明显临时用一下图形小工具TigerVNCXvnc 服务端创建独立虚拟显示VNC 客户端直接连独立桌面完整性能好压缩算法成熟离线依赖相对可控默认不加密需自行控制网络暴露面无头服务器完整桌面访问本文的场景如果你的服务器本身就是 Ubuntu 桌面版那么系统里已经装了 GNOME。TigerVNC 可以直接基于它开一个独立会话不需要再装额外的桌面环境。如果是最小化安装没有桌面那就在准备离线包时把 XFCE 或 LXDE 这类轻量桌面一起带上别用 GNOME 全套依赖太重离线安装时容易把自己坑哭。1.2 独立桌面模式的原理虚拟显示器与无头能力TigerVNC 的独立桌面模式核心在于 Xvnc 这个进程。它本质上是一个 X Server但它不依赖物理显卡和显示器而是在内存里创建一个虚拟显示设备。你给它分配一个显示号display number比如:1它就监听5900 显示号的端口所以:1对应5901。用户连上 VNC 客户端之后看到的就是这个虚拟显示器上渲染的画面。这种模式的无头可用体现在哪里物理机上没有插显示器Xorg 起不来但 Xvnc 照样能工作。它不需要检测 EDID、不需要 GPU 驱动只要 CPU 和内存足够就能跑起完整的图形会话。这也是它被大量用于云服务器、虚拟机和机房无头节点的重要原因。还有一个细节值得注意TigerVNC 的独立会话和系统的默认桌面会话是隔离的。你在 VNC 里做的操作不会直接出现在物理屏幕如果服务器真的接了屏幕上多个 VNC 用户也可以各开各的会话互不干扰。这在多人共用服务器、需要互不影响的图形环境时非常实用。2. 离线安装包准备全流程2.1 在联网机器上下载 deb 包离线安装的第一步是在一台同样跑 Ubuntu 22.04、可以访问外网的机器上把需要的 deb 包全部下载下来。这里强烈建议使用apt-get install --download-only而不是手动一个个apt download因为前者会解析完整的依赖关系一次性把所有需要的包下载到/var/cache/apt/archives目录里。我实际操作时这样做的sudo apt-get update sudo apt-get install --download-only tigervnc-standalone-server tigervnc-common tigervnc-xorg-extension dbus-x11 xauth如果你的服务器是最小化安装、也没有桌面环境那么还需要把桌面环境的依赖一起带上。以 XFCE 为例sudo apt-get install --download-only xfce4 xfce4-goodies dbus-x112.2 架构一致性与依赖版本匹配这一步有个非常关键的检查项下载机的系统版本和 CPU 架构必须和目标服务器一致。Ubuntu 22.04 的 deb 包在 apt 源里区分 amd64、arm64 等架构如果下载机是 x86_64、目标服务器是 arm64拷贝过去的包基本上没法用。检查架构用dpkg --print-architecture当前下载机返回amd64目标服务器也要是这个值。如果两台机器都是 Ubuntu 22.04、都是 amd64那apt-get install --download-only解析出来的依赖就是完全匹配的。这里还有一个实用技巧下载完成后把/var/cache/apt/archives目录里的所有 deb 文件拷贝到 U 盘或内网共享目录然后在目标服务器上直接对所有 deb 执行dpkg -i ./*.deb。如果依赖有顺序问题dpkg -i会在同一批 deb 文件里自动反复尝试只要文件全最终都能装上。为了确保下载到最新且兼容的版本我还会查看一下下载下来的包版本ls -lh /var/cache/apt/archives/ | grep tigervnc一般会看到tigervnc-standalone-server_1.12.0dfsg-1_amd64.deb这样的文件。版本号和实际系统仓库有关不用强求一致但建议下载机和目标服务器的更新源尽量接近避免出现一方包版本过高、依赖不满足的情况。2.3 传输与本地仓库安装传输方式不限scp、U 盘、内网 HTTP 共享都可以。到了目标服务器上我习惯先把所有 deb 放到同一目录然后执行cd /path/to/debs sudo dpkg -i ./*.deb如果提示依赖缺失先不要慌。dpkg -i失败只是中断安装不会污染系统。此时检查是否漏掉了某些依赖包尤其是libx11-6、libxext6、libxfixes3、libxrandr2这类基础图形库。它们很可能在目标服务器上已经存在因为系统本身就带了图形库也可能确实缺失。如果缺失回到下载机上用apt-get install --download-only补下载或者在目标服务器上先用apt-cache depends tigervnc-standalone-server查看依赖关系——不过离线环境下这个命令不一定有缓存信息所以最保险的还是提前备好全套包。为了方便后续维护我还建议在目标服务器上做一个最简单的本地 apt 源把 deb 目录挂到/var/lib/apt/lists之外的一个位置用sudo apt install ./xxx.deb方式补充安装。这条命令会读取当前目录下的 deb 并尝试解析依赖比dpkg -i更智能能识别已经安装的依赖。3. 服务端配置与 systemd 托管3.1 用户与密码准备TigerVNC 的会话是跟用户绑定的服务运行在哪个用户下桌面环境就是那个用户的。不建议用 root 跑 VNC 服务安全性和桌面环境的兼容性都不好。我一般建一个专门用户或者直接使用已有的普通用户。sudo adduser vncuser su - vncuser然后是设置 VNC 密码VNC 的密码不是系统密码而是服务端为每个用户单独维护的访问密码vncpasswd这个命令会要求输入两次密码然后生成~/.vnc/passwd文件。如果要在自动化脚本里无条件设置密码也可以这样用mkdir -p ~/.vnc echo 你的密码 | vncpasswd -f ~/.vnc/passwd chmod 600 ~/.vnc/passwd注意vncpasswd -f只读取输入流的第一个行作为密码。密码长度最长 8 个字符多余部分会被截断这也是 VNC 协议本身的限制不是配置问题。3.2 xstartup 脚本编写TigerVNC 启动会话时会去执行用户家目录下的~/.vnc/xstartup文件。这个文件决定了虚拟显示器上启动什么桌面环境。如果这个文件不存在或者没有执行权限你会得到一个灰屏或黑屏的会话什么都不显示。最基础的做法在 Ubuntu 22.04 桌面版上启动 GNOME#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec dbus-launch --sh-syntax --exit-with-session gnome-session如果是最小化系统搭配 XFCE#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS startxfce4写完以后必须赋予执行权限chmod x ~/.vnc/xstartup这里要特别提醒xstartup 的第一行#!/bin/sh不能省。很多人在这里填了 Python 解释器或者别的路径结果脚本直接执行失败VNC 会话起不来。另外.vnc目录的权限建议保持 700passwd文件权限保持 600。TigerVNC 对权限检查虽然不像 SSH 那么严格但保持最小权限是良好习惯。3.3 手工启动与 systemd 服务文件配置完 xstartup 之后先手动启动一次验证这样日志输出直接能看到vncserver :1 -localhost no-localhost no表示允许非本机连接。如果只在内网使用可以不加这个参数默认情况下 TigerVNC 在 1.12 版本以上只监听 127.0.0.1需要显式开放才能监听所有网卡。用vncserver -list可以查看当前已启动的会话vncserver -list TigerVNC server sessions: X DISPLAY # RFB PORT # RFB UNIX PATH :1 5901确认正常后把它交给 systemd 管理这样开机自启、崩溃自拉起。在/etc/systemd/system/vnc.service下创建服务文件[Unit] DescriptionTigerVNC Server for %i Aftersyslog.target network.target [Service] Typeforking Uservncuser Groupvncuser WorkingDirectory/home/vncuser ExecStart/usr/bin/vncserver %i -localhost no -geometry 1920x1080 -depth 24 ExecStop/usr/bin/vncserver -kill %i Restarton-failure RestartSec5 [Install] WantedBymulti-user.target注意这里的%i是一个模板占位符通过systemctl start vnc:1启动时会被替换成:1。Type 使用forking因为vncserver启动后会把自身 daemon 化。启动命令sudo systemctl daemon-reload sudo systemctl enable vnc:1 sudo systemctl start vnc:1查看状态和日志sudo systemctl status vnc:1 journalctl -u vnc:1 -f如果看到New Xtigervnc server ... is now running说明服务端已经就绪。4. 客户端连接与无头模式验证4.1 用 TigerVNC Viewer 连接服务端跑起来以后客户端就简单了。Windows、Linux、macOS 上都有 TigerVNC Viewer下载对应版本打开地址栏输入服务器IP:5901或服务器IP:1回车后输入 VNC 密码就能看到桌面。Linux 上也可以直接用命令vncviewer 192.168.1.100:5901这里推荐使用 IP 加端口5901的方式不容易产生混淆。如果客户端连不上先用telnet 192.168.1.100 5901检查端口通不通然后再排查服务端状态。4.2 验证独立桌面可以同时存在多个会话TigerVNC 的独立体现在每个显示号都是一个独立会话。比如服务器上已经跑了:1你还可以再开一个:2给另一个用户互不影响vncserver :2 -localhost no -geometry 1280x800 -depth 16这种多会话能力在做开发测试、Demo 展示、多人共用服务器时特别有用。我甚至见过有人在一个 32 核的服务器上给每个项目组各开一个 VNC 桌面各自装自己的图形工具互不干扰比起物理机一人一台省了不少资源。4.3 网络暴露与控制默认的 VNC 协议是不加密的密码校验也存在被嗅探的风险。在内网使用问题不大但如果服务器暴露在不可信网络强烈建议做两层防护一是防火墙只放行内网网段访问5900-5910端口二是用 SSH 隧道包装 VNC 流量。SSH 隧道的用法很简单客户端机器上执行ssh -L 5901:localhost:5901 vncuser服务器IP然后本地 VNC 客户端连接localhost:5901流量就完全走 SSH 加密隧道了服务器上的 VNC 服务端甚至不需要开-localhost no只要监听本地即可。这种方式既安全又不用额外配置 TLS是我个人最推荐的远程访问方式。5. 实战踩坑实录与常见问题速查表5.1 典型的启动失败与日志定位TigerVNC 的问题大多能在日志里直接看到原因。日志位置在用户的~/.vnc/目录文件名一般是机器名:1.log。启动失败时先别慌着重启打开日志文件看尾部tail -n 50 ~/.vnc/*:1.log我遇到最多的三种启动失败情况这里整理成一张排查表错误现象根因解决办法A VNC server is already running as :1显示号被占用或某个残留锁文件存在用vncserver -list查看若残留锁文件删除/tmp/.X11-unix对应的文件xauth: file ... does not exist家目录的.Xauthority不存在或权限不对确保以 vncuser 身份运行 vncserver或在 xstartup 中额外生成 xauthdbus-launch相关报错导致桌面起不来缺少 dbus-x11 包或系统总线未初始化安装dbus-x11xstartup 中显式调用dbus-launch5.2 黑屏、灰屏的排查路线连接后如果是灰屏或者黑屏VNC 服务端本身是正常的问题基本出在 xstartup 和桌面环境上。排查路线按优先级是这样第一确认.vnc/xstartup是否有执行权限。没有x权限脚本根本不会被执行会话就是个空壳。第二确认 xstartup 里的桌面环境启动命令存在。比如用了startxfce4但系统根本没装 XFCE命令找不到桌面自然起不来。可以用which startxfce4或者在#里直接写绝对路径/usr/bin/startxfce4。第三检查日志里是否有Could not create directory之类的权限错误。这类问题通常是因为用 root 启动了 vncserver但 xstartup 又是普通用户配置的目录归属不一致。第四注意会话变量清理。很多桌面环境在启动时需要干净的SESSION_MANAGER和DBUS_SESSION_BUS_ADDRESS不清空可能导致会话启动一半就挂掉。这也是为什么 xstartup 开头先unset这两个变量的原因。5.3 性能调优参数无头服务器的 VNC 体验很大程度上取决于分辨率和色彩深度的设置。默认vncserver的分辨率可能是 1024x768客户端窗口看着小操作体验也不好。我常用的启动参数组合是这样vncserver :1 -localhost no -geometry 1920x1080 -depth 24 -compressionlevel 6 -quality 8分辨率1920x1080配合客户端全屏模式视觉上没有物理屏的差距。-depth 24提供真彩色适合要看图形报表、图表、视频画面的场景。如果服务器性能紧张改用-depth 16可以显著减少网络传输量。连接卡顿严重时还可以压低-quality或调低 JPEG 压缩质量这个是在客户端加载缓慢时最有效的几个手段之一。还有一个实践经验如果桌面里开了很多 3D 加速或合成器效果比如 GNOME 的默认动画、透明效果VNC 的传输压力会增大。轻量桌面如 XFCE 在这种场景下明显更顺滑。如果必须用 GNOME可以在设置里关闭动画或者用dconf关闭 window manager 的合成效果。这个细节在实际使用中经常被人忽略却是提升流畅度最直接的方法。5.4 会话断开后重连与资源清理VNC 连接突然断开是常有的事比如客户端电脑休眠、网络闪断。服务端会话一般不会立刻终止只是客户端掉了重新连接同一端口就能回到原桌面会话正在运行的程序都还在。这一点比远程重启服务要友好很多。但如果手动vncserver -kill :1之后发现端口还占着或者再启动时报身份不对可以用以下命令清理sudo pkill Xvnc rm -rf /tmp/.X11-unix/X1 /tmp/.X1-lock然后再启动 VNC。这里要提醒一句pkill会把该用户下所有 VNC 会话全杀掉如果有多个会话在跑先确认再执行别误伤别的用户桌面。5.5 离线环境顺手补装的常用包最后分享一个让我省心的经验既然都要离线装 VNC 了我通常会顺手把其他可能用到的图形工具依赖一起下载好避免以后每次要装个小工具都重新走一遍下载拷贝流程。适合提前准备的有x11-apps包括xclock、xeyes等基础图形测试工具调试 VNC 是否正常很快xtermVNC 里默认终端故障排查时很有用firefox或chromium-browser如果远程桌面是为了操作 Web 页面浏览器少不了fonts-noto-cjk中文显示需要的字体不装的话远程桌面上所有中文全是方块system-config-printer、gnome-system-monitor这类图形管理工具按需带这些包在下载机上同样用apt-get install --download-only准备好拷贝到目标服务器后统一安装。别看每个包都不大关键时候能省掉一次来回跑的麻烦。我在实际项目里做过一次完整的离线部署当时目标服务器不但没有外网连 DNS 都不通所有操作只能靠 U 盘传递 deb 包。第一次因为下载机用的架构和服务器不一致装到一半发现依赖版本对不上全部重来第二次又因为是 root 用户的 xstartup 配置在普通用户下执行黑屏了半小时。后来把 systemd 服务、用户隔离、xstartup 模板都整理固定之后复制到任何一台同类服务器上基本五分钟内就能把远程桌面拉起来。这个套路现在已经成了我处理内网图形环境需求的首选也希望能帮你少踩几个坑。

相关新闻

从聊天式到代理式编程:用Cursor与API构建AI编码工作流

从聊天式到代理式编程:用Cursor与API构建AI编码工作流

我最早用大模型写代码的方式很蠢。遇到一个不熟悉的函数,把整个文件复制到网页聊天框,注明“帮我改这里”,等它吐出几百行代码,再复制回来,手动定位差异,经常粘错位置。更麻烦的是,模型只看到你…

2026/10/17 18:45:07 阅读更多 →
RabbitMQ死信队列实现延时任务:订单超时关闭完整方案

RabbitMQ死信队列实现延时任务:订单超时关闭完整方案

1. 从“订单30分钟未支付”说起:延时任务的真实需求下单后一段时间没付款,系统得自动把订单关掉、把库存腾出来。这个动作听起来简单,背后涉及延时任务处理的选型问题:不能用户刚下单就立刻触发关闭逻辑,也不能完全依赖…

2026/10/17 18:45:07 阅读更多 →
Cursor 3智能体控制台:从IDE到AI任务指挥中心的范式迁移

Cursor 3智能体控制台:从IDE到AI任务指挥中心的范式迁移

1. 这版更新的核心不是"更好用的编辑器",而是"换了一个物种"我在拿到 Cursor 3 之后的第一反应其实是有点懵的——打开之后默认落脚的界面不再是熟悉的三个分栏布局,而是一个按时间线排开的对话控制区。我花了几分钟才找到入口去打开…

2026/10/17 18:44:06 阅读更多 →

最新新闻

长沙氩电联焊培训哪家好?焊将军学园氩电联焊课程全解 析

长沙氩电联焊培训哪家好?焊将军学园氩电联焊课程全解 析

长沙氩电联焊培训哪家好?焊将军学园氩电联焊课程全解析(价格课时工位师资就业) 长沙氩电联焊培训推荐焊将军学园(长沙市汇德职业培训学校特色焊接品牌):培养氩弧焊打底+电弧焊盖面的复合型焊接人…

2026/10/17 19:28:41 阅读更多 →
从A2L到S19:INCA标定软件完整工作流与避坑指南

从A2L到S19:INCA标定软件完整工作流与避坑指南

简介:INCA标定软件使用教程是一份面向汽车电子标定工程师与ECU测试人员的入门级操作指南,聚焦INCA软件在电控系统标定与诊断中的典型应用。内容从软件安装、许可证选取讲起,覆盖建立实验环境、导入A2L与s19文件、配置ES582硬件、CAN-DBC连接、…

2026/10/17 19:28:41 阅读更多 →
用AGENTS.md给AI Coding Agent写项目说明书:多语言多框架项目实战指南

用AGENTS.md给AI Coding Agent写项目说明书:多语言多框架项目实战指南

老读者应该都有这种体验:你给 AI Coding Agent 提了个小需求,它改完代码你一看,模块边界被它推平了,自己擅自从“新建模块”跳到“修改核心类”,还自作主张引入了个没人维护的库。更离谱的是,它在多语言项目…

2026/10/17 19:28:41 阅读更多 →
混合精度训练详解:FP16/BF16原理、显存优化与踩坑指南

混合精度训练详解:FP16/BF16原理、显存优化与踩坑指南

最近我在调一个大语言模型训练流程,卡在了一个很基础的问题上:显存不够。网上所有教程都说用FP16能省一半显存、训练速度快一倍,我也跟着改了一行代码——把模型的精度转成半精度。结果跑起来没几步,loss直接变成了NaN。后来我才明…

2026/10/17 19:28:41 阅读更多 →
OFTP2与OFTP1区别详解:从协议机制到汽车行业EDI迁移实践

OFTP2与OFTP1区别详解:从协议机制到汽车行业EDI迁移实践

OFTP2在汽车行业的EDI圈子里已经不算新鲜词了,但每次聊起来,还是会有人问一句:OFTP2和OFTP1到底有什么区别?网上资料东一榔头西一棒槌,协议文档又写得像天书。这篇我不打算照着标准念,而是从实际跑传输的角…

2026/10/17 19:28:41 阅读更多 →
三相电信号采集电路设计:从互感器选型到ADC同步采样与相位校准

三相电信号采集电路设计:从互感器选型到ADC同步采样与相位校准

简介:《三相电信号采集电路设计》是一份面向电能质量监测、电力电子装置应用及供电系统运维等场景的技术资料,适合从事电网信号采集、嵌入式硬件设计的工程师与相关专业学生阅读。资源围绕三相电压电流信号的精密采集展开,涵盖互感器选型、频…

2026/10/17 19:27:40 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →