├── src ├── .DirIcon ├── wechat.png ├── etc │ ├── os-release │ ├── .kyact │ ├── lsb-release │ └── LICENSE ├── wechat.desktop └── AppRun ├── distros.md └── README.md /src/.DirIcon: -------------------------------------------------------------------------------- 1 | wechat.png -------------------------------------------------------------------------------- /src/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KZ25T/wechat-appimage/HEAD/src/wechat.png -------------------------------------------------------------------------------- /src/etc/os-release: -------------------------------------------------------------------------------- 1 | NAME="Kylin Linux Advanced Server" 2 | VERSION="V10 (Tercel)" 3 | ID="kylin" 4 | VERSION_ID="V10" 5 | PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)" 6 | ANSI_COLOR="0;31" 7 | -------------------------------------------------------------------------------- /src/wechat.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=wechat 3 | Exec=wechat %U 4 | StartupNotify=true 5 | Terminal=false 6 | Icon=wechat 7 | Type=Application 8 | Categories=Utility; 9 | Comment=微信桌面版 10 | -------------------------------------------------------------------------------- /src/etc/.kyact: -------------------------------------------------------------------------------- 1 | systemuuid=25ef0280-ec82-42b0-8fb6-10adccc67c02 2 | netmac=00:07:3e:9c:2e:43 3 | registernum=WCYU-3AS2-Q7LP-HWH6-SJPZ 4 | serialnum=27734012 5 | harddisk=WDC-PC-SN530-SDBPNPZ-512G_204485805972 6 | -------------------------------------------------------------------------------- /src/etc/lsb-release: -------------------------------------------------------------------------------- 1 | DISTRIB_ID=Kylin 2 | DISTRIB_RELEASE=V10 3 | DISTRIB_CODENAME=kylin 4 | DISTRIB_DESCRIPTION="Kylin V10 SP1" 5 | DISTRIB_KYLIN_RELEASE=V10 6 | DISTRIB_VERSION_TYPE=enterprise 7 | DISTRIB_VERSION_MODE=normal 8 | -------------------------------------------------------------------------------- /src/etc/LICENSE: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA1 3 | 4 | TO:麒麟软件内部版本 5 | SERIAL:100000 6 | TERM:2021-08-29 7 | CLASS:desktop 8 | VERSION:Desktop 9 | PLATFORM:x86_64 10 | OSNAME:Kylin V10 SP1 11 | -----BEGIN PGP SIGNATURE----- 12 | Version: GnuPG v2.0.14 (GNU/Linux) 13 | 14 | iJwEAQECAAYFAmEDwk8ACgkQLRr+uL6cqPu6xAP/QRty0END7q0VxbbwgoKYefHk 15 | VJF9F7SFSU5FGVUyR0pLmKzAMAmi+9xhbGw5tGp2XLIBOJHayK6TGhdpgvP+wT6s 16 | 0QLrh3c7HZhM0maoo6ZNR07bYzXXPcrMt6qTgaSRQnV+zfARn9+e2Ub5xfBfphtk 17 | KHL1Nd4NRj0aICyjlys= 18 | =6SEp 19 | -----END PGP SIGNATURE----- 20 | -------------------------------------------------------------------------------- /distros.md: -------------------------------------------------------------------------------- 1 | # 适配目录 2 | 3 | 目前已测试 Debian/Arch/RHEL 系发行版。 4 | 5 | ## Debian 系 6 | 7 | - [x] **Debian** 12 可直接运行。 8 | - [x] **Kali Linux** 可直接运行。 9 | - [x] **Ubuntu** 24.04 按如下操作后可运行: 10 | - 把下面内容写入 `/etc/apparmor.d/bwrap`: 11 | 12 | ```text 13 | abi , 14 | include 15 | 16 | profile bwrap /usr/bin/bwrap flags=(unconfined) { 17 | userns, 18 | 19 | # Site-specific additions and overrides. See local/README for details. 20 | include if exists 21 | } 22 | ``` 23 | 24 | - 然后运行 `sudo systemctl reload apparmor` 之后即可。 25 | - 注:Ubuntu 这个操作系统很奇怪,相比于标准 Debian,魔改的地方太多,不见得所有人都能按照以上方法运行好。如果不行请自己查询修改。 26 | - 注2:Ubuntu 的 fuse 可能会出现问题,请参考 [README 的 5.3](./README.md#53-若无法使用-fuse3) 27 | 28 | ## Arch 系 29 | 30 | - [x] **Arch Linux** 可直接运行。 31 | - 请检查是否有 `/usr/lib/libnss3.so`,否则 `sudo pacman -S nss` 32 | - 请检查是否有基础 Qt 库:`/usr/lib/qt`,否则 `sudo pacman -S qt5-base` 33 | - 因为 Arch Linux 比较灵活,所以是否还有其他默认不带的库我不太了解。如有遇到请自行修复。 34 | - [x] **Manjaro** 可直接运行。 35 | 36 | ## RHEL 系 37 | 38 | - [x] **Fedora** 40 可直接运行。 39 | - [ ] **CentOS Stream** 过气发行版,还没给 livecd,没测 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 微信 AppImage 2 | 3 | 使用 AppImage 运行 Linux 原生微信,使用方法非常简单,支持多种操作系统。 4 | 5 | [TOC] 6 | 7 | ## 1 项目特色 8 | 9 | - [x] **使用方便**,没有配置问题,下载即可运行,删除即可卸载。 10 | - [x] **免权限**,从下载到运行,无需 sudo 权限。 11 | - [x] **不修改系统**,无需修改系统配置文件(`/etc/lsb-release`等) 12 | - [x] **不乱放文件**,限制读写目录,以防在操作系统里到处乱放文件 13 | - [x] **体积小**,最小只需 47MB,flatpak 等方案需要多达 GB 级别。 14 | - [x] **适配多**,Debian/RHEL/Arch/Gentoo 等发行版均可使用。 15 | 16 | 其他安装方法的缺点: 17 | 18 | - 😕 **使用麻烦**,原版需要安装 deb 包,无法直接卸载;flatpak 等方式配置复杂。 19 | - 😕 **需要 root 权限**,需要 sudo 才能安装。 20 | - 😕 **乱改系统**,原版微信有发行版检测,需要修改一些系统关键配置。 21 | - 😕 **乱放文件**,家目录、`/var`目录都有放置。 22 | - 😕 **体积大**,需要几百 MB 存储空间。 23 | - 😕 **适配少**,只有 deb 包,没有 rpm/pkg 等安装包。 24 | 25 | ## 2 发行版适配 26 | 27 | 目前该项目已测试并支持 Debian/Arch/RHEL 系发行版。详细适配情况或其他操作见[适配目录](./distros.md)。 28 | 29 | ## 3 快速开始 30 | 31 | 本节仅针对 `x86_64` 架构,其他架构请自行打包。 32 | 33 | ### 3.1 检查运行环境 34 | 35 | 1. 检查[适配目录](./distros.md),检查自己的发行版是否支持,或者是否需要额外的操作。未经测试的发行版可能需要自行修复一些问题。欢迎经过测试后向本仓库提起 issue,我将添加到适配目录。 36 | 2. 操作系统需要有 bwrap 命令(常见发行版都有),若没有请参考[此网站](https://command-not-found.com/bwrap)。 37 | 3. 检查操作系统是否有 XDG 用户目录(常见发行版都有): 38 | - 查看 `~/.config/user-dirs.dirs`(必须有这个文件) 39 | - 上述文件里面要有 `XDG_DESKTOP_DIR`、`XDG_DOWNLOAD_DIR` 和 `XDG_DOCUMENTS_DIR`(桌面、下载和文档) 40 | 41 | ### 3.2 获取 AppImage 文件并运行 42 | 43 | 1. 下载:打开[Releases](https://github.com/KZ25T/wechat-appimage/releases),依说明下载符合你的需求的最新版本的文件。若你不知道下载哪一个,请下载 `wechat-x86_64.AppImage` 44 | 2. 修改权限:找到该文件下载路径,添加可执行权限:`chmod a+x wechat-x86_64.AppImage` 45 | 3. 运行:从命令行运行 `./wechat-x86_64.AppImage`,或双击该文件运行。 46 | 47 | > 若不能运行或需要其他帮助请参阅[5.3节](#53-常见问题解决) 48 | 49 | ### 3.3 常用文件与目录 50 | 51 | 在用户目录下,微信涉及如下目录的读写: 52 | 53 | 1. 桌面、下载、文档,参考[3.1节](#31-检查运行环境)的第三条。如果您需要上传或下载文件,那么建议下载到此目录。 54 | 2. 微信数据库文件(放在 `文档/xwechat_files` 下),除非你明确知道为什么要删除它,否则不要删除。 55 | - 该目录结构和 Windows 的微信相似。 56 | - 微信聊天记录在这里。 57 | - 上传或下载的文件也在这里:`文档/xwechat_files/wxid_XXXXXX/msg/file` 58 | - 在微信的 bwrap 环境中,它的位置是 `~/xwechat_files` 59 | 3. 微信配置文件(`~/.xwechat`),这个删除应该没太大影响。 60 | 4. 字体配置文件和(可能涉及的)显示配置文件。 61 | 62 | ## 4 从本仓库构造 AppImage 63 | 64 | 如果需要修改 AppRun 里的内容,或者架构不符,你可以按照如下方法自行打包 AppImage 运行。 65 | 66 | > 注:本说明暂未给 x86_64 以外的架构以完整支持。 67 | 68 | ### 4.1 下载原包 69 | 70 | 1. 下载本仓库。 71 | 2. 下载一个微信 Linux 版本的 deb 包,下载地址: 72 | 73 | - [吾爱破解](https://www.52pojie.cn/thread-1896902-1-1.html),或 74 | - [银河麒麟deb仓库](https://archive2.kylinos.cn/deb/kylin/production/PART-V10-SP1/custom/partner/V10-SP1/pool/all/),搜索 `wechat-beta` 75 | 76 | 3. 下载“优麒麟微信”deb 包: 77 | 78 | - [优麒麟微信](https://www.ubuntukylin.com/applications/106-cn.html) 79 | - 这个包只需要提取 `libactivation.so` 备用。 80 | 81 | ### 4.2 自行打包 82 | 83 | 解包第一个 deb,移植文件: 84 | 85 | ```bash 86 | # pwd 为仓库根目录 87 | dpkg -X your_wechat.deb /tmp/out 88 | cp -r /tmp/out/opt src # 大部分文件 89 | mkdir -p src/usr/lib # 把第二个微信的 libactivation.so 挪进来 90 | ``` 91 | 92 | 安装 appimagetool(自己上网搜) 93 | 94 | 打包 appimage: 95 | 96 | ```bash 97 | # pwd 为仓库根目录 98 | appimagetool ./src 99 | ``` 100 | 101 | 可以取得 `wechat-x86_64.AppImage` 102 | 103 | ### 4.3 其他架构的注意事项 104 | 105 | 其他架构可能需要修改 AppRun 的第 72 行。 106 | 107 | ## 5 高级用法 108 | 109 | ### 5.1 安装运行 110 | 111 | 如果您计划长期使用本 AppImage,那么我推荐在这里安装运行。 112 | 113 | ```bash 114 | # 安装(可以加 sudo 安装到系统目录) 115 | ./wechat-x86_64.AppImage --install 116 | # 卸载(可以加 sudo 从系统目录卸载) 117 | wechat --remove 118 | ``` 119 | 120 | > 普通用户直接安装会装到 `~/.local` 下,加上 `sudo` 会安装在 `/usr/local` 下。 121 | > 卸载时是否使用 `sudo` 和安装时应保持一致。 122 | 123 | 安装后你可以在桌面添加类似的启动器图标。 124 | 125 | 安装过程只涉及三个文件(或): 126 | 127 | ```bash 128 | # 若使用 sudo,把 ~/.local 换成 /usr/local 129 | ~/.local/bin/wechat 130 | ~/.local/share/icons/hicolor/256x256/apps/wechat.png 131 | ~/.local/share/applications/wechat.desktop 132 | ``` 133 | 134 | 如果想要在桌面上加上图标,只需要把第三个文件复制到桌面。 135 | 136 | ### 5.2 更多功能 137 | 138 | ```bash 139 | # 帮助 140 | ./wechat-x86_64.AppImage --help 141 | # 进入 bwrap 的 shell(bash) 142 | ./wechat-x86_64.AppImage --debug 143 | # 关闭微信进程(早期版本无法退出,现在应该不需要这个功能了) 144 | ./wechat-x86_64.AppImage --kill 145 | # 检查更新(显示下载链接) 146 | ./wechat-x86_64.AppImage --update 147 | # 禁止微信读取桌面 148 | ./wechat-x86_64.AppImage --no-user-desktop 149 | # 禁止微信读取下载 150 | ./wechat-x86_64.AppImage --no-user-download 151 | # 禁止微信读取文档 152 | ./wechat-x86_64.AppImage --no-user-documents 153 | # 禁止微信读取 /run 下的文件(可能会导致不稳定) 154 | ./wechat-x86_64.AppImage --no-run-file 155 | # 安装图标、桌面文件、应用 156 | ./wechat-x86_64.AppImage --install 157 | # 卸载图标、桌面文件、应用 158 | wechat --remove 159 | # 解包文件(这属于 appimage 的功能,参考 appimage 文档,其他 appimage 功能不再列出) 160 | ./wechat-x86_64.AppImage --appimage-extract 161 | ``` 162 | 163 | ### 5.3 常见问题解决 164 | 165 | #### 5.3.1 AppImage 的问题 166 | 167 | 如果您的发行版未安装 `libfuse3`,或因为权限、容器等限制无法加载 `fuse` 模块,那么本微信将不能直接以 AppImage 运行。 168 | 169 | 您可以尝试在命令后面加上 `--appimage-extract-and-run`;如有其它选项,则不需要改变。如: 170 | 171 | ```bash 172 | ./wechat-x86_64.AppImage --appimage-extract-and-run 173 | ./wechat-x86_64.AppImage --appimage-extract-and-run --help 174 | ./wechat-x86_64.AppImage --appimage-extract-and-run --no-run-file --no-user-download 175 | ``` 176 | 177 | #### 5.3.2 bwrap 的问题 178 | 179 | 在 Ubuntu 中,bwrap 默认可能不允许创建用户空间。其他发行版暂未发现该情况,如果有 bwrap 的报错,请尝试在[适配目录](./distros.md)里参考 Ubuntu 的解法。 180 | 181 | #### 5.3.3 挂载目录的问题 182 | 183 | 参考 bwrap 报错时有哪些未成功挂载的目录,您可以尝试编辑文件重新自行打包解决: 184 | 185 | ```bash 186 | $ cd /tmp 187 | $ /path/to/wechat-x86_64.AppImage --appimage-extract 188 | $ vim squashfs-root/AppRun 189 | # 尝试寻找并去除未成功挂载的目录 190 | $ appimagetool squashfs-root 191 | # 你需要自己下载 appimagetool 192 | # 最好提前在 GitHub 下好 appimagetool 的 runtime-x86_64,免得每次操作都要重新下载这个文件。 193 | # 此时的命令为 appimagetool --runtime-file /path/to/runtime-x86_64 194 | $ ./wechat-x86_64.AppImage 195 | # 尝试新打包的 196 | ``` 197 | 198 | #### 5.3.4 链接库的问题 199 | 200 | 可能有些发行版缺少链接库,你可以尝试如下方式找到未安装的库并安装: 201 | 202 | ```bash 203 | $ ./wechat-x86_64.AppImage --debug 204 | $ ldd /opt/wechat-beta/wechat | grep "not found" 205 | # 尝试寻找缺少的库并安装(自行搜索安装方法) 206 | ``` 207 | 208 | ## 6 声明 209 | 210 | 本仓库仅供学习交流使用,且未经过严格测试,使用本仓库造成的一切后果由使用者负责。 211 | 212 | ## 7 参考 213 | 214 | 参考:[依云's Blog - 使用 bwrap 沙盒](https://blog.lilydjwg.me/2021/8/12/using-bwrap.215869.html) 215 | 216 | 参考:[wechat-beta-bwrap](https://github.com/lfift/wechat-beta-bwrap) 217 | -------------------------------------------------------------------------------- /src/AppRun: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | export PATH="/opt/wechat-beta:$PATH" 3 | export LD_LIBRARY_PATH="/opt/wechat-beta:/usr/lib" 4 | if locale -a | grep -iq "zh_CN.utf8"; then 5 | export LANG=zh_CN.utf8 6 | elif locale -a | grep -iq "zh_CN.UTF-8"; then 7 | export LANG=zh_CN.UTF-8 8 | fi 9 | EXEC="wechat" 10 | RUNFS=/run/user/$UID 11 | BWRAP_FILE_APPEND="" 12 | 13 | OPT_HLP=false 14 | OPT_DBG=false 15 | OPT_KIL=false 16 | OPT_UPD=false 17 | OPT_NUDES=false 18 | OPT_NUDOW=false 19 | OPT_NUDOC=false 20 | OPT_NRF=false 21 | OPT_IST=false 22 | OPT_REM=false 23 | OPT_FAL=false 24 | 25 | OPTIONS=$(getopt -o '' -l help,debug,kill,update,no-user-desktop,no-user-download,no-user-documents,no-run-file,install,remove -- "$@") 26 | if [ $? -ne 0 ]; then 27 | echo "Invalid argument." >&2 28 | OPT_HLP=true 29 | OPT_FAL=true 30 | fi 31 | 32 | eval set -- "$OPTIONS" 33 | option_count=0 34 | while true; do 35 | case "$1" in 36 | --help) 37 | OPT_HLP=true 38 | ((option_count++)) 39 | shift 40 | ;; 41 | --debug) 42 | OPT_DBG=true 43 | ((option_count++)) 44 | shift 45 | ;; 46 | --kill) 47 | OPT_KIL=true 48 | ((option_count++)) 49 | shift 50 | ;; 51 | --update) 52 | OPT_UPD=true 53 | ((option_count++)) 54 | shift 55 | ;; 56 | --no-user-desktop) 57 | OPT_NUDES=true 58 | ((option_count++)) 59 | shift 60 | ;; 61 | --no-user-download) 62 | OPT_NUDOW=true 63 | ((option_count++)) 64 | shift 65 | ;; 66 | --no-user-documents) 67 | OPT_NUDOC=true 68 | ((option_count++)) 69 | shift 70 | ;; 71 | --no-run-file) 72 | OPT_NRF=true 73 | ((option_count++)) 74 | shift 75 | ;; 76 | --install) 77 | OPT_IST=true 78 | ((option_count++)) 79 | shift 80 | ;; 81 | --remove) 82 | OPT_REM=true 83 | ((option_count++)) 84 | shift 85 | ;; 86 | --) 87 | shift 88 | break 89 | ;; 90 | *) 91 | echo "Invalid argument: $1" >&2 92 | OPT_HLP=true 93 | OPT_FAL=true 94 | ;; 95 | esac 96 | done 97 | 98 | if [[ $option_count -gt 1 && ( $OPT_HLP = true || $OPT_KIL = true || $OPT_UPD = true || $OPT_IST = true || $OPT_REM = true ) ]]; then 99 | echo "Error: Too much options." >&2 100 | OPT_HLP=true 101 | OPT_FAL=true 102 | fi 103 | 104 | if [ -e ~/.config/user-dirs.dirs ]; then 105 | source ~/.config/user-dirs.dirs 106 | fi 107 | 108 | if [ $OPT_HLP = true ]; then 109 | echo "You can run wechat without options, or with options below:" 110 | echo "Options:" 111 | echo " --debug return a shell but not wechat" 112 | echo " --kill to kill wechat process" 113 | echo " --update to check update" 114 | echo " --no-user-desktop to disable mounting $XDG_DESKTOP_DIR" 115 | echo " --no-user-download to disable mounting $XDG_DOWNLOAD_DIR" 116 | echo " --no-user-documents to disable mounting $XDG_DOCUMENTS_DIR" 117 | echo " --no-run-file to disable mounting /run/user/$UID" 118 | echo " --install to install desktop file" 119 | echo " --remove to remove installation above" 120 | if [ $OPT_FAL = true ]; then exit 1; fi 121 | exit 0 122 | fi 123 | if [ $OPT_DBG = true ]; then 124 | EXEC="bash" 125 | fi 126 | if [ $OPT_KIL = true ]; then 127 | kill $(ps -e | grep wechat | grep -v "wechat-" | awk '{print $1}') 128 | exit $? 129 | fi 130 | if [ $OPT_UPD = true ]; then 131 | echo "please go to https://github.com/KZ25T/wechat-appimage/releases to check update" 132 | exit $? 133 | fi 134 | if [ $OPT_NUDES = true ]; then 135 | : 136 | fi 137 | if [ $OPT_NUDOW = true ]; then 138 | : 139 | fi 140 | if [ $OPT_NUDOC = true ]; then 141 | : 142 | fi 143 | if [ $OPT_NRF = true ]; then 144 | unset RUNFS 145 | fi 146 | if [ $OPT_IST = true ]; then 147 | if [ "$(id -u)" -eq 0 ]; then 148 | INSTALL_DIR="/usr/local" 149 | else 150 | INSTALL_DIR="$HOME/.local" 151 | fi 152 | mkdir -p $INSTALL_DIR/bin 153 | cp $APPIMAGE $INSTALL_DIR/bin/wechat 154 | mkdir -p $INSTALL_DIR/share/applications 155 | cp $APPDIR/wechat.desktop $INSTALL_DIR/share/applications 156 | mkdir -p $INSTALL_DIR/share/icons/hicolor/256x256/apps 157 | cp $APPDIR/wechat.png $INSTALL_DIR/share/icons/hicolor/256x256/apps 158 | sed -i "s#Exec=wechat %U#Exec=$INSTALL_DIR/bin/wechat %U#g" $INSTALL_DIR/share/applications/wechat.desktop 159 | sed -i "s#Icon=wechat#Icon=$INSTALL_DIR/share/icons/hicolor/256x256/apps/wechat.png#g" $INSTALL_DIR/share/applications/wechat.desktop 160 | exit $? 161 | fi 162 | if [ $OPT_REM = true ]; then 163 | if [ "$(id -u)" -eq 0 ]; then 164 | INSTALL_DIR="/usr/local" 165 | else 166 | INSTALL_DIR="$HOME/.local" 167 | fi 168 | rm $INSTALL_DIR/share/applications/wechat.desktop 169 | rm $INSTALL_DIR/share/icons/hicolor/256x256/apps/wechat.png 170 | rm $INSTALL_DIR/bin/wechat 171 | exit $? 172 | fi 173 | 174 | if [ ! -e ~/.config/user-dirs.dirs ]; then 175 | echo -e "\e[33m>>>>> WARNING: no xdg config file (~/.config/user-dirs.dirs) found.\e[0m" 176 | echo -e "\e[33m>>>>> YOU SHOULD CONFIG IT but now wechat will try continue to run.\e[0m" 177 | fi 178 | 179 | # wechat-beta only support xcb 180 | BWRAP_ENV_APPEND="--setenv QT_QPA_PLATFORM xcb " 181 | [ -z ${QT_IM_MODULE} ] && BWRAP_ENV_APPEND+="--setenv QT_IM_MODULE fcitx " 182 | [ -z ${GTK_USE_PORTAL} ] && BWRAP_ENV_APPEND+="--setenv GTK_USE_PORTAL 1 " 183 | 184 | # append bwrap mounting file 185 | ## append user config file 186 | BWRAP_FILE_APPEND="" 187 | if [ -e ~/.config/user-dirs.dirs ]; then 188 | WECHAT_CFG_DIR=${XDG_DOCUMENTS_DIR}/xwechat_files 189 | mkdir -p ${WECHAT_CFG_DIR} 190 | [ "$OPT_NUDES" == "false" ] && BWRAP_FILE_APPEND+="--bind ${XDG_DESKTOP_DIR} ${XDG_DESKTOP_DIR} " 191 | [ "$OPT_NUDOC" == "false" ] && BWRAP_FILE_APPEND+="--bind ${XDG_DOCUMENTS_DIR} ${XDG_DOCUMENTS_DIR} " 192 | [ "$OPT_NUDOW" == "false" ] && BWRAP_FILE_APPEND+="--bind ${XDG_DOWNLOAD_DIR} ${XDG_DOWNLOAD_DIR} " 193 | BWRAP_FILE_APPEND+="--bind ${WECHAT_CFG_DIR} $HOME/xwechat_files " 194 | fi 195 | FONT1=$HOME/.cache/fontconfig 196 | FONT2=$HOME/.config/fontconfig 197 | XAUTH=$HOME/.Xauthority 198 | [ -e ${FONT1} ] && BWRAP_FILE_APPEND+="--ro-bind ${FONT1} ${FONT1} " 199 | [ -e ${FONT2} ] && BWRAP_FILE_APPEND+="--ro-bind ${FONT2} ${FONT2} " 200 | [ -n "${RUNFS}" -a -e ${RUNFS} ] && BWRAP_FILE_APPEND+="--ro-bind ${RUNFS} ${RUNFS} " 201 | ## append runtime lib file 202 | [ -e /etc/os-release ] && source /etc/os-release 203 | LIBBIND="" 204 | if [[ "$ID" == "debian" || "$ID_LIKE" == "debian" ]]; then 205 | # this is debian derived. 206 | LIBBIND="--tmpfs /usr/lib" 207 | BWRAP_FILE_APPEND+="--ro-bind /usr/lib/locale /usr/lib/locale " 208 | BWRAP_FILE_APPEND+="--ro-bind /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu " 209 | BWRAP_FILE_APPEND+="--ro-bind /usr/lib/udev /usr/lib/udev " 210 | elif [[ "$ID" == "fedora" || -e /usr/bin/rpm ]]; then 211 | # this is RHEL derived. 212 | LIBBIND="--tmpfs /usr/lib" 213 | BWRAP_FILE_APPEND+="--ro-bind /usr/lib/locale /usr/lib/locale " 214 | BWRAP_FILE_APPEND+="--ro-bind /usr/lib/udev /usr/lib/udev " 215 | [ -e /usr/lib64/libbz2.so.1 ] && BWRAP_FILE_APPEND+="--ro-bind /usr/lib64/libbz2.so.1 /usr/lib/libbz2.so.1.0 " 216 | else 217 | echo "Not a Debian distribution. Try running as Arch Linux." 218 | LIBBIND="--bind /usr/lib /usr/lib" 219 | [ -e ${XAUTH} ] && BWRAP_FILE_APPEND+="--ro-bind ${XAUTH} ${XAUTH} " 220 | fi 221 | ## append system config file 222 | ETCFILES=(/etc/alternatives /etc/fonts /etc/hostname /etc/hosts /etc/ld.so.cache \ 223 | /etc/localtime /etc/machine-id /etc/passwd /etc/resolv.conf) 224 | for ETCFILE in "${ETCFILES[@]}"; do 225 | [ -e ${ETCFILE} ] && BWRAP_FILE_APPEND+="--ro-bind ${ETCFILE} ${ETCFILE} " 226 | done 227 | 228 | # append video devices 229 | BWRAP_DEVICE_APPEND="" 230 | [ -e /dev/snd ] && BWRAP_DEVICE_APPEND="--dev-bind /dev/snd /dev/snd" 231 | [ -e /dev/video0 ] && for video_device in /dev/video*; do 232 | BWRAP_DEVICE_APPEND+=" --dev-bind $video_device $video_device" 233 | done 234 | 235 | # run bubblewrap env 236 | mkdir -p $HOME/.xwechat 237 | bwrap --die-with-parent \ 238 | --ro-bind / / \ 239 | --tmpfs /sys --tmpfs /home --tmpfs /etc --proc /proc \ 240 | --tmpfs /run ${LIBBIND} --tmpfs /tmp --dev /dev \ 241 | --ro-bind $APPDIR/opt /opt \ 242 | --ro-bind $APPDIR/etc/os-release /etc/os-release \ 243 | --ro-bind $APPDIR/etc/lsb-release /etc/lsb-release \ 244 | --ro-bind $APPDIR/etc/.kyact /etc/.kyact \ 245 | --ro-bind $APPDIR/etc/LICENSE /etc/LICENSE \ 246 | --ro-bind $APPDIR/usr/lib/libactivation.so /usr/lib/libactivation.so \ 247 | --bind $HOME/.xwechat $HOME/.xwechat \ 248 | ${BWRAP_FILE_APPEND} ${BWRAP_ENV_APPEND} ${BWRAP_DEVICE_APPEND} \ 249 | ${EXEC} 250 | # refer: https://blog.lilydjwg.me/2021/8/12/using-bwrap.215869.html 251 | # refer: https://github.com/lfift/wechat-beta-bwrap/blob/main/wechat.sh 252 | --------------------------------------------------------------------------------