树莓派4B安装Cutefish桌面环境:从源码编译到系统配置全攻略

发布时间:2026/8/26 3:46:03

树莓派4B安装Cutefish桌面环境:从源码编译到系统配置全攻略
1. 项目概述为树莓派注入现代桌面灵魂最近折腾我那台吃灰的树莓派4B官方Raspberry Pi OS的桌面环境用久了总觉得有点“复古”。正好看到Cutefish桌面这个项目界面设计挺有现代感想着能不能给树莓派也换上这套“新皮肤”。说干就干我就在最新的Raspberry Pi OS Bullseyearm64架构上无论是轻量级的Lite版本还是功能齐全的Full版本都尝试手动安装了一遍Cutefish桌面环境。整个过程下来踩了不少坑也总结了一套相对稳定可行的流程。如果你也想让自己的树莓派桌面焕然一新体验一下不同于传统LXDE的视觉和交互这篇记录或许能帮到你。这不仅仅是换个主题那么简单它涉及到从底层依赖、桌面环境组件到显示管理器的一整套替换适合那些不满足于默认系统、喜欢动手定制的玩家。2. 核心思路与方案选型解析2.1 为什么选择Cutefish桌面首先得明确我们不是在树莓派上安装一个全新的、独立的发行版而是在现有的、稳定的Raspberry Pi OS基础上叠加一个额外的桌面环境Desktop Environment, DE。Cutefish DE最初是为一些国内Linux发行版设计的其UI风格借鉴了macOS和现代操作系统的设计语言强调圆角、毛玻璃效果和流畅的动画这对于习惯了移动端和现代桌面审美的用户来说吸引力不小。在树莓派上安装它主要出于几个考虑一是追求视觉上的新鲜感和现代化二是测试arm64架构下非主流桌面环境的兼容性与性能三是作为一个学习案例了解桌面环境是如何被组装和运行的。2.2 Bullseye与arm64架构下的特殊考量我们选择的基底系统是Raspberry Pi OS基于Debian 11 “Bullseye”的版本并且是arm64位。这带来了几个关键点软件源兼容性Bullseye的官方源和树莓派基金会维护的源非常稳定但Cutefish桌面可能没有预打包好的Debian Bullseye arm64版本。这意味着我们很可能需要从源码编译或者寻找第三方维护的仓库这增加了复杂性和不确定性。ARM架构依赖所有软件包都必须是对应arm64aarch64架构的。x86_64的包绝对无法运行。在寻找依赖和解决报错时必须时刻牢记这一点。性能预期树莓派4B的CPU和GPU性能虽然不错但运行一个带有复合特效的现代桌面环境仍是一种挑战。与轻量级的LXDE相比Cutefish肯定会消耗更多资源。我们的目标是在“可用”和“美观”之间找到平衡可能需要后续的调优。2.3 安装路径选择从仓库还是源码经过搜索和尝试目前根据我的实践周期为Debian Bullseye arm64直接提供Cutefish桌面完整.deb包的官方仓库几乎没有。因此最可行的路线分为两步利用现有或相近的仓库安装核心组件尝试添加Cutefish项目为其他发行版如Ubuntu维护的仓库或者一些社区移植的仓库来安装cutefish-*系列的核心软件包。这能解决大部分依赖。手动编译安装缺失组件对于仓库中没有的包或者安装后出现依赖冲突的包我们需要获取其源代码在树莓派本地进行编译。这是最耗时但也最根本的解决方法。注意混合使用不同发行版甚至不同版本的仓库是危险的极易导致系统依赖关系破坏。我们的策略是优先使用Bullseye官方源万不得已才考虑添加外部源并且要非常谨慎地处理优先级Pin Priority。3. 系统准备与依赖环境搭建3.1 起点一个干净的Raspberry Pi OS无论你从Lite还是Full版本开始都建议先进行一次全面的系统更新确保起点一致。通过SSH或者接上显示器键盘操作。sudo apt update sudo apt full-upgrade -y sudo reboot更新后重启确保所有更改生效。如果你从Lite版本开始那么系统只有命令行界面我们需要先安装一些基础的图形和编译环境。如果从Full版本开始这部分可以跳过但为了编译环境完整也建议安装。3.2 安装基础开发工具与图形库这是编译任何软件的基础。我们需要安装编译器、构建工具、以及必要的图形开发库。sudo apt install -y \ build-essential \ cmake \ git \ pkg-config \ libx11-dev \ libxext-dev \ libxfixes-dev \ libxi-dev \ libxrandr-dev \ libxinerama-dev \ libxcursor-dev \ libxcomposite-dev \ libxdamage-dev \ libxrender-dev \ libxcb1-dev \ libxcb-glx0-dev \ libxcb-shape0-dev \ libxcb-shm0-dev \ libxcb-xfixes0-dev \ libxcb-randr0-dev \ libxcb-composite0-dev \ libxcb-image0-dev \ libxcb-present-dev \ libxcb-sync-dev \ libxcb-xkb-dev \ libxkbcommon-dev \ libxkbcommon-x11-dev \ libgl1-mesa-dev \ libglu1-mesa-dev \ libegl1-mesa-dev \ libgles2-mesa-dev \ libdrm-dev \ libmtdev-dev \ libinput-dev \ libudev-dev \ libts-dev \ libsystemd-dev \ libpam0g-dev \ libpulse-dev \ libasound2-dev \ libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libpng-dev \ libjpeg-dev \ libtiff-dev \ libfreetype6-dev \ libfontconfig1-dev \ libharfbuzz-dev \ libfribidi-dev \ libicu-dev \ libssl-dev \ libwayland-dev \ libxkbcommon-dev \ qt6-base-dev \ qt6-base-private-dev \ qt6-tools-dev \ qt6-tools-dev-tools \ qt6-wayland \ qt6-quick3d-dev \ kwin-wayland-dev \ extra-cmake-modules \ libkf5config-dev \ libkf5coreaddons-dev \ libkf5i18n-dev \ libkf5kio-dev \ libkf5notifications-dev \ libkf5solid-dev \ libkf5windowsystem-dev \ libkf5guiaddons-dev \ libkf5declarative-dev \ libkf5networkmanagerqt-dev \ libkf5bluezqt-dev \ libkf5screen-dev \ libkf5globalaccel-dev \ libpolkit-qt5-1-dev这个命令列表很长它涵盖了从X11、Wayland到Qt6、KDE Frameworks 5等一系列开发库。一次性安装可以避免后续编译时反复查找缺失依赖。根据网络情况安装可能需要较长时间。3.3 配置Qt6环境Cutefish桌面后期版本主要基于Qt6开发。确保Qt6的环境变量被正确设置通常安装qt6-base-dev后会自动配置但为了保险可以检查一下source /etc/profile.d/qt6.sh # 或者 export PATH/usr/lib/qt6/bin:$PATH你可以将环境变量配置添加到你的~/.bashrc文件中以便永久生效。4. 获取与编译Cutefish桌面组件4.1 寻找源代码Cutefish桌面的源代码主要托管在GitHub上但原组织可能已停止活跃。我们需要寻找目前仍在维护的fork或镜像。可以通过GitHub搜索“cutefishos”或“cutefish-desktop”来寻找。假设我们找到了一个名为cutefish-ubuntu的仓库其中包含了针对Ubuntu打包的源码我们可以借鉴其debian/目录下的规则但编译需要在树莓派上完成。为每个核心组件创建单独的编译目录是一个好习惯。我们以cutefish-dock程序坞为例。mkdir -p ~/cutefish-src cd ~/cutefish-src git clone https://github.com/[某个维护者]/cutefish-dock.git cd cutefish-dock4.2 编译与安装流程进入组件源代码目录后标准的CMake项目编译流程如下# 1. 创建并进入构建目录与源码分离是推荐做法 mkdir build cd build # 2. 运行CMake配置项目。指定安装前缀为 /usr这是系统级软件的常规位置。 # -DCMAKE_INSTALL_PREFIX/usr 确保文件安装到正确位置。 # -DCMAKE_BUILD_TYPERelease 构建优化版本。 cmake .. -DCMAKE_INSTALL_PREFIX/usr -DCMAKE_BUILD_TYPERelease # 3. 开始编译。使用-j$(nproc)可以让make使用所有CPU核心加速编译。 make -j$(nproc) # 4. 安装编译好的文件到系统。需要sudo权限。 sudo make install实操心得编译过程可能会因为缺失依赖而中断。错误信息通常会明确指出缺少哪个.h头文件或哪个库。你需要根据错误提示使用apt search或apt-file search命令来查找并提供对应的-dev包。例如如果报错缺少libkf5globalaccel.h那就需要安装libkf5globalaccel-dev。这个过程可能需要反复几次是编译安装中最耗时的部分。4.3 需要按顺序编译的核心组件列表桌面环境是一个整体组件间有依赖关系。建议按照以下大致顺序进行编译安装cutefish-core(核心库基础框架)cutefish-lib(其他公共库)cutefish-icons,cutefish-cursor-theme,cutefish-gtk-theme(图标、光标、主题)cutefish-kwin-plugins(KWin窗口管理器插件)cutefish-dock(程序坞)cutefish-launcher(启动器)cutefish-statusbar(状态栏)cutefish-control-center(控制中心)cutefish-filemanager(文件管理器)cutefish-terminal(终端)cutefish-screenshot(截图工具)cutefish-screenlocker(锁屏)注意事项不是所有组件都必须安装。你可以根据需求选择。例如如果你喜欢用其他文件管理器或终端可以跳过对应的组件。但core,lib,kwin-plugins,dock,launcher,statusbar是构成基本桌面框架所必需的。5. 配置显示管理器与桌面会话5.1 安装并配置SDDMCutefish桌面通常与SDDMSimple Desktop Display Manager显示管理器搭配较好。我们先安装它sudo apt install sddm sddm-themes安装后需要配置SDDM使用Cutefish的会话。Cutefish的编译安装过程通常会在/usr/share/xsessions/目录下生成一个名为cutefish.desktop的桌面会话入口文件。如果没有你需要手动创建。检查或创建会话文件sudo nano /usr/share/xsessions/cutefish.desktop文件内容大致如下[Desktop Entry] NameCuteFish Desktop CommentCuteFish Desktop Environment Exec/usr/bin/cutefish-session TypeApplication DesktopNamesCutefish关键在于Exec这一行它指定了启动桌面会话的命令。你需要确认/usr/bin/cutefish-session这个脚本是否存在。如果不存在可能是某些组件没有安装或者启动命令不同有时可能是startcutefish。你需要根据实际安装的组件来确定正确的启动命令。5.2 设置默认启动SDDM与Cutefish首先设置系统默认使用图形界面如果当前是命令行启动sudo systemctl set-default graphical.target然后设置SDDM为默认的显示管理器。Debian/Ubuntu系统常用lightdm我们需要切换sudo dpkg-reconfigure sddm在弹出的选择框中使用方向键选择sddm然后按Tab键跳到OK回车确认。重要提示在切换显示管理器前最好确保你已经有一个可用的桌面环境比如原装的Pi桌面可以回退。如果SDDM配置错误无法启动你还可以通过按CtrlAltF2切换到TTY命令行进行修复。5.3 创建cutefish-session启动脚本如果/usr/bin/cutefish-session不存在我们需要创建一个。这个脚本的任务是设置必要的环境变量并启动桌面组件。sudo nano /usr/bin/cutefish-session脚本内容示例#!/bin/bash # 设置Qt相关环境变量 export QT_QPA_PLATFORMxcb export QT_AUTO_SCREEN_SCALE_FACTOR0 export QT_SCALE_FACTOR1 # 启动Cutefish核心进程 /usr/bin/cutefish-core # 启动程序坞 /usr/bin/cutefish-dock # 启动状态栏 /usr/bin/cutefish-statusbar # 启动启动器服务 /usr/bin/cutefish-launcher # 使用KWin作为窗口管理器并加载Cutefish插件 /usr/bin/kwin_x11 --replace --xwayland # 等待所有组件启动 wait保存后赋予执行权限sudo chmod x /usr/bin/cutefish-session这个脚本非常基础实际生产环境可能需要更复杂的进程管理和错误处理。但作为起点它能帮我们验证桌面是否能启动。6. 首次启动与基础问题排查6.1 重启进入Cutefish桌面完成以上步骤后重启你的树莓派sudo reboot如果一切顺利SDDM图形登录界面应该会出现。在登录界面的会话选择菜单通常是一个小图标或按钮中选择“CuteFish Desktop”或类似选项然后输入你的用户名和密码登录。6.2 常见启动失败问题与解决问题1SDDM启动后黑屏或循环退回登录界面。排查这通常是因为cutefish-session脚本执行出错或桌面组件崩溃。按CtrlAltF2切换到TTY登录后查看日志。journalctl -xe查看最近的系统日志。~/.xsession-errors查看当前用户的X会话错误日志。直接运行cutefish-session看终端输出什么错误。可能原因与解决依赖缺失日志中会提示缺少某个库.so文件。使用apt-file search libxxx.so来查找提供该库的包并安装。环境变量问题确保脚本中设置了正确的QT_QPA_PLATFORM。对于树莓派可能尝试wayland或eglfs但xcbX11通常兼容性最好。组件冲突原有的桌面环境如LXDE的某些进程可能冲突。确保在启动Cutefish前它们已被终止。可以在脚本开头加入pkill -9 lxsession等命令需谨慎。问题2桌面能进入但Dock、状态栏不显示或功能不全。排查检查这些组件进程是否在运行ps aux | grep cutefish。可能原因与解决组件未正确安装回到对应组件的目录重新执行sudo make install。权限问题确保/usr/bin/下的cutefish二进制文件有可执行权限。配置错误用户级的配置文件可能有问题。尝试删除~/.config/cutefish/目录先备份让系统重新生成。问题3窗口没有边框或无法移动/缩放。排查这通常是窗口管理器KWin或其插件cutefish-kwin-plugins的问题。可能原因与解决KWin未启动检查脚本中启动KWin的命令是否正确且--replace参数确保它替代了可能存在的其他窗口管理器。插件未编译/安装确保cutefish-kwin-plugins已正确编译安装。KWin插件通常安装在/usr/lib/x86_64-linux-gnu/qt6/plugins/或类似路径下注意树莓派是aarch64-linux-gnu。6.3 性能调优初步设置树莓派4B的硬件资源有限为了获得相对流畅的体验可以进行一些优化减少动画效果在Cutefish控制中心如果已安装或KWin的设置中关闭或减少窗口打开、关闭的动画。使用轻量级应用尽量使用LXTerminal、FeatherPad等替代资源占用高的应用。调整合成器设置如果使用KWin可以在系统设置显示和监控合成器中将“渲染后端”改为“XRender”可能更稳定或调整“缩放过滤器”。超频有风险在/boot/config.txt中谨慎调整arm_freq、gpu_freq等参数并确保散热良好。这不是必须的且可能影响稳定性。7. 进阶配置与维护7.1 混用软件源的风险管理在尝试安装缺失依赖时你可能会 tempted 去添加Ubuntu或其他Debian版本的仓库。这是一个高风险操作。如果必须这样做务必使用apt的pin功能来设定极低的优先级防止关键系统包被意外升级。编辑/etc/apt/preferences.d/cutefish-pin文件Package: * Pin: release oCutefishOS Pin-Priority: 50这会将来自CutefishOS这个源的包优先级设为50低于默认的500这样只有在官方源找不到时才会考虑从这里安装。7.2 创建自己的DEB包手动编译安装不利于后续更新和维护。更优雅的方式是将编译好的软件打包成.deb文件。你需要安装dpkg-dev、debhelper等工具并编写debian/control、debian/rules等文件。这本身是一个复杂的话题但长远来看对于需要安装多个组件的项目学习基础打包技能是值得的。你可以参考现有Cutefish组件源码中的debian/目录如果有的话作为模板。7.3 系统集成与故障恢复设置默认应用程序安装xdg-utils并使用xdg-mime default和xdg-settings来关联文件类型和默认应用。网络管理器Cutefish可能依赖自己的网络管理前端。确保network-manager服务已安装并运行sudo systemctl enable --now NetworkManager并且你的用户有权限管理网络通常需要加入netdev组。声音确保pulseaudio或pipewire服务正常运行。创建恢复快照在进行重大桌面环境更改前使用rsync或dd工具对整个SD卡或系统关键分区进行完整备份。一旦桌面环境无法进入你可以从备份中快速恢复或者至少能挂载镜像取出重要文件。整个安装过程就像是在为树莓派搭建一个定制的“乐高”桌面每一个组件都是一块积木。乐趣在于拼装和解决问题的过程而最终呈现的是一个独一无二、符合自己审美的操作环境。虽然过程繁琐但成功点亮Cutefish桌面的那一刻看着熟悉的硬件跑起全新的界面那种成就感是直接下载一个现成镜像无法比拟的。如果中途卡住多查日志、善用搜索树莓派社区的智慧总能帮你找到出路。

相关新闻

树莓派4B安装Cutefish桌面环境:Bullseye系统arm64架构完整指南

树莓派4B安装Cutefish桌面环境:Bullseye系统arm64架构完整指南

2026/8/26 3:46:02

1. 项目缘起:为什么要在树莓派上折腾Cutefish? 最近手头闲置了一块树莓派4B,看着它吃灰总觉得有点浪费。官方Raspberry Pi OS的桌面环境用久了,总想换个口味,体验点不一样的。正好在网上看到Cutefish这个桌面环境&…

软件测试面试核心考察维度与高频问题解析

软件测试面试核心考察维度与高频问题解析

2026/8/26 3:36:02

1. 软件测试面试的核心考察维度在软件测试岗位的面试中,面试官通常会从四个核心维度评估候选人的专业能力。首先是理论基础,包括测试方法学、测试类型和测试流程的掌握程度。其次是技术实操能力,主要体现在测试工具使用、自动化脚本编写和缺陷…

LeetCode热题100:算法面试突破与高效刷题指南

LeetCode热题100:算法面试突破与高效刷题指南

2026/8/26 3:36:02

1. 为什么选择LeetCode热题100作为突破口在程序员的技术成长道路上,算法能力的提升始终是无法绕过的一道坎。而LeetCode作为全球最知名的算法题库平台,其热题100清单可以说是算法学习者的"必修课"。这份清单并非随机选取,而是根据题…

基于MCP协议构建KES数据库智能运维Agent的实践指南

基于MCP协议构建KES数据库智能运维Agent的实践指南

2026/8/26 4:36:05

1. 项目缘起:当数据库运维遇上AI Agent最近在折腾一个挺有意思的事儿,把数据库的运维监控和AI Agent给结合起来了。起因很简单,我们团队负责维护的KES(KingbaseES)数据库集群规模越来越大,日常的巡检、慢SQ…

2026软件测试面试指南:自动化与持续集成实战解析

2026软件测试面试指南:自动化与持续集成实战解析

2026/8/26 4:36:05

1. 2026软件测试面试全景解析最近帮团队面试了三十多位测试工程师,发现即使是工作3-5年的候选人,在面对自动化测试、持续集成等实战问题时仍然频频踩坑。这份总结汇集了近两年高频出现的47个技术问题及其解题思路,覆盖从功能测试到自动化体系…

多选题数据分析:MATLAB建模+R检验+Python部署实战

多选题数据分析:MATLAB建模+R检验+Python部署实战

2026/8/26 4:36:05

1. 项目概述:为什么多选题分析不是简单打勾,而是数模实战的“试金石”多选题分析,表面看只是考试卷上几个带方框的选项,但落到数学建模和实际数据分析场景里,它立刻从“选择题”升级为“决策诊断题”。我带过三届全国大…

ABB PFSK152模块:工业DCS信号预处理核心原理与实战指南

ABB PFSK152模块:工业DCS信号预处理核心原理与实战指南

2026/8/26 4:36:05

1. 这不是一块普通模块:PFSK152在工业控制现场的真实分量你拆开一台运行十年以上的ABB Symphony DCS机柜,手指拂过积着薄灰的背板,突然停在一块标着“3BSE018877R1”的蓝色模块上——它没贴标签,没写型号,但老工程师一…

FreeRTOS任务调度与任务间通信机制详解:队列、信号量与堆栈溢出排查

FreeRTOS任务调度与任务间通信机制详解:队列、信号量与堆栈溢出排查

2026/8/26 4:36:05

这篇是 FreeRTOS 系列的第二部分。上一篇我们把环境搭建、源码移植和第一个任务跑通了,今天的内容是接着往下走,重点讲任务调度、队列、信号量、互斥量、软件定时器,还有排查任务卡死和堆栈溢出的那套方法。不管你现在用的是 STM32F103C8T6、…

数学建模竞赛实战:AI图像识别与曲率计算的融合应用

数学建模竞赛实战:AI图像识别与曲率计算的融合应用

2026/8/26 4:26:04

1. 项目背景与核心挑战:当数学建模遇上AI图像识别最近刚带着团队打完今年的“认证杯”网络挑战赛,我们选的是D题,一个关于“AI图片判断”和“曲率计算”的题目。说实话,这题目挺有意思,它把当下火热的计算机视觉&#…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/26 1:49:16

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

2026/8/26 0:05:45

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

2026/8/26 0:05:45

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后,交付速度没有提升反而慢了。复盘后发现,最先…

免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

2026/8/26 0:05:45

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者,最头疼的可能是情节推进不下去、人物对话干瘪,或者世界观设定不够丰满。自己对着空白文档硬憋,效率很低。这时候,一个能理解你…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…