如何在Docker容器中运行GUI图形界面程序并能输入中文

news/2024/10/18 3:28:18/

前言


"Docker container is not VMware". 但是我发现相比于虚拟机,容器技术用于开发环境管理也是非常地nice。唯一痛点就是不能使用IDE写代码,因为容器通常是以命令行形式给我们操作的。经过研究,找到了一种方法来解决这个问题,过程曲折而艰辛而长久。本文描述了一种基于X11的命令行系统显示图形化界面,并在docker容器中应用的方法,并且体验十分native。

原理

跳过。

操作

容器环境:ubuntu18.04.

  1. 启动容器之前在宿主机终端执行命令xhost +
  2. 启动容器参数需要加上-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY;
  3. 容器中安装xclock: apt update && apt install -y x11-apps
  4. 验证前置工作是否完成:容器终端执行xclock,顺利的话你应该能看到一个时钟应用,如果没有,请尝试解决。此时,你就能使用任何带GUI的程序了,包括IDE,我用的是Goland 2022.2.5,高版本没有试过。但现在还有个问题是你不能在Goland中输入或者显示中文。
  5. 中文显示乱码是因为没有安装中文字体,关闭Goland,容器中安装一个即可:apt install fonts-wqy-microhei,现在,你能够显示中文了。
  6. 输入中文只需要在宿主机安装中文输入法即可,容器内不需要安装中文输入法,我的宿主机是ubuntu22.04和搜狗拼音输入法,请先保证宿主机的中文输入法正常使用。
  7. 容器中执行apt install fcitx -y
  8. 容器中执行service dbus restart;
  9. 容器中执行apt install gnome-control-center -y;
  10. 容器中执行gnome-language-selector,并通过它安装chinese(simplify),即简体中文支持,输入法框架选择fcitx,Apply system wide后关闭对话框。
  11. 设置环境变量,建议把下列东西加在~/.bashrc里面:
export LANG="zh_CN.UTF-8"
export LANGUAGE="zh_CN.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export LC_NUMERIC="zh_CN.UTF-8"
export LC_TIME="zh_CN.UTF-8"
export LC_COLLATE="zh_CN.UTF-8"
export LC_MONETARY="zh_CN.UTF-8"
export LC_MESSAGES="zh_CN.UTF-8"
export LC_PAPER="zh_CN.UTF-8"
export LC_NAME="zh_CN.UTF-8"
export LC_ADDRESS="zh_CN.UTF-8"
export LC_TELEPHONE="zh_CN.UTF-8"
export LC_MEASUREMENT="zh_CN.UTF-8"
export LC_IDENTIFICATION="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
  1. 重启容器或者重新进入容器终端; 如果能在终端中输入中文就行了。奇怪的是:在其他应用中,比如火狐浏览器依然没法输入中文,GoLand可以。


http://www.ppmy.cn/news/64608.html

相关文章

携带数据的Ajax POST请求

前端页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>发送ajax POST请求 看如何携带数据</title> <script type"text/javascript"> …

OBCP考点总结一

1.alter system stop server 192.168.2.64:2882 select * from __all_server Stop Server 后该 Server 的状态仍为 Active &#xff0c;但 stop_service_time的值由 0 变为 Stop Server 的时间点。 kill -15 pid/observer select * from __all_server 状态变为了 inactive…

【Linux下】线程概念

文章目录 【Linux下】线程概念理解线程线程操作接口线程和进程线程和进程的关系代码验证 线程优点线程缺点线程异常线程用途 【Linux下】线程概念 理解线程 一般的书上都是这么描述线程的 线程&#xff1a;是在进程内部运行的一个执行分支&#xff0c;属于进程的一部分&#…

基于AT89C51单片机的计算器设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87772564 源码获取 主要内容: 本设计是基于51系列的单片机进行的设计,可以完成计算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。设计过…

Sleuth和zipkin

1、Sleuth是什么 为什么会出现这个技术&#xff1f;要解决哪些问题&#xff1f; 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果&#xff0c;每一个前段请求都会形成一条复杂的分布式服务调用链路&am…

利用Python+selenium技术,实现浏览器基本操作详解,代码有详细注释

首先&#xff0c;需要安装selenium库和对应的浏览器驱动程序。以Chrome浏览器为例&#xff0c;可以使用以下命令安装selenium和chromedriver&#xff1a; pip install selenium然后&#xff0c;需要下载对应版本的chromedriver&#xff0c;并将其添加到环境变量中。下载地址&a…

MySQL基础(十六)变量、流程控制与游标

1. 变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为系统变量以及用户自定义变量。 1.1 系统变量 1.1.1 系统变量分类 变量由系统定义&#xff…

Vue Test Utils前端单元测试

含义 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。在提供了经过测试的单元的情况下&#xff0c;系统集成过程将会大大地简化。流行框架 Mocha (https://mochajs.cn/)、Jest (https://www.jestjs.cn/) Mocha Chai…