
在Ubuntu 24.04上折腾VNC远程桌面本来就是很常见的事。尤其是做机器人开发、想在远程窗口里跑rviz或者在一台没接显示器的服务器、虚拟机上需要看图形界面的场景VNC几乎成了刚需。但很多人照着老教程一步步操作装完VNC相关包后一执行vncpasswd准备设密码就被一行“vncpasswd: command not found”糊在脸上。我见过有人卡在这一步卡了一下午。不是命令拼错了也不是权限不对大概率是安装动作本身出了问题——在Ubuntu 24.04里旧的VNC软件包已经改名甚至消失了装了一个不提供vncpasswd的东西当然找不到命令。这篇文章我就从这个问题展开把Ubuntu 24.04上VNC的安装选型、密码配置、启动流程、常见坑一次说清楚尽量让刚接触的朋友能照着一步步把远程桌面跑起来少走弯路。1. vncpasswd: command not found 到底是什么问题1.1 先说清楚vncpasswd 是哪个包提供的vncpasswd不是系统自带的命令它是由VNC服务器软件包提供的工具。VNC远程桌面的原理是在你需要远程访问的机器上运行一个VNC服务器它维护一个虚拟的显示桌面客户端通过VNC协议连上来。既然是服务器就必须有访问控制vncpasswd就是用来生成并存储访问密码的工具。Ubuntu的软件源里其实有好几套VNC服务器彼此之间名字相近但来源不同软件包提供的主要命令特点tigervnc-standalone-servervncserver、Xvnc维护活跃性能好Ubuntu 24.04上推荐tigervnc-commonvncpasswdTigerVNC系列工具包密码工具在这里tightvncservertightvncserver、vncpasswd经典老牌轻量但界面和兼容性比较旧x11vncx11vnc不创建虚拟桌面直接镜像当前屏幕vnc4servervncserver、vncpasswd老版本Debian/Ubuntu常用24.04源里基本消失了看到没有vncpasswd这个命令在TigerVNC体系里由tigervnc-common提供在TightVNC体系里由tightvncserver提供。如果你只装了tigervnc-standalone-server而没装配套的tigervnc-common或者干脆装的是某个不包含密码工具的界面那vncpasswd当然不存在。我在Ubuntu 24.04的干净系统上测试过直接执行sudo apt install tigervnc-standalone-server tigervnc-common之后/usr/bin/vncpasswd就出现了。所以解决方案的第一步不是去网上找一个所谓“vncpasswd独立安装包”而是把正确的VNC服务器套装完整装上。另外强调一点vncpasswd是给普通用户生成自己的VNC密码用的不是系统root密码也不是用户登录密码。它生成的文件默认放在~/.vnc/passwd这个目录和文件归属当前用户权限相对敏感。如果习惯用sudo去运行vncpasswd很容易把密码文件写到root的home目录下导致你正常用户启动VNC服务时读不到密码文件又会报出另一堆问题。后面我会专门说这个坑。1.2 “command not found”不只是没装包那么简单虽然“包没装对”是遇到这个提示的最常见原因但我也遇到过几个伪装的场景第一次排查时很容易被带偏。第一个是PATH问题。理论上vncpasswd装好后位于/usr/bin/vncpasswd而/usr/bin一定在PATH里普通用户和sudo都能直接找到。不过有一种情况是你之前用某种方式手动编译了VNC软件或者从压缩包解压到了一个自定义目录终端环境变量里没包含那个目录执行时也会提示command not found。这种属于少数但排查时可以先跑一下which vncpasswd如果没有任何输出再配合ls /usr/bin/vncpasswd确认二进制文件是否存在。第二个是“当前shell环境还没刷新”。Linux的shell在启动时读取PATH配置安装新软件后新开一个终端窗口通常就能识别新命令。如果你一直在同一个旧终端里操作偶尔会出现命令已经被装上了但bash的hash表里还残留着“找不到”的缓存。这种情况不多但很迷惑人。解决很简单执行hash -r清一下缓存或者直接关掉终端重开一个。第三个是apt软件源索引太旧。有些刚装的Ubuntu 24.04系统或者从老版本升级上来的系统apt源里的包列表还是旧的搜不到新版本的TigerVNC。这时候直接apt install可能会提示找不到软件包或者装上一个旧版本。所以安装任何东西之前先跑sudo apt update刷新索引这个动作成本极低却能避免至少一半的奇怪报错。还有一点值得提apt-file这个工具可以帮你反查某个命令属于哪个包。第一次遇到“command not found”时用apt-file search /usr/bin/vncpasswd就能直接看到它来自tigervnc-common。Ubuntu 24.04默认没有装apt-file需要先sudo apt install apt-file然后用sudo apt-file update更新索引。虽然多几步但养成了这个习惯之后以后遇到任何“command not found”类型问题都会从容很多。2. 在 Ubuntu 24.04 上装 VNC到底该选哪个包2.1 TigerVNC、TightVNC、x11vnc 怎么选Ubuntu 24.04的软件源里VNC相关包并不算少但每套的设计目标差别很大。选错包是后续一系列问题的根源。TigerVNC是目前维护最活跃、使用范围最广的方案。它功能完整支持TLS加密、多用户会话、较好的性能表现在Ubuntu 24.04上属于我优先推荐的方案。tigervnc-standalone-server提供独立的虚拟显示服务器即使你的机器没有接任何物理显示器它也能在后台创建一个虚拟的X显示。这一点对无头服务器非常有用。TightVNC则是很老牌的方案特点是压缩算法优化得好适合在低带宽网络下使用。但它在Ubuntu 24.04上的包维护节奏慢功能也比较基础现在的优势主要在于“老教程多、资料齐全”。如果只是临时用一用或者对GTK老界面有执念也不是不能用。不过既然是新装的24.04系统建议直接上TigerVNC。x11vnc是另外一个思路它不创建新的虚拟桌面而是直接捕获当前正在运行的X/Wayland桌面屏幕通过网络转发出去。这种方案适合“我已经在本地登录了图形界面想远程看看屏幕”的场景不适合“服务器没接显示器我想凭空变出一个桌面来”。很多人没搞清楚这点把x11vnc当作普通的vncserver用结果连上去发现黑屏或者看到的桌面根本不是自己想要的。所以在Ubuntu 24.04上如果你是需要一个独立远程桌面首选组合是TigerVNC作为VNC服务器再加一个轻量桌面环境。至于桌面环境为什么不要默认的GNOME下一章详细说明。2.2 别再装 vnc4server看一眼软件源真实情况网上大量的旧教程尤其是好几年前写的都会让你执行sudo apt install vnc4server。在Ubuntu 18.04、20.04时代这没问题vnc4server确实存在于软件源中并且提供vncpasswd。但到了Ubuntu 24.04这个包在默认软件源里已经基本找不到了。我建议大家在执行安装命令之前先花一分钟看看软件源里到底有什么。运行一下apt search vnc输出里你会看到很多条目比如tigervnc-standalone-server、tigervnc-common、tightvncserver、x11vnc、vino等等。仔细看版本信息和描述你会发现绝大多数还在维护的包都和TigerVNC相关。那些老教程里的vnc4server已经成了“时代眼泪”继续按它操作自然装不上vncpasswd也就无从谈起。如果你希望从软件源层面彻底避开“装错包”的问题还可以在安装后用dpkg -S /usr/bin/vncpasswd反查这个文件属于哪个包确认自己的安装路径是正确的。通过文件反查包名比手动记忆包名靠谱得多。3. 从零开始Ubuntu 24.04 上把 VNC 跑起来3.1 安装 TigerVNC 并设置 vncpasswd 密码先做最基本的系统准备工作。确认你能联网然后执行sudo apt update这步必须做别跳。接着安装TigerVNC服务器和配套工具sudo apt install tigervnc-standalone-server tigervnc-common -y安装完成后先验证一下命令是否存在which vncpasswd which vncserver正常情况下/usr/bin/vncpasswd和/usr/bin/vncserver都会被找到。这时候可以开始设置密码了。注意不要在root用户下运行切回你的普通用户vncpasswd执行后会有两次密码输入提示第一次就是设置远程连接的密码第二次问的是“Would you like to enter a view-only password?”也就是“是否设置一个只能看不能操作的密码”。按个人需求选择一般直接按n跳过即可。设置完成后检查一下密码文件是否生成ls -la ~/.vnc/你应该看到passwd文件并且它的属性属于当前用户。如果~/.vnc下什么都没有很可能是你用了sudo运行vncpasswd把文件写到root目录里去了这个时候重新用普通用户执行一遍即可。有一点需要提醒vncpasswd的密码不是Linux系统登录密码只是VNC远程接入时的独立密码。别设置成太简单的纯数字毕竟VNC协议本身如果没配加密层在网络上是相对暴露的密码复杂一点至少降低暴力破解的风险。3.2 配置 xstartup 和桌面环境不要默认开 GNOME装好服务器、设置好密码并不意味着你直接就能看到一个好用的桌面。vncserver本质上启动的是一个虚拟X服务器它自己并不知道要往这个虚拟显示器里画什么。真正决定你看到什么桌面的是~/.vnc/xstartup这个启动脚本。很多新手第一次启动vncserver后用VNC Viewer连上去看到的是灰色的屏幕或者只有一个Terminal图标没有桌面壁纸也没有任务栏。原因就是xstartup没有正确指定窗口管理器或桌面环境。Ubuntu 24.04默认桌面是GNOME但我个人不太建议在VNC里直接启用GNOME。原因很简单GNOME对Wayland、系统会话、硬件加速的依赖比较重通过VNC这种远程虚拟桌面方式启动经常会出现各种会话冲突轻则界面卡顿重则整个session起不来非常难排查。更稳妥的做法是安装一个轻量桌面比如Xfce。安装命令如下sudo apt install xfce4 xfce4-goodies -y这个安装包比较大需要一点耐心等待。装完之后编辑xstartupnano ~/.vnc/xstartup写入以下内容#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS export XDG_SESSION_TYPEx11 export GDK_BACKENDx11 exec startxfce4保存后给脚本加上执行权限chmod x ~/.vnc/xstartup这个脚本会在每次VNC会话启动时自动运行。前两行unset是为了避免从本地图形会话继承不必要的全局变量后面直接exec startxfce4把Xfce桌面拉起来干净利落。如果你确实希望用GNOME桌面理论上也可以把startxfce4替换成gnome-session但前提是系统安装了GNOME会话且以Xorg模式运行。Ubuntu 24.04默认登录模式是WaylandWayland会话不会老老实实配合Xvnc所以真要远程用GNOME需要先在GDM登录界面切换到“Ubuntu on Xorg”模式风险和复杂度都高不少不建议新手折腾。3.3 启动 VNC 服务并通过 VNC Viewer 连接桌面环境配置完成后可以启动第一个VNC会话了。VNC会话从:1开始编号代表显示端口5901。命令如下vncserver -geometry 1920x1080 -depth 24 :1-geometry设置虚拟桌面分辨率-depth设置颜色深度。24位色深在大多数场景下够用。如果你要对低带宽网络做优化可以考虑用-depth 16带宽占用会小很多。第一次启动时系统可能会提示你创建一个~/.vnc目录之类的信息属于正常现象。启动完成后查看日志确认服务状态cat ~/.vnc/桌面名:1.log日志文件的具体名称取决于你的主机名比如ubuntu:1.log。如果日志最后几行没有报错说明会话已经成功起来了。也可以用端口监听命令确认ss -tlnp | grep 5901如果看到5901端口在监听说明VNC服务器已经在等待客户端连接了。接下来就是VNC Viewer的活了。下载一个VNC Viewer客户端在连接地址栏输入你的服务器IP:5901回车后输入刚才用vncpasswd设置的密码应该就能看到Xfce桌面了。如果连接一直失败先检查防火墙。Ubuntu默认的ufw防火墙如果开了要把对应端口放行sudo ufw allow 5901/tcp注意这个操作是放行整个网络对5901端口的访问安全级别不算高。更稳妥的方案是只监听本机回环地址然后用SSH隧道转发。把启动命令改成vncserver -localhost -geometry 1920x1080 :1这样外部就无法直接访问5901端口本地客户端通过SSH隧道连到服务器的5901端口安全性会好不少。SSH隧道的方式比较简单在本地机器执行ssh -L 5901:localhost:5901 用户名服务器IP然后VNC Viewer连接localhost:5901即可。这种方式适合没有复杂网络需求的场景比直接裸暴露端口稳得多。3.4 把 VNC 做成 systemd 服务开机自动拉起来可选如果只是临时用一下VNC手动启动就够了。但如果这台机器是常开的服务器或者开发机每次开机都手动执行vncserver会比较烦。可以把VNC做成systemd服务让它开机自动启动。在/etc/systemd/system/下创建一个service文件比如vncserver.servicesudo nano /etc/systemd/system/vncserver.service内容如下[Unit] DescriptionVNC server for session %i Aftersyslog.target network.target [Service] Typeforking User你的用户名 ExecStart/usr/bin/vncserver -geometry 1920x1080 -depth 24 :%i ExecStop/usr/bin/vncserver -kill :%i Restarton-abort [Install] WantedBymulti-user.target注意把User替换成你自己的用户名以及把%i对应的显示编号用起来。保存后重新加载systemd配置sudo systemctl daemon-reload sudo systemctl enable --now vncserver1这样VNC会话:1就会被systemd接管开机自动拉起崩溃后自动重启。如果以后要临时停用sudo systemctl stop vncserver1注意systemd服务方式下ExecStop里的vncserver -kill :1负责干净地结束会话尽量不要手动去kill进程否则可能会有残留的锁文件或者Xvnc僵尸进程。4. 实际使用中的高频问题和排查记录4.1 vncpasswd 相关的报错速查表我把实际使用中最容易遇到的几个VNC相关报错整理成了表格方便你对照排查。报错或现象常见原因处理方法vncpasswd: command not found未安装tigervnc-common等配套包安装tigervnc-standalone-server和tigervnc-commonvncserver: command not found未安装tigervnc-standalone-server安装对应服务器包密码文件被拒绝或权限错误用sudo运行vncpasswd密码写到了root目录删除错误的密码文件用普通用户重新设置密码Failed to load password file~/.vnc/passwd不存在或权限不对确认vncpasswd执行成功检查文件权限连接时提示Authentication failed密码错误或者vncpasswd设置的密码与当前用户不匹配重新运行vncpasswd设置密码xauth: file ... does not exist首次启动会话时~/.Xauthority缺失一般自动创建若报错则手动创建并检查权限其中权限类问题最容易忽视。VNC读取~/.vnc/passwd时如果文件属主不是当前用户或者权限太开放服务器会直接拒读。建议保持目录权限为700、密码文件权限为600这是比较常规的安全配置chmod 700 ~/.vnc chmod 600 ~/.vnc/passwd4.2 VNC 连接上之后黑屏、灰屏怎么办连上VNC却只看到黑屏或者灰蒙蒙一片是出现频率非常高的问题。灰屏通常意味着Xvnc服务器本身起来了但xstartup没有成功启动桌面环境。对着~/.vnc/桌面名:1.log看如果发现与dbus、session manager相关的报错多半是缺了unset环境变量的步骤。上面的xstartup模板已经包含了关键的unset和exec startxfce4可以先去核对。黑屏则是更让人头疼的问题。常见原因有几种。第一种是桌面环境启动失败。尤其是GNOME在VNC里经常起不来桌面进程退出了但Xvnc还在画面自然就是黑的。我建议遇到黑屏直接检查日志如果发现gnome-session崩溃那就果断切换到Xfce不要恋战。第二种是显卡驱动问题。Ubuntu 24.04的新机器如果用了闭源NVIDIA驱动Xvnc可能无法正常初始化OpenGL上下文导致桌面渲染失败。此时可以先尝试安装libgl1-mesa-dri和mesa-utils这类软件渲染相关的包再启动VNC。如果还不行就要考虑是不是驱动和Xvnc版本不兼容必要时降级到开源驱动nouveau临时测试。第三种是Wayland会话的干扰。前面说过Ubuntu 24.04默认登录桌面是Wayland。如果xstartup里指定的桌面试图沿用Wayland会话很可能在VNC里得不到可用的显示。确保xstartup里设置了export XDG_SESSION_TYPEx11并且实际启动的桌面是Xfce或者GNOME Xorg会话。4.3 VNC 里跑 rviz 这种 3D 程序屏幕起不来怎么办很多朋友折腾VNC初衷就是为了在没有物理显示器的机器上远程打开rviz这类3D可视化工具。现象通常是VNC桌面能正常看到但输入命令启动rviz后没有任何窗口或者rviz直接崩溃退出了。这里要理解一个关键点rviz依赖OpenGL渲染而VNC创建的虚拟显示环境往往没有可用的GPU加速。大多数无头服务器、虚拟机里根本没有真正的显卡直通OpenGL上下文只能走软件渲染。软件渲染不是不能用但很多3D程序在检测不到GLX扩展时会直接罢工。我在Ubuntu 24.04上的做法是在启动rviz之前显式启用软件渲染环境变量export LIBGL_ALWAYS_SOFTWARE1 rviz这样rviz会老老实实走Mesa软件渲染路径窗口能弹出来操作也会明显变慢但至少能用。如果过程中提示缺少扩展可以先安装sudo apt install mesa-utils libgl1-mesa-dri -y另外在给ROS2机器人开发用的VNC会话里建议把颜色深度降低一点分辨率也不要拉太高比如-geometry 1366x768 -depth 16。软件渲染吃CPU分辨率越高越吃力调低之后流畅度差别很大。如果是虚拟机里跑rviz还有一个默认选项是给虚拟机配置GPU直通或者3D加速但这严重依赖虚拟化平台和显卡型号配置复杂度高不是所有环境都支持。相比之下软件渲染是通用解法先保证能用再谈体验。4.4 虚拟机里鼠标变成一个点、点不中东西怎么处理很多人在VMware、VirtualBox这类虚拟机里用VNC Viewer访问Ubuntu 24.04时发现鼠标指针在VNC窗口里变成一个小圆点或者十字点而且点击位置似乎总是偏移窗口按钮点不准。这个现象比较典型属于“鼠标光标的图形同步”问题。VNC协议本身可以传输光标形状但虚拟机的虚拟显卡驱动如果和VNC服务器配合不好光标图案就传不出去。虚拟机里默认的鼠标指针是模拟PS/2或者USB设备没有安装增强工具时光标渲染经常不完整看起来就是一个小小的点。在VMware虚拟机里最直接的办法是先安装open-vm-tools-desktopsudo apt install open-vm-tools-desktop -y装完后重启虚拟机让虚拟显卡驱动和鼠标驱动都切换到VMware增强模式。这能同时解决光标显示和鼠标定位偏移的大部分问题。VirtualBox虚拟机则对应安装sudo apt install virtualbox-guest-utils virtualbox-guest-x11 -y另外VNC Viewer客户端本身的光标渲染模式也值得检查。不同版本的VNC Viewer对远端光标和本地光标的处理方式有差异可以尝试在客户端设置里切换“光标渲染”相关选项比如从“远程光标”切换到“本地光标”。不过归根结底虚拟机里先把增强工具装好是最省心的路径。4.5 虚拟化平台自带的 VNC 和系统内 VNC 的关系聊虚拟机VNC这个组合时经常会碰到一个概念混淆VMware ESXi等虚拟化平台自己也提供VNC访问为什么还要在虚拟机系统内部再装VNC这两种VNC服务的位置完全不同。ESXi自带的VNC是对整个虚拟机硬件控制台进行画面采集相当于把虚拟机显示器的画面转发给你你看到的是BIOS、GRUB、开机过程、操作系统桌面的完整视频流。这种模式不依赖虚拟机里是否安装任何软件是平台层面的功能。但它的缺点也很明显如果虚拟机没有安装对应的Guest Tools鼠标定位、分辨率切换、剪贴板共享都会比较粗糙。而且很多ESXi环境出于网络安全考虑不会直接把VNC端口暴露出来你访问起来也未必方便。虚拟机内部安装TigerVNC则相反它是操作系统层面的虚拟桌面服务和平台无关支持用户管理、多会话、密码加密。你要在虚拟机的Ubuntu 24.04里跑rviz、用远程桌面干活就应该用系统内的TigerVNC而不是依赖ESXi控制台VNC。两者并不冲突可以同时存在平台VNC负责应急查看系统VNC负责日常远程操作。4.6 顺带提一句开机黑屏和 GRUB 菜单消失这类问题的排查思路这些热搜词里的“ubuntu24.04开机左上角光标闪烁黑屏”“ubuntu24.04系统怎么没有显示grub2启动选项菜单”其实和VNC本身关系不大但确实会干扰VNC的整个使用体验。如果你的Ubuntu 24.04开机后直接光标闪烁黑屏VNC服务等于没有启动的机会自然连不上。这类问题通常先看显卡驱动。Ubuntu 24.04默认对NVIDIA新卡兼容不算完美有时刚装完系统或者升级内核后桌面起不来。建议先按CtrlAltF2切到TTY终端用账号登录后查看日志journalctl -b -1 | grep -i error如果是NVIDIA驱动问题可以在终端里重装驱动或者切换到nouveau开源驱动做临时验证。GRUB菜单不显示则比较正常Ubuntu默认的GRUB配置有隐藏菜单机制只有系统启动异常时才会自动弹出菜单。想主动看到GRUB菜单可以在开机时按住Shift键传统BIOS模式或者快速点按Esc键UEFI模式。不过这些是另一个话题了这里只是为了给遇到联动问题的朋友一个排查方向。5. 几个我踩了又踩的细节最后单独列出来文章写到这里VNC在Ubuntu 24.04上的安装、配置、排错基本都覆盖了。最后说几个我实际使用中觉得最值得记牢的细节都是平时文档里不容易看到的经验。第一个细节如果你在~/.vnc/xstartup里做了修改一定要先完整杀掉当前VNC会话再重新启动而不是直接再起一个新的:2会话。很多人改完配置后执行vncserver -geometry ... :1发现没生效因为旧会话还占着呢。正确做法是vncserver -kill :1 vncserver -geometry 1920x1080 -depth 24 :1第二个细节不要在root用户下运行vncpasswd或者启动vncserver。VNC服务应该跟随你实际登录使用的普通用户这样~/.vnc目录、xstartup脚本、桌面会话的权限才都是干净的。一旦你用root设置密码后续普通用户启动会话就会找不到密码文件这种“设置了密码却连不上”的坑特别浪费时间。第三个细节VNC服务在没有加密隧道时所有流量包括密码验证过程都是明文或者弱加密状态尽量不要图方便直接暴露在公网。如果你必须让外部访问建议在服务器端配置只监听localhost再通过SSH隧道访问或者使用支持TLS加密的客户端配合。少给自己惹麻烦远程桌面的安全习惯值得从一开始就养成。我自己的体会是VNC这种折腾型工具问题往往不在VNC本身而在你对Linux软件包体系、桌面会话机制、虚拟化资源这三者关系的理解程度。这次遇到vncpasswd: command not found表面是个命令找不到的小问题实际上是Ubuntu 24.04软件包演变和VNC工作方式的一次综合提醒。把技术原理理顺了之后再遇到相似的问题看一眼日志和包归属基本就能定位个八九不离十。