VNC配置端口占用

在配置VNC环境时遇到端口被占用的问题,尝试使用vncserver-kill命令关闭端口无效,因占用者并非root用户,需切换用户手动杀死进程。之后虽成功清理,但系统仍报错,原因是存在遗留的锁文件。清除相关缓存文件后,VNC服务配置问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

配置VNC环境时 执行systemctl配置端口发现有些端口被占用

systemctl status vncserver-user@:2.service
\u25cf vncserver-dgq@:2.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver-dgq@.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2021-04-14 14:12:02 CST; 25s ago
 Main PID: 55080 (code=exited, status=2)

Apr 14 14:12:02 SEU.IC1 systemd[1]: Starting Remote desktop service (VNC)...
Apr 14 14:12:02 SEU.IC1 systemd[1]: Started Remote desktop service (VNC).
Apr 14 14:12:02 SEU.IC1 vncserver_wrapper[55080]: A VNC server is already running as :2
Apr 14 14:12:02 SEU.IC1 vncserver_wrapper[55080]: FATAL: 'runuser -l dgq' failed!
Apr 14 14:12:02 SEU.IC1 systemd[1]: vncserver-dgq@:2.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Apr 14 14:12:02 SEU.IC1 systemd[1]: Unit vncserver-dgq@:2.service entered failed state.
Apr 14 14:12:02 SEU.IC1 systemd[1]: vncserver-dgq@:2.service failed.

发现VNC server 2端口已经被占用,因此执行

root@SEU ~]# /usr/sbin/lsof -i tcp:5902
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
Xvnc    48138  dgq    9u  IPv4 3035358      0t0  TCP *:5902 (LISTEN)
Xvnc    48138  dgq   10u  IPv6 3035359      0t0  TCP *:5902 (LISTEN)

或者

[root@testdb ~]# ps -ef | grep -i vnc | grep -v grep

查看该端口


解决方案:

直接vncserver -kill :端口号

[root@SEU ~]# vncserver -kill :2

Can't find file /root/.vnc/SEU.IC1:2.pid
You'll have to kill the Xvnc process manually

后面发现占用的用户不是root,因此需要切换相关用户去杀掉。
或者直接干脆一点,用kill语句杀掉。

[root@testdb ~]# kill -9 48138

后面systemctl配置发现还是报错,

[root@SEU ~]# systemctl status vncserver-dgq@:2.service
\u25cf vncserver-dgq@:2.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver-dgq@.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2021-04-14 14:23:39 CST; 19s ago
 Main PID: 56579 (code=exited, status=2)

Apr 14 14:23:39 SEU.IC1 systemd[1]: Starting Remote desktop service (VNC)...
Apr 14 14:23:39 SEU.IC1 systemd[1]: Started Remote desktop service (VNC).
Apr 14 14:23:39 SEU.IC1 vncserver_wrapper[56579]: Warning: SEU.IC1:2 is taken because of /tmp/.X2-lock
Apr 14 14:23:39 SEU.IC1 vncserver_wrapper[56579]: Remove this file if there is no X server SEU.IC1:2
Apr 14 14:23:39 SEU.IC1 vncserver_wrapper[56579]: A VNC server is already running as :2
Apr 14 14:23:39 SEU.IC1 vncserver_wrapper[56579]: FATAL: 'runuser -l dgq' failed!
Apr 14 14:23:39 SEU.IC1 systemd[1]: vncserver-dgq@:2.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Apr 14 14:23:39 SEU.IC1 systemd[1]: Unit vncserver-dgq@:2.service entered failed state.
Apr 14 14:23:39 SEU.IC1 systemd[1]: vncserver-dgq@:2.service failed.

从报错信息可以看出是部分缓存文件没有清除,root直接清掉,后面VNC配置就没问题了。

### 如何在麒麟操作系统上检查或查看VNC服务使用的端口号 #### 使用 `netstat` 或 `ss` 命令查看监听端口 为了确定 VNC 服务正在使用哪些端口,可以利用 `netstat` 或者更现代的 `ss` 工具来显示网络连接状态。这些工具能够帮助识别由特定进程占用端口。 ```bash # 使用 netstat 查看所有监听中的 TCP 端口及其对应的程序名称 $ sudo netstat -tulnp | grep vnc # 如果系统中已弃用 netstat,则可改用 ss 命令代替 $ sudo ss -tulnp | grep vnc ``` 上述命令会列出当前运行着的服务以及它们所绑定的本地地址和端口,并过滤出含有 "vnc" 字样的条目[^1]。 #### 查询具体用户的 VNC 配置文件 通常情况下,默认配置下每个用户启动的第一个 VNC 实例将会分配给定范围内的第一个可用端口(通常是5900加上显示编号)。可以通过查阅 `/etc/vncservers` 文件或者是个人主目录下的 `.vnc/config` 来获取有关指定实例的信息: ```bash # 检查全局配置文件是否存在自定义设置 $ cat /etc/sysconfig/vncservers # 对于单个用户的配置,可以在其家目录寻找 .vnc 下的相关文件 $ ls ~/.vnc/ ``` 如果存在名为类似于 `xstartup` 的脚本或者其他配置项,里面可能包含了关于端口映射的具体说明[^2]。 #### 利用 `lsof` 命令定位打开的套接字 另一个有效的办法就是通过 `lsof` (list open files)命令去查找被某个应用程序持有的资源,在这里是指那些处于 LISTEN 状态上的 socket 描述符: ```bash # 找出所有属于 vnc 进程族并且处于监听模式下的 IPv4/IPv6 地址与端口组合 $ sudo lsof -i -sTCP:LISTEN -n | grep vnc ``` 此操作同样适用于其他类型的守护进程中,只要替换掉最后面的关键字即可适应不同的场景需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值