之前的文章<<CentOS7配置Console GUI/TUI程序>>介绍了在CentOS7
的Console
界面上配置GUI/TUI
可视化程序的几种方法。尽管这些GUI
程序可以简化系统的配置难度,但对于界面要求复杂的专用场景较不是很适用,比如需要支持鼠标操作等。但安装完整的一套桌面环境,对服务器的资源占用又较大,这种场景下,可以只安装X Window
和openbox
来支撑运行完整图形界面程序。
X Window
被设计为Client/Server
架构。Server
负责图形设备和外部设备的处理来显示画图和处理外设操作,而图形界面程序作为Client
只是通知Server
进行相应的操作,如画线,显示字符等等。Client
和Server
之间不要求位于同一台计算机,它们之间可以通过网络进行协议传输。Client
和Server
的角色和我们日常网络访问所说的Client
和Server
相比。一般我们日常通过SSH
登录服务器,我们所看到界面和操作外设的一端做为客户端,我们所使用的应用位于服务端。而在X Window
体系下。我们看到界面和操作外设的一端是X Server
, 而图形界面程序运行的一端是X Client
。
对于任一X Client
来说,它并不知晓其他X Client
的存在,对于他们在同一X Server
上如何排放,需要另一个组件来完成,这就是窗口管理器
, 它也是一个X Client
,只是它负责的是其他X Client
的管理, 示意图如下:
因为各个X Client
完全可以使用不同的图形库进行开发,图形风格可以完全不一样。为了使不同的图形程序风格一致,因而出现了GNOME
和KDE
等桌面环境,其上的图形程序共用相同的图形库等,因而呈现出一致的展示风格。
对于文章开头提到的需求,只是为了在console
界面中使用有限个数图形应用程序,没有必要使用庞大的桌面环境,只需要安装X Server
和一个窗口管理器。openbox
就是一个非常轻量、可灵活配置的容器管理器。
下面我们在CentOS7
上进行实践。
首先安装X Window
相关组件和openbox
:
1 | yum install -y xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-xinit xorg-x11-drivers |
正常情况下,console
界面下初始化运行的是getty
程序,在CentOS7
下为agetty
。之前的文章中介绍了几种相应自动运行程序的方法:
- 将GUI程序作为getty程序执行
- 将GUI程序替换login程序执行,这种方式需要跳过getty程序读取用户名的步骤
- 将GUI程序作为shell程序执行,这种方式需要完成自动登录,跳过密码校验之前的步骤
除了以上这些方法之外,我们还可以在bashrc
中自动启动程序。
因为我们要启动X Server
环境,需要使用startx
脚本,因而采用这种方式。
修改文件/root/.bashrc
, 添加如下内容:
1 | TTY=${TTY:-$(tty)} |
跳过root
自动登录的部分和之前文章中介绍的一致。修改完成后,重启我们的CentOS
,可以看到灰黑色的openbox
界面:
鼠标右击可以看到openbox
的菜单:
openbox
的配置相当灵活,可以配置文件进行修改和配置。可以参考文章:
https://linuxtoy.org/archives/openbox-getting-started-guide.html
openbox
可以配置自动加载应用程序,这样就可以实现Console
界面上自动运行我们所开发的图形界面程序了。
我们创建文件~/.config/openbox/autostart
, 添加如下内容运行一个示意的XClock
:
1 | /usr/bin/xclock & |
重新启动CentOS7
, 界面如下,自动运行了xclock
程序:
参考:
- https://docs.huihoo.com/homepage/shredderyin/x.html
- https://www.cnblogs.com/pugang/p/13795956.html
- https://shaocheng.li/posts/2012/02/27/
- https://zh-liang-cn.github.io/2011/12/15/x-window-system/
- http://blog.chinaunix.net/uid-1827018-id-3905114.html
- http://kuring.me/post/x_window/
- https://gohalo.me/post/linux-xwindows-introduce.html
- https://www.initroot.com/linuxintroduction/linuxxwindow.html
- https://imtx.me/blog/introduce-wayland-1/
- https://imtx.me/blog/introduce-wayland-2/
- http://openbox.org/wiki/Help:Getting_started#Starting_Openbox_without_the_graphical_log_in
- http://openbox.org/wiki/Help:Autostart
- http://openbox.org/wiki/Help:Menus
- https://linuxtoy.org/archives/openbox-getting-started-guide.html
- https://superuser.com/questions/1559357/what-does-xdg-stand-for
- https://wiki.archlinux.org/title/desktop_entries
- https://goteleport.com/blog/x11-forwarding/