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

前言


"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可以。

后记

2023-12-02
文章开头我说的用来做开发环境合适,本身没什么问题。但是要注意要使用Volums将存储和环境本身隔离,还有尽量不要在容器内部做出太多修改,因为一旦做了修改(对环境内容产生增删的操作,如apt install),本身的体积就会增大,最后导致容器占用磁盘空间超出想象。docker是被设计来用于部署的,将它用于别的目的当然会产生其他后果。当然,本文的主题是用于显示UI界面,那部署UI应用也没问题就是了。

2024-02-01
使用最新版Goland(2023.3.3)打开项目可能闪退
本来以为和插件有关,但是仅用了所有插件打开某个项目还是还是闪退,不知道为什么,旧版2022版本的不会。但是有一个骚操作可以用,就是直接打开项目目录的上级目录。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值