如何在没有图形库的情况下与C中的X服务器通信?

如果我想编写一个C程序与Linux上的X服务器通信并产生最简单的可视化结果,例如:在显示器上设置一个像素,我该怎么办?

我想尽可能少地使用库,从头开始理解它,无论代码多么低效/混乱.

更新 – 通过“没有库”,我的意思是基本上没有任何可用于X的辅助库,也没有图形工具包.

更新 – 答案是“通过unix socket”,特别是/tmp/.X11-unix/X0(至少在这台机器上,大概是显示0).实际上,绘制一个像素太复杂了,我想在这里得不到答案.

解决方法:

如果您想完全不使用库,则需要执行以下步骤:

>了解您所针对的平台的装配
>了解如何在不使用目标上的libc的情况下制作二进制文件.这可能涉及编写用于设置初始堆栈帧的程序集
>了解如何在不使用目标上的libc的情况下进行系统调用.这可能涉及组装.
>学习和理解网络编程以及POSIX套接字API的工作原理
>了解如何在不使用目标上的libc的情况下打开网络连接
>学习并理解X11 protocol
>实现您需要的X11协议子集
>打开与X服务器的网络连接
>告诉X服务器创建一个窗口
>与X服务器协商色彩空间
>告诉X服务器为窗口中的单个像素着色

如果要使用libc和libsocket,则只保留以下步骤(大致):

>学习和理解网络编程以及POSIX套接字API的工作原理
>学习并理解X11协议
>实现您需要的X11协议子集
>打开与X服务器的网络连接
>告诉X服务器创建一个窗口
>与X服务器协商色彩空间
>告诉X服务器为窗口中的单个像素着色

上一篇:git项目大小优化笔记,删除历史提交中的大文件


下一篇:DISPLAY变量和xhost(原创)