Xvfb和x11vnc二者是怎么相互结合的?后续有实际示例

在图形界面远程控制和无头(headless)服务器场景中,Xvfb和x11vnc的组合堪称经典搭档。这对组合能够实现:在无物理显示器的服务器上创建虚拟图形环境,并通过网络进行可视化操作。

一、核心组件原理

  1. Xvfb (X Virtual Framebuffer)
  • 创建虚拟的X服务器环境
  • 不需要物理显卡或显示器
  • 通过指定显示编号(如:99)运行图形程序
  1. x11vnc (X11 VNC Server)
  • 将现有X会话的显示内容实时传输到VNC客户端
  • 支持密码验证和端口自定义
  • 可穿透防火墙实现远程访问

二、协同工作机制

+-------------------+     X协议     +-----------------+
| 图形应用程序       | <----------> | Xvfb (:99)      |
| (如Firefox)       |              | 虚拟显示服务器  |
+-------------------+              +-----------------+↑| 通过-display参数↓
+-------------------+     VNC协议    +-----------------+
| VNC客户端         | <-----------  | x11vnc服务进程  |
| (如TigerVNC)      |               | 绑定到:99显示   |
+-------------------+               +-----------------+

三、实践配置示例

  1. 环境搭建(Arch Linux)
sudo pacman -S x11vnc xorg-server-xvfb
  1. 启动虚拟显示环境
Xvfb :99 -screen 0 1920x1080x24 +extension GLX &
export DISPLAY=:99
  1. 绑定x11vnc服务
x11vnc -display :99 -forever -shared -bg -passwd 自定义密码
  1. 验证测试
# 在虚拟环境中启动Firefox
firefox &
# 通过VNC客户端连接服务器IP:5900

四、进阶配置方案
创建systemd联合服务(/etc/systemd/system/xvfb-x11vnc.service):

[Unit]
Description=XVFB and x11vnc combo service
After=network.target[Service]
ExecStartPre=/usr/bin/Xvfb :99 -screen 0 1920x1080x24 -ac +extension GLX
ExecStart=/usr/bin/x11vnc -display :99 -forever -shared -passwd 密码 -rfbport 5900
Restart=always[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable --now xvfb-x11vnc

五、典型应用场景
▶️ 自动化测试:在CI/CD流水线中运行浏览器测试
▶️ 远程开发:通过VNC操作IDE等图形工具
▶️ 数据可视化:生成动态图表并远程查看
▶️ 容器环境:在D容器中运行图形应用

六、故障排查要点

  1. 显示编号一致性:确保Xvfb和x11vnc使用相同DISPLAY值
  2. 权限问题:使用xhost +临时允许所有连接(测试环境)
  3. 端口冲突:通过-rfbport指定非标准端口
  4. 内存泄漏:定期重启服务,建议配合进程管理工具

七、性能优化建议
▸ 分辨率设置:根据实际需求调整Xvfb的屏幕参数
▸ 颜色深度:24位色深可平衡性能与显示效果
▸ 禁用合成器:启动Xvfb时添加-extension COMPOSITE
▸ 启用压缩:客户端支持时添加-compress参数

通过这种组合方案,我们成功在无显示设备的服务器上构建了完整的图形环境。相比单独使用x11vnc,这种方案避免了物理显示依赖,特别适合需要长期运行图形应用的服务器场景。实际测试显示,在4核8G的云服务器上,该方案可稳定支持5个并发VNC连接进行常规操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17193.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

deepseek-r1 训练流程

deepseek-r1 训练流程 技术创新deepseek-v3 && deepseek-r1deepseek-r1-zero训练过程aha moment准确度提升思考时间增加 deepseek-r1冷启动推理场景强化学习数据采样&&SFT全场景强化学习结果 参考文献 技术创新 极致的成本控制&#xff0c;媲美openAI的性能&a…

网络工程师 (35)以太网通道

一、概念与原理 以太网通道&#xff0c;也称为以太端口捆绑、端口聚集或以太链路聚集&#xff0c;是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作&#xff0c;共同承担数据传输任务&#xff0c;从而提高了网络的传输能力和可靠性。 二…

win11电脑其他WiFi可以连,只有一个WiFi连不上

这个问题卡了一小会&#xff0c;查了一些资料 后面发现 点击“诊断网络问题” 显示没有响应 第一步 重启wlan网络适配器 解决&#xff01;&#xff01;&#xff01; 重新连接那个有问题的wifi&#xff0c;丝滑连接&#xff01;

【网络通信】传输层之UDP协议

【网络通信】传输层之UDP协议 传输层端对端通信实现端到端通信的关键技术 UDP协议再谈端口号端口号划分关于端口号的两个问题 UDP协议基本格式UDP通信的特点UDP的缓冲区UDP数据报的最大长度基于UDP的应用层协议如何封装UDP报文以及如何交付UDP报文进一步理解封装和解包 传输层 …

时间盲注、boolen盲注

获取当前数据库名 获取数据库表 获取表的列

2025_2_13 二叉搜索树(一)

1.完全二叉树和满二叉树的概念 满二叉树&#xff1a;每一层都达到最大值 完全二叉树&#xff1a;只能右下角空&#xff0c;其他位置满&#xff0c;即最后一排从左到右的中间不能由缺 2.二叉搜索树 左子树中所有结点的 key 值都比根结点的 key 值小&#xff0c;并且左子树也…

DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?

随着人工智能技术的飞速发展&#xff0c;大模型领域不断涌现出具有创新性的成果。DeepSeek 的横空出世&#xff0c;为 AI 大模型领域带来了新的变革浪潮。本文将深入探讨 DeepSeek 出现后 AI 大模型面临的危机与转机。 冲冲冲&#xff01;&#xff01;&#xff01; 目录 一、…

高速差分总线比较--RS422, LVDS,PECL

1. RS422A&#xff0c; 如RS422 & RS485总先&#xff0c; 0/5V的差分电平&#xff0c;匹配电阻120ohm. S2D&#xff0c; Transmitter D2S, Receiver LVDS 如SN65LVDS1&#xff0c;驱动器&#xff1a;DS90LV031&#xff08;支持预加重&#xff09;&#xff0c;接收器&…

idea 错误: 找不到或无法加载主类 @C:\Users\admin\AppData\Local\Temp\idea_arg_file1549212448

idea 错误: 找不到或无法加载主类 C:\Users\admin\AppData\Local\Temp\idea_arg_file1549212448 该错误往往和左下角爱弹出的如下提示是一个意思 Error running ‘PayV3Test1.testTransferBatchesBatchId’ Error running PayV3Test1.testTransferBatchesBatchId. Command lin…

Java中如何高效地合并多个对象的List数据:方法与案例解析!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

23、深度学习-自学之路-激活函数relu、tanh、sigmoid、softmax函数的正向传播和反向梯度。

在使用这个非线性激活函数的时候&#xff0c;其实我们重点还是学习的是他们的正向怎么传播&#xff0c;以及反向怎么传递的。 如下图所示&#xff1a; 第一&#xff1a;relu函数的正向传播函数是&#xff1a;当输入值&#xff08;隐藏层&#xff09;值大于了&#xff0c;就输出…

React源码揭秘 | scheduler 并发更新原理

React 18增加了并发更新特性&#xff0c;开发者可以通过useTransition等hooks延迟执行优先级较低的更新任务&#xff0c;以达到页面平滑切换&#xff0c;不阻塞用户时间的目的。其实现正是依靠scheduler库。 scheduler是一个依赖时间片分片的任务调度器&#xff0c;React团队将…

腿足机器人之二- 运动控制概览

腿足机器人之二运动控制概览 高层运动规划MPCRL 中层逆运动学和逆动力学底层执行器控制传感器校正 上一篇博客是腿足机器人的骨架和关节的机械和电气组件&#xff0c;关节不仅需要通过机械设计实现复杂的运动能力&#xff0c;还必须通过电子组件和控制系统来精确控制这些运动。…

企业级高可用 Kubernetes 实践:基于青云 LB 搭建容灾与负载均衡集群全攻略

一、前言 在企业生产环境,k8s高可用是一个必不可少的特性,其中最通用的场景就是如何在 k8s 集群宕机一个节点的情况下保障服务依旧可用。部署高可用k8s集群对于企业级云平台来说是一个根本性的原则,容错、服务可用和数据安全是高可用基础设施的关键。本文是在青云上利用青云…

软件项目估算偏差的5 大源头及解决方案

软件项目成本估算偏差往往导致资金紧张&#xff0c;资源投入受限&#xff0c;进度延误无法按时交付&#xff0c;为控制成本还可能牺牲质量&#xff0c;引发团队士气低落、客户不满&#xff0c;严重时项目直接失败 。 因此&#xff0c;及时解决或降低项目偏差就非常重要&#xf…

树莓派学习

树莓派4B 基础操作 开机 开机要主要先接好线再通电 关机 先在系统里面关机再断电 可以在界面里面点击关机&#xff0c;或者使用命令行 使用网线连接到树莓派 用笔记本的以太网口接线到树莓派 在网络连接里面打开WLAN的网络共享&#xff0c;共享选择以太网口 在cmd里面输…

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description&#xff1a;任务描述 勾选 Discard old builds Discard old builds&#xff1a;控制何时…

一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记

时间轴呈现事故进程 17:00&#xff1a;开发人员小李正在尝试利用 Python 爬虫从企查查&#xff08;https://www.qcc.com&#xff09;抓取公司工商信息。原本一切正常&#xff0c;但突然发现信息采集失败&#xff0c;程序抛出大量选择器错误。17:15&#xff1a;小李发现&#x…

HCIA项目实践---OSPF的基本配置

9.5.12 OSPF的基本配置 &#xff08;所搭环境如上图所示&#xff09; A 先配置IP地址 (先进入路由器R1的0/0/0接口配置IP地址&#xff0c;再进入环回接口配置IP地址) &#xff08;配置R2路由器的0/0/0和0/0/1以及环回接口的IP地址&#xff09; &#xff08;置R3路由器的0/0/0接…

Java练习(20)

ps:练习来自力扣 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 class Solution {pu…