Docker中桌面程序研发

由于经常工作的环境基本上是在Windows系统上, 如果需要研发一些Linux桌面程序就必须安装虚拟机, 然后在虚拟机中研发。 由于平时工作使用docker较多, 想想能不能使用docker进行桌面程序研发呢

要想做到这个也不复杂, 毕竟Linux有大名鼎鼎的X Window System(也称X11或X)。

X Window System介绍:

X Window System(通常简称为 X11)是一个用于在 UNIX 和类 UNIX 系统上管理图形用户界面(GUI)的窗口系统。X11 是最常见的开源窗口系统,它提供了基本的绘图和用户交互功能,使得用户能够在图形环境中运行应用程序。

X11 是基于CS架构的窗口系统。在这个架构中,X Server负责处理图形显示和输入设备(如键盘、鼠标)的事件,而应用程序则作为X Client与 X Server通信。

X11 使用网络协议来处理客户端和服务器之间的通信,这使得 X 客户端可以在本地或远程机器上运行,并通过网络连接到 X 服务器

常见的X Server:

  1. X.Org Server: X.Org Server 是当前最常用的 X 服务器,也是 X Window System 的标准实现。它支持多种 UNIX 和类 UNIX 系统。
  2. Xephyr: Xephyr 是一个轻量级的 X 服务器
  3. Wayland: Wayland 是一个现代的显示服务器协议,替代了传统的 X Window System,但它仍然可以通过 XWayland 兼容层运行 X11 应用程序。

常见的X Client:

  1. Terminal Emulators: 如 GNOME Terminal、Konsole、Xterm 等,用于在图形界面中打开终端窗口。
  2. Window Managers: 如 GNOME Shell、KDE Plasma、i3、Openbox 等,用于管理窗口、布局和桌面环境。
  3. Text Editors:如 gedit、Vim、Emacs 等,用于编辑文本文件的图形界面应用程序。

前置条件

环境搭建

  1. 首先在Windows上安装X Server, 笔者是安装的VcXsrv, 还有其他如Cygwin/XXming等。

  2. Linux 环境搭建

    拉取镜像:
    docker pull ubuntu:22.04

    启动容器:

    docker run -itd -e DISPLAY=host.docker.internal:0.0 -v /c/xxx:/mnt/xxx --name qttest ubuntu:22.04 /bin/bash

    关键是环境变量DISPLAY设置为宿主机ip及对应的参数。

    参数:0.0表示x client应该在对应服务的x server的第几号server的第几号screen.间隔。 启动x server时可以看到该参数。

    安装ca-certificates: apt update && apt install ca-certificates

    更新为清华源: 打开ubuntu清华源, 找到对应版本替换到/etc/apt.source.list中, 记得备份。 最后apt update

    安装XCB:

    Xlib 是一个常见的用于编写 X Client程序的库,它提供了一组函数和工具,使开发者可以方便地与 X Server通信。

    XCB 库被设计为 Xlib 的替代品,XCB 提供了更好的性能和扩展性

    apt install libxcb-*

  3. QT环境安装

    直接在清华镜像下载qt-unified-linux-x64-online.run在线安装包, 通过挂载目录复制到Linux下,执行安装。

    安装过程中出现如下错误及解决办法:

    error while loading shared libraries: libxkbcommon-x11.so.0: cannot open shared object file: No such file or directory

    apt-get install libxkbcommon-x11-0

    error while loading shared libraries: libxcb-xxx: cannot open shared object file: No such file or directory

    apt install libxcb-*

    error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

    apt install libx11-xcb1

    error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory

    apt install libfreetype6

    error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory

    apt install libfontconfig1

    error while loading shared libraries: libdbus-1.so.3: cannot open shared object file: No such file or directory

    apt-get install libdbus-1-3

  4. vscode开始研发

    vscode 安装微软研发的 docker 插件,然后在侧边栏的docker页选择容器进行附加。新建cmake项目, 设置QT依赖:

    
     set(CMAKE_CXX_STANDARD 17)
     set(CMAKE_CXX_STANDARD_REQUIRED ON)
    
     set(CMAKE_AUTOUIC ON)
     set(CMAKE_AUTOMOC ON)
     set(CMAKE_AUTORCC ON)
    
    
     list(APPEND CMAKE_PREFIX_PATH  
         "/opt/Qt/5.15.2/gcc_64/lib/cmake" 
     )
    
     find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets)
    
     file(GLOB SOURCES *.cpp *.cc *.hpp *.h) #  GLOB_RECURSE
    
     set(CMAKE_INCLUDE_CURRENT_DIR ON)
    
     add_executable(${PROJECT_NAME}  ${SOURCES})
    
     target_link_libraries(${PROJECT_NAME} 
         Qt5::Widgets 
     )
    

常见问题

  1. Failed to find "GL/gl.h" in "/usr/include/libdrm"

    apt install mesa-common-dev

    Mesa 是一个开源的图形库,提供了 OpenGL 和 Vulkan 的实现

  2. Could not load the Qt platform plugin "xcb"

    apt install libxcb-*

  3. error while loading shared libraries: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

    apt install libgthread-2.0-0

参考链接

  1. X Window System介绍
posted @   汗牛充栋  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示