x11是什么?
x11是一个协议。x11是x协议,版本号11。
x11用来干什么?
x11是类UNIX操作系统用来实现图形界面的。
x协议由xserver和xclient组成:
- xserver负责包括你的显示器、显卡、鼠标、键盘等交互外设。
- xclient负责处理逻辑。
个人觉得这与我们传统的c/s模式恰恰相反,传统的服务器负责数据的管理,客户机负责完成与用户的交互任务。
xserver把鼠标键盘的动作(x事件)通过x协议传给xclient,而xclient把要显示的内容通过x协议传给xserver。
x11的效率问题
x协议可以基于TCP/IP传输。xserver和xcient可以不是同一个OS。这很符合类UNIX操作系统多用户的特性。
但是这样也造成了效率上的问题,就算不占有带宽也还是影响了协议栈。
X11其实是拥有压缩功能的,可以将显示数据进行压缩后再传输,这样可以一定程度上提高效率。
xserver对于本地的xclient会使用Unix domain sockets来代替TCP协议,Unix domain socket的速度相比于内部回环网络来说快好几倍。
一些技术与x11的关系
各种类UNIX操作系统与我们用win10不同,他们本身是不带图形界面的。没有图形界面他们也能通过命令行正常使用。
win10的内核里就有图形界面,而类UNIX操作系统内核不带。
对于类UNIX操作系统,他们的图形界面只是一个用户态软件而已不是必须的。
xfree64是xserver的实现,xorg基于xfree64。
为了让开发者更加容易开发xclient提供了xlib,然而对于开发者xlib仍然不够简便。
于是在xlib上又诞生了qt和gtk,qt是直接使用Xlib库的,gtk则使用了再次封装了的gdk和glib。
qt与gtk都很优秀,在他们之上开发者分别开发出了kde与gnome桌面。
kde和gnome是集成了窗口管理器及一些应用程序的套件。
其他的x application则跑在这些窗口管理器里。
x11forwarding的使用
前面提到了xserver和xcient可以不是同一个OS,不得不说一下x11forwarding。
# vi /etc/ssh/sshd_config
X11Forwarding Yes
# systemctl restart sshd
然后ssh -Y [username]@[ip]
远程连上机器后就可以在本地运行远程的x application了。
总结
x11可能效率不高,但是蛮有意思的,期待我以后的开发中能用到他。