最近开始尝试在 Linux 系统上做一些开发工作,因为校园网需要使用锐捷客户端来联网,但是锐捷提供的 Linux 版客户端用起来不是很方便,于是转而使用网上的一个替代产品 MentoHUST

之前在 CentOS 上用 MentoHUST 联网没有什么问题,但后来换到 Ubuntu 上的时候每次联网都会提示“打开libnotify失败,请检查是否已安装该库文件”。其实这也不是什么大问题,只是软件没有办法正确弹出桌面通知,又因为我一般是让 MentoHUST 在后台运行,偶尔掉线时看不到桌面通知会比较奇怪,于是还是决定修复一下。

在网上所搜了很多解决办法,一个一个尝试了半天,仍然解决不了。

最后决定分析一下 MentoHUST 的源代码,在官方提供的 V2 源代码包的 src 源代码目录里面翻了一下,发现上面的提示在 dlfunc.c 中:

#ifdef MAC_OS
    char *file[] = {"libnotify.dylib", "libnotify.1.dylib"};
    int i, count = 2;
#else
    char *file[] = {"libnotify.so", "libnotify.so.1"};
    int i, count = 2;
#endif
    for (i=0; i<count && !libnotify; i++) {
        libnotify = dlopen(file[i], RTLD_LAZY);
        error = dlerror();
    }
    if (libnotify == NULL) {
        printf("!! 打开libnotify失败,请检查是否已安装该库文件。\n");
        return -1;
    }

也就是说程序会去寻找 libnotify.so, libnotify.so.1 ,在 /usr/libx86_64-linux-gnu/ 中搜索了一下,只找到 libnotify.so.4, libnotify.so.4.0.0两个文件,于是给他们做个软链接:

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libnotify.so.4.0.0 /usr/lib/x86_64-linux-gnu/libnotify.so.1

重新启动 MentoHUST ,联网成功后可以弹出桌面通知了。