当前位置: 首页 > news >正文

【linux】Xorg的工作原理

介绍

在linux系统上执行nvidia-smi时,总有一个进程占用gpu。

1   N/A  N/A      2174      G   /usr/lib/xorg/Xorg                  4MiB 

/usr/lib/xorg/Xorg 是与X Window System(简称X11或X)相关的一个应用程序。X Window System是一个在类Unix操作系统上广泛使用的图形界面系统。它提供了基础的图形界面功能,允许在用户和操作系统之间展示图形界面。

具体来说,Xorg 是X Window System的一个开源实现,通常用于管理和协调显示设备(如显示器)、输入设备(如鼠标和键盘)以及图形卡之间的交互。它是大多数Linux发行版以及一些其他Unix-like系统中默认的X服务器。

Xorg的工作原理和作用

  1. X Server和X Client:

    • 在X Window系统中,Xorg 作为一个X服务器(X Server),负责管理所有的图形显示和输入设备。
    • 应用程序则作为X客户端(X Client),它们通过X服务器显示图形界面。
    • X客户端和X服务器之间可以在同一台机器上通信,也可以通过网络在不同机器上进行通信。
  2. 图形和事件处理:

    • Xorg负责绘制窗口、处理键盘和鼠标输入等。
    • 它接收来自X客户端的绘图请求,并将结果输出到屏幕上。
    • 同时,它也从硬件接收输入事件(如鼠标移动、键盘按键等),并将这些事件传递给相应的X客户端。
  3. 配置和驱动:

    • Xorg通过配置文件(如 /etc/X11/xorg.conf,尽管现代Xorg版本往往能够自动配置)和驱动程序来支持不同的硬件设备。
    • 它支持多种图形卡、显示器、输入设备,并能够处理多显示器设置。
  4. 扩展和多样性:

    • Xorg支持各种扩展,例如OpenGL用于3D图形加速,Xinerama用于多显示器支持等。
    • 它与多种桌面环境(如GNOME, KDE)和窗口管理器(如Xfwm, Metacity)兼容,提供了丰富的用户界面体验。

相关代码示例

  1. 查看Xorg配置文件:

    cat /etc/X11/xorg.conf
    
  2. 查看Xorg日志:

    cat /var/log/Xorg.0.log
    
  3. 使用xrandr命令调整屏幕分辨率:

    xrandr --output HDMI1 --mode 1920x1080
    
  4. 列出可用的显示设备和支持的模式:

    xrandr
    
  5. 编写简单的X客户端程序(C语言):

    #include <X11/Xlib.h>int main() {
    //程序创建一个基本的窗口,并在按下任意键后退出Display *d;int s;Window w;XEvent e;d = XOpenDisplay(NULL);if (d == NULL) {fprintf(stderr, "无法打开显示\n");exit(1);}s = DefaultScreen(d);w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1, BlackPixel(d, s), WhitePixel(d, s));XSelectInput(d, w, ExposureMask | KeyPressMask);XMapWindow(d, w);while (1) {XNextEvent(d, &e);if (e.type == KeyPress)break;}XCloseDisplay(d);return 0;
    }
    
http://www.lryc.cn/news/286314.html

相关文章:

  • 02-docker下部署seata
  • 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测
  • 精益生产咨询背后的秘密:企业如何实现价值最大化
  • 创建SERVLET
  • python算法与数据结构(搜索算法和拓扑排序算法)---深度优先搜索
  • thinkphp5实战之phpstudy v8环境搭建,解决Not Found找不到路径问题
  • fastjson-BCEL不出网打法原理分析
  • 部署mysql主从同步,部署mysql数据读写分离结构+mycat2
  • 【最新!超详细C++入门】
  • 【Linux】【实战系列】10 分钟掌握日常开发中 Linux 网络处理相关命令
  • 语义分割常用评价指标
  • 从0开始学习C++ 第一课:你的第一个C++程序
  • Dubbo-admin监控中心
  • 216. 组合总和 III - 力扣(LeetCode)
  • LeetCode-题目整理【5】:O(1) 时间插入、删除和获取随机元素
  • 服务器感染了.wis[[Rast@airmail.cc]].wis勒索病毒,如何确保数据文件完整恢复?
  • ContentNegotiationManagerFactoryBean 内容协商
  • html css js 开发一个猜数字游戏
  • HDD 东山再起,单块 30TB 起步新品想要颠覆储存行业
  • 【网络安全】-基本工具msf
  • Vue3的ref和reactive
  • Flink编程——风险欺诈检测
  • Day37 贪心算法 part06 738. 单调递增的数字 968. 监控二叉树
  • SpringBoot Redis入门(四)——Redis单机、哨兵、集群模式
  • 获取数组中的第一个、第二个、第三个......元素
  • 前端面试题(持续更新~~)
  • ubuntu下无法访问和ping通github的一种解决方法
  • C#,入门教程(28)——文件夹(目录)、文件读(Read)与写(Write)的基础知识
  • 开源大数据集群部署(六)Keytab文件生成
  • 图神经网络X项目|基于图神经网络的电商行为的预测(5%)