一、ubuntu安装微信介绍
一直都不明白腾讯没有适配ubuntu下的微信是为啥。因为工作和系统的原因,我笔记本是ubuntu22.04.4+win10ltsc
但是其实经常用到的,就是ubuntu,自从用了ubuntu后,基本上win就不用了,现在更是直接把大头的内存都扩容到ubuntu了。
但是在Ubuntu下安装微信,其实很麻烦的。
安装微信无非就三种:
- 要么安装原生微信,ukylin,但是这个功能太少了,强迫症不喜欢。
- 比较好一点的用wine(wine, deepin-wine, ukylin-wine)
- 总有大佬会弄成docker镜像的。
尝鲜下docker,毕竟别人都配好了,最多挂载下路径,有问题就删容器就完事了。
二、本次实践介绍
- 本次实践简介
本次实践部署环境为个人测试环境
- 本地环境规划
本次实践环境规划:下载镜像dockurr/windows:latest,通过docker-cli或者docker compose启动容器
镜像命名 | IP地址 | 容器镜像版本 | 操作系统版本 |
localhost | latest | ubuntu 22.04 |
三、检查本地Docker环境
- 检查本地Docker版本
检查Docker版本:docker version
root@WellDone:/home/goodjob# docker version
Client: Docker Engine - Community
Version: 25.0.0
API version: 1.44
Go version: go1.21.6
Git commit: e758fe5
Built: Thu Jan 18 17:09:49 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 25.0.0
API version: 1.44 (minimum version 1.24)
Go version: go1.21.6
Git commit: 615dfdf
Built: Thu Jan 18 17:09:49 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.27
GitCommit: a1496014c916f9e62104b33d1bb5bd03b0858e59
runc:
Version: 1.1.11
GitCommit: v1.1.11-0-g4bccb38
docker-init:
Version: 0.19.0
GitCommit: de40ad0
root@WellDone:/home/goodjob#
- 检查Docker服务状态
检查Docker服务状态,确保Docker服务正常运行。
systemctl status docker
root@WellDone:/home/goodjob/Downloads# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-01-24 08:54:31 CST; 1 day 4h ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 1549 (dockerd)
Tasks: 65
Memory: 419.5M
CPU: 38.874s
CGroup: /system.slice/docker.service
├─ 1549 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
├─ 2010 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 6379 -container-ip 172.17.0.2 -container-port 6379
├─ 2016 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 6379 -container-ip 172.17.0.2 -container-port 6379
├─ 2029 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5432 -container-ip 172.17.0.3 -container-port 5432
├─ 2036 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 5432 -container-ip 172.17.0.3 -container-port 5432
├─123083 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8888 -container-ip 172.17.0.4 -container-port 8080
└─123095 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8888 -container-ip 172.17.0.4 -container-port 8080
1月 24 08:54:31 WellDone dockerd[1549]: time="2024-01-24T08:54:31.067895045+08:00" level=info msg="API listen on /run/docker.sock"
1月 24 08:54:31 WellDone systemd[1]: Started Docker Application Container Engine.
1月 24 16:13:48 WellDone dockerd[1549]: time="2024-01-24T16:13:48.185008219+08:00" level=info msg="ignoring event" container=8ad99af82d8a41dd661d>
1月 24 16:13:48 WellDone dockerd[1549]: time="2024-01-24T16:13:48.189484205+08:00" level=warning msg="ShouldRestart failed, container will not be>
1月 24 21:58:08 WellDone dockerd[1549]: time="2024-01-24T21:58:08.024915139+08:00" level=info msg="ignoring event" container=27fd28e2993f31b170b8>
1月 24 21:58:08 WellDone dockerd[1549]: time="2024-01-24T21:58:08.029986730+08:00" level=warning msg="ShouldRestart failed, container will not be>
1月 25 10:46:16 WellDone dockerd[1549]: time="2024-01-25T10:46:16.329180722+08:00" level=info msg="Container failed to exit within 10s of signal >
1月 25 10:46:16 WellDone dockerd[1549]: time="2024-01-25T10:46:16.350757439+08:00" level=info msg="ignoring event" container=b1223add00f36bbb3246>
1月 25 10:49:21 WellDone dockerd[1549]: time="2024-01-25T10:49:21.993755983+08:00" level=info msg="Container failed to exit within 10s of signal >
1月 25 10:49:22 WellDone dockerd[1549]: time="2024-01-25T10:49:22.015822650+08:00" level=info msg="ignoring event" container=edb0e153b45dbe62acd8>
lines 1-28/28 (END)
四、部署wechat镜像
- 下载Ward镜像
docker pull bestwu/wechat:latest
root@HEJIAJIN-FX506HE:/docker_software/docker-compose/docker-tools# docker pull bestwu/wechat
Using default tag: latest
latest: Pulling from bestwu/wechat
f21eee950c89: Pull complete
11ce96be0dbe: Pull complete
213b37605fda: Pull complete
fb5f4607d644: Pull complete
996bef3d98a0: Pull complete
6181aef875e7: Pull complete
892cf94c8e7a: Pull complete
Digest: sha256:f0a3b04aae119ed2d7bb9e6f1f8e5a3cf39a435b028fd9ddd733680fd5639693
Status: Downloaded newer image for bestwu/wechat:latest
docker.io/bestwu/wechat:latest
之后,要使我们可以访问到图形化的wechat,这时候涉及到了一个命令xhost
那什么是xhost?
xhost是一个用来控制服务器图形界面访问权限的工具。服务器是跑在类Unix操作系统上的软件,它管理和提供图形界面服务。xhost允许用户指定哪些用户和主机可以显示图形界面上的窗口。
到时候我们的docker启动后还要执行以下xhost +,因为我们这里是个人的测试环境,所以没有指定用户名和主机名
xhost + 的作用
使用xhost+命令可以让任何用户从任何主机连接到服务器。这个命令会关闭X服务器的访问控制,这意味着任何人都没有限制地访问你的服务器。出于安全考虑,这通常不是推荐的操作,因为它会使你的会话对任何人开放,并可能导致安全风险。
正确的用法通常是使用xhost加上特定的用户名或主机名来允许访问,例如:
xhost +SI:localuser:username
##这条命令将允许本地用户username访问服务器。
或者只允许特定的远程主机访问:
xhost +hostname
##这条命令允许来自hostname的用户访问服务器。
那么xhost与Docker是什么关系?
在使用Docker容器进行图形界面应用的开发时,有时需要将容器内运行的图形应用显示到宿主机的屏幕上。Docker容器通常是隔离的,并没有直接访问宿主机的服务器的权限。
要实现这一点,你需要在宿主机上允许容器访问服务器。一个常见的做法是在宿主机上运行 xhost + 来禁用访问控制,然后在启动 Docker 容器时,将服务器的Unix套接字共享给容器,这通常通过挂载一个卷来实现:
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw docker_image
-e DISPLAY 设置环境变量 DISPLAY,让容器知道如何连接服务器。
-v /tmp/.X11-unix:/tmp/.X11-unix:rw 将宿主机的服务器 Unix 套接字目录挂载到容器中,这样容器就可以通过这个套接字与宿主机的服务器通信。
为了安全起见,在完成图形界面应用的运行之后,应该通过运行 xhost - 命令来重新启用访问控制。
要注意的是,这种方法存在安全隐患,因为它允许任何应用接入你的服务器。更安全的方法是只授权特定的Docker容器访问服务器,而不是使用 xhost + 完全关闭访问控制。
- 创建容器
使用docker快速创建wechat的容器。
完整创建过程:
1.使用docker-cli启动一个wechat的容器。
docker run -d --name wechat\
--device /dev/snd\
--ipc=host\
-v /tmp/.X11-unix:/tmp/.X11-unix\
-v /docker_software/wechat/WeChatFiles:/WeChatFiles\
-v /docker_software/wechat:/he\
-e DISPLAY=unix$DISPLAY\
-e XMODIFIERS=@im=ibus\
-e QT_IM_MODULE=ibus\
-e GTK_IM_MODULE=ibus\
-e GID=`id -g`\
-e UID=`id -u`\
bestwu/wechat
2.使用docker-compose启动一个wechat的容器
version: '3.9'
services:
wechat:
image: bestwu/wechat
user: '`\'
environment:
- UID=`id
- GID=`id
- GTK_IM_MODULE=ibus\
- QT_IM_MODULE=ibus\
- XMODIFIERS=@im=ibus\
- DISPLAY=unix$DISPLAY\
volumes:
- '/docker_software/wechat:/he\'
- '/docker_software/wechat/WeChatFiles:/WeChatFiles\'
- '/tmp/.X11-unix:/tmp/.X11-unix\'
ipc: host\
devices:
- /dev/snd\
container_name: wechat\
注:
1. 上面的挂载路径需要自己创建。如
- '/docker_software/wechat:/he\'
- '/docker_software/wechat/WeChatFiles:/WeChatFiles\'
2. 如果你是ibus输入法,将代码中的fcitx改成ibus!,如果你是搜狗,就是fcitx
- GTK_IM_MODULE=ibus\
- QT_IM_MODULE=ibus\
- XMODIFIERS=@im=ibus\
-------------------------
- GTK_IM_MODULE=fcitx\
- QT_IM_MODULE=fcitx\
- XMODIFIERS=@im=fcitx\
3.容器启动前,记得执行xhost +,创建容器后,就会自动弹窗微信登陆框
4.常见问题
a.Docker的微信后,字体的dpi不对,因为它这个其实是源自于wine的微信,wine也是有同样的问题的。
进入容器内部,docker exec -it wechat /bin/bash
切换到wechat用户su wechat
输入命令
WINEPREFIX=~/.deepinwine/Deepin-WeChat/ deepin-wine winecfg
在弹出窗口中,显示选项,找到屏幕分辨率,改成200dpi
b.不小心退了微信,打不开微信,那就重启容器即可
docker restart wechat
- 检查容器运行状态
检查容器的运行状态,确保服务的正常运行。
docker ps
root@WellDone:/home/goodjob# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63f383e80323 bestwu/wechat "/entrypoint.sh" 27 minutes ago Up 27 minutes wechat
五、访问wechat
启动容器后,会自动弹窗微信登陆
六、wine-wechat安装(个人使用觉得最好)
1.首先打开终端,更新软件源
sudo apt-get update
2运行下面的命令,添加deepin-wine仓库。
wget -O- https://deepin-wine.i-m.dev/setup.sh | sh
3.sudo apt-get install com.qq.weixin.deepin
安装完,注销一下登陆就会看到logo。个人认为,这是ubuntu的微信最好用的一个,已知截图不能用,公众号点开会黑页,但是你设置下默认浏览器打开文章就行。