在Linux运行Avalonia程序需四步:一、安装.NET SDK(如8.0)及图形库(libx11-xcb1等);二、发布为独立部署+linux-x64;三、chmod +x赋权,并在图形环境下运行,必要时启用软件渲染;四、可选打包.deb安装包。

直接在 Linux 上运行 Avalonia 程序,核心就两点:环境要装对、发布方式要选对。不是简单把 Windows 编译出的 exe 拷过去就能跑——Linux 没有 .NET 运行时或没配好渲染后端,程序会直接闪退或报“libSkiaSharp not found”“Failed to initialize graphics backend”这类错误。
一、Linux 系统先装好 .NET SDK 和基础依赖
不装 SDK,dotnet run 都执行不了;不装图形库,Avalonia 启不来窗口。
- 安装 .NET SDK(推荐 7.0 或 8.0):按微软官方源添加,比如 Ubuntu/Debian 系列执行
wget https://packages.microsoft.com/config/ubuntu/22.04/prod.list -O /etc/apt/sources.list.d/microsoft-prod.list
apt-get update && apt-get install -y dotnet-sdk-8.0
- 必须装图形支持库(尤其 headless 或最小化系统):
apt-get install -y libx11-xcb1 libxcb-glx0 libxcb-cursor0 libxcb-xkb1 libxkbcommon-x11-0 libgl1 libglib2.0-0
- 可选但建议:装上 libskia-dev 或确认 SkiaSharp 运行时可用(避免手动编译)
二、项目发布选“独立部署 + linux-x64”
别用“依赖框架”的方式发布——那还得在目标机装 .NET,也不跨机器通用。独立部署才真正“拷过去就能跑”。
- 在 VS 或 CLI 中发布时,目标运行时必须设为 linux-x64(不是 win-x64 或 portable)
- 部署模式选 独立(Self-contained)
- 保存设置后点击发布,输出文件夹里会有一个带名字的可执行文件(无 .dll 后缀),还有 runtimeconfig.json 和一堆 so/dll 文件
三、运行前检查权限和渲染后端
Linux 默认不给可执行文件执行权限,且 Avalonia 在无桌面环境(如 SSH 远程终端)下可能找不到显示服务。
- 给发布出的主程序加执行权限:chmod +x ./MyApp
- 确保在图形桌面环境下运行(比如 deepin、Ubuntu GNOME),不要在纯 tty 或未启用 X11/Wayland 的终端里跑
- 如果报 OpenGL/Vulkan 初始化失败,可强制走软件渲染(兼容性最高):
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
export SKIA_SHARP_DISABLE_GPU=1
./MyApp
四、进阶:打包成 .deb 安装包(适合分发)
想让用户双击安装、自动建菜单快捷方式、统一卸载?就得打 deb 包。
- 项目中加入 testapp.desktop(定义启动项)和 icon.png(图标)
- 在 .csproj 里声明它们的 Linux 安装路径,例如:
- 用 dotnet-deb 工具生成 deb:
dotnet tool install –global dotnet-deb
dotnet deb(在项目根目录执行)
基本上就这些。环境、发布、权限、渲染四步卡住一个,程序就起不来。不复杂但容易忽略。
