You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NixOS下如何将libayatana-appindicator别名设为ayatana-appindicator3-0.1?

解决NixOS上Flutter构建LocalSend的ayatana-appindicator依赖问题

下面是几个可行的解决方案,按从临时到持久的顺序排列:

临时快速解决:在shell中创建pkg-config别名

  1. 先启动包含所需依赖的nix-shell:
nix-shell -p libayatana-appindicator gtk3 pkg-config flutter
  1. 找到libayatana-appindicator的.pc文件位置:
pkg-config --variable pc_path pkg-config | tr ':' '\n' | xargs -I {} ls {} | grep ayatana

输出一般是/nix/store/[hash]-libayatana-appindicator-[version]/lib/pkgconfig/libayatana-appindicator3.pc这样的路径。
3. 临时复制并改名.pc文件,让pkg-config能识别:

mkdir -p ~/.pkgconfig
cp /nix/store/[上面找到的完整路径]/libayatana-appindicator3.pc ~/.pkgconfig/ayatana-appindicator3-0.1.pc
  1. 把临时目录加入pkg-config的搜索路径:
export PKG_CONFIG_PATH="$HOME/.pkgconfig:$PKG_CONFIG_PATH"

现在执行flutter run就能正常编译了。

持久化解决:用Nix表达式包装依赖

创建一个shell.nix文件,通过override给libayatana-appindicator添加别名.pc文件:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  buildInputs = [
    pkgs.flutter
    pkgs.gtk3
    pkgs.pkg-config
    (pkgs.libayatana-appindicator.overrideAttrs (oldAttrs: {
      postInstall = (oldAttrs.postInstall or "") + ''
        ln -s $out/lib/pkgconfig/libayatana-appindicator3.pc $out/lib/pkgconfig/ayatana-appindicator3-0.1.pc
      '';
    }))
  ];
}

之后每次执行nix-shell进入环境,直接运行flutter run即可,不用重复设置。

另一种临时方案:修改system_tray的CMake配置

如果不想折腾Nix环境,也可以直接修改LocalSend依赖的system_tray包的配置:
找到项目中linux/CMakeLists.txt(在flutter pub get下载的system_tray包目录里,一般在.pub-cache/hosted/pub.dev/system_tray-[version]/linux/),把这一行:

pkg_check_modules(ayatana-appindicator REQUIRED ayatana-appindicator3-0.1)

改成:

pkg_check_modules(ayatana-appindicator REQUIRED libayatana-appindicator3)

改完后重新执行flutter run就能编译通过,不过注意这个修改会在包更新后被覆盖,适合临时构建。


内容的提问来源于stack exchange,提问作者Caesarovich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:33:25