判断Linux是否开启VNC服务器,最直接的方法是检查监听端口和对应进程,默认VNC端口是5900或5901,一条命令就能确认:ss -tlnp | grep 590。 如果看到Xvnc或vncserver进程在监听,就说明VNC已经在运行;如果没有输出,则大概率没开。
linux查看vnc服务是否开启的命令:先看端口再看进程
很多朋友在云服务器或本地Linux机器上配置完VNC后,不确认到底启动没有,别着急,下面几条命令按顺序跑一遍,结果立刻清楚。
用ss命令检查VNC监听端口
VNC服务启动后,会监听TCP端口,默认的显示号从1开始,对应端口5901,2对应5902,以此类推,桌面版Linux自带的VNC有时会用5900,执行:
ss -tlnp | grep -E '590[0-9]'
如果输出类似:
LISTEN 0 5 0.0.0.0:5901 0.0.0.0: users:(("Xvnc",pid=2345,fd=6))
那说明VNC服务器已经开着,而且能看到进程名是Xvnc,PID是2345,只看到端口但没看到进程名,可能是权限不够,需要换成sudo ss -tlnp再试一次。
用ps命令抓VNC进程
端口检查不出来,不代表VNC一定没开,因为有些VNC变体不走标准端口,直接看进程更靠谱:
ps -ef | grep -i vnc
或者精确一点:
ps -ef | grep -E 'Xvnc|vncserver'
有Xvnc :1 -geometry 1280x800这样的行,说明服务正在跑,如果只有你刚才输入的命令本身,那基本可以断定VNC没启动。
检查systemd服务状态
现代Linux发行版多用systemd管理服务,假如你用的是TigerVNC或TightVNC的服务包,可以查服务状态:
systemctl status vncserver@:1.service
服务名称可能因发行版而异,CentOS 7/8下通常是vncserver@:1,Ubuntu下可能是vncserver-x11-serviced
,状态显示active (running)就代表已开启,显示inactive (dead)或failed则说明没在运行。
linux vnc连接不上是什么原因?先从服务端自查
如果VNC端口和进程都在,但客户端就是连不上,问题往往不在VNC本身,而在防火墙、桌面环境或者配置文件。
防火墙拦住了5901端口
不知道你有没有遇到过这种情况:服务端一切正常,本地连接却超时,行业共识认为,云服务器上遇到这类问题,第一嫌疑就是安全组和防火墙,先检查防火墙规则:
firewall-cmd --list-ports
CentOS/RHEL系用firewalld,如果列表里没有5900-5910,就添加:
firewall-cmd --permanent --add-port=5901/tcp firewall-cmd --reload
Ubuntu系统用ufw的话,执行:
sudo ufw allow 5901/tcp
别忘了云服务商的控制台安全组也要放行对应端口,否则内部怎么调都没用。
桌面环境没装全,VNC起来也白搭
很多精简版Linux服务器默认没有桌面,VNC本质是把桌面画面转发给客户端,系统里没装图形界面,VNC进程可能启动失败,或者只给出黑屏,检查一下:
systemctl get-default
如果显示multi-user.target,说明当前是命令行模式,需要先安装桌面环境,再启动VNC,比如在CentOS上:
sudo yum groupinstall "GNOME Desktop"
安装完成后重新启动VNC服务,多数情况下能解决问题。
配置文件里绑定了错误的地址
VNC的配置文件位于/etc/tigervnc/vncserver.users或者~/.vnc/config,如果里面写了localhost,那VNC只会监听回环地址,外部客户端自然连不上,查看配置:
cat ~/.vnc/config
确认没有localhost这一项,或者把localhost改成0.0.0
,然后重启VNC服务,说实话,大部分”VNC连不上”的教程都停留在防火墙层面,配置文件的坑很少有人提。
云服务器上怎么看vnc有没有开:三条命令快速定位
租用的Linux云服务器,商家自带VNC控制台和自装的VNC服务是两回事,很多人混淆了”网页VNC控制台”和”系统VNC服务器”,你的VPS控制台里能看到画面,不代表系统内VNC端口在监听,用下面的方法区分。
先确认是不是商家提供的VNC控制台
简米云、酷番云这类厂商的控制台VNC,是通过虚拟化层提供的,不占用系统端口,输入ss -tlnp看不到5900系列端口,因为根本没有对应的TCP监听,这时候别慌,那是正常的,要确认系统内部的VNC,还是得靠上面讲过的ss和ps命令。
在云服务器上自装VNC的检测步骤
如果你是在云服务器上自己装的VNC,比如用了yum install tigervnc-server,检测步骤和本机完全一样,但要注意云服务器默认安全组通常只开放22端口,即使VNC进程活着,外部也连不上,所以检测时,本地执行ss -tlnp看到监听,再用echo > /dev/tcp/你的公网IP/5901测试一下通不通,如果不通,十有八九是安全组没放行。
用一条命令综合判断
如果不想一条条敲,可以用这个组合命令:
ss -tlnp | grep 590 && ps -ef | grep Xvnc | grep -v grep
能看到端口和进程两行输出,说明VNC服务器肯定开着,只有端口没有进程,说明端口被其他服务占用了,都没有,那就没开启。
怎么区分VNC没启动和根本没安装
有时候你输入vncserver -list,提示找不到命令,这时候不是没启动,而是压根没装,判断方法很简单:
rpm -qa | grep vnc # Red Hat系 dpkg -l | grep vnc # Debian系
有输出说明装了,没输出就是没装,装的话看发行版:
- CentOS/Rocky:
sudo yum install tigervnc-server tigervnc-server-module - Ubuntu/Debian:
sudo apt install tigervnc-standalone-server - 轻量级方案:
sudo apt install x11vnc
装完之后再运行vncserver,或者用systemd启动服务,VNC没启动和没安装的区别,一个命令就能判断:which vncserver,有路径就是没启动,没有路径就是没安装。
Q&A:关于Linux VNC检测的常见疑问
linux怎么看有没有开vnc?一条命令能判断吗?
简单粗暴的方法是执行ss -tlnp | grep 5900,但只能判断标准端口,最保险的方式是同时查看端口和进程,用ss -tlnp | grep -E '590[0-9]'加上ps -ef | grep Xvnc,两条命令都执行,基本不会误判。
怎么确认VNC进程是正常运行还是僵死?
进程存在但客户端连不上,可能是僵死状态,看进程状态:
ps -aux | grep Xvnc
状态列如果是S或R,说明正常,如果是D(不可中断睡眠)或Z(僵尸),说明进程异常,这时候直接kill -9 PID,然后重新启动VNC服务。
如何让VNC在开机后自动启动?
用systemd管理最省事,编辑/etc/systemd/system/vncserver@:1.service,确认服务文件内容无误后执行:
systemctl enable vncserver@:1 systemctl start vncserver@:1
下次重启系统,VNC服务会自动拉起,需要注意的是,不同发行版的service文件路径不同,CentOS 8用vncserver@:1.service,Ubuntu用vncserver-x11-serviced.service,启用前先用systemctl list-unit-files | grep vnc看看实际服务名称。
判断Linux有没有开启VNC服务器,本质上就是查端口、查进程、查服务状态这三步,记住ss -tlnp | grep 590这一条关键命令,再配合ps确认进程,基本不会出错,连接不上时,回头检查防火墙和配置文件,多半能解决问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/701663.html





