最近在想办法提升自己的开发体验,其中有一步就是去掉了不常用和已经使用快捷键代替的按钮和菜单。但是菜单栏没有办法隐藏,导致观感上不是很好。适逢 Jetbrains IDEA 推出了 2019.1 版本,趁着体验新版本功能的时候研究并解决了这个问题。

解决方案

本方案应该适用于所有 Jetbrains IDE,包括 Goland 和 Android Studio

  1. Help -> Find Action... -> Experimental Features...,确认 linux.native.menu 已打开
  2. 安装 libdbusmenu-glib,比如 Arch 上只需要 pacman -S libdbusmenu-glib
  3. 重启 IDE

好,在这个分割线下分享一下自己解决这个问题的全过程。

确认

首先问题的现象是很明显的,预期 IDEA 的菜单栏出现在 KDE 顶端的全局菜单中,但实际上并没有。

然后开始用 IDEAglobal menu 等关键词去搜索,可以得到下列这些有用的信息:

  • 在别人那是好的(有人 Po 出了正常的截图)
  • 可以通过 Experiment Features 开启 linux.native.menu 的支持
  • 在 Issue 的评论中,有人提出需要安装 libdbusmenu-glib

OK,现在知道问题应该出在本地可能漏了什么依赖,导致全局菜单没有生效,下面需要想办法定位到具体的问题。(实在定位不出来的时候再一把梭试一下)

定位

首先通过 Help -> Find Action... -> Experiment Features 中可以打开实验特性的开关,其中可以确认 linux.native.menu 已经默认开启了。(真香!)

然后查看 IDEA 的 Log,寻找全局菜单没有启用的原因。

IDEA 的 Log 一般在 ~/.IntelliJIdea2019.1/system/log/,也可以通过 Help -> Show Log In Dolphin 直接打开所在位置

2019-03-28 11:03:00,342 [   5755]   INFO - penapi.wm.impl.GlobalMenuLinux - disable global-menu integration because some of shared libraries isn't installed: java.lang.UnsatisfiedLinkError: /opt/intellij-idea-ultimate-edition/bin/libdbm64.so: libdbusmenu-glib.so.4: cannot open shared object file: No such file or directory

Ooops,原来是因为缺少一个库导致 global-menu 被禁用了,只需要把这个库装上就可以了。

修复

搜索一下哪个包提供了 libdbusmenu-glib.so.4

:) yay -Fs libdbusmenu-glib.so.4
community/libdbusmenu-glib 16.04.0-3
    usr/lib/libdbusmenu-glib.so.4

很明显,是 libdbusmenu-glib (正是上面 Issue 中有人说要装的那个包),甚至还是社区源里面的包,不用犹豫了:

:) yay -S libdbusmenu-glib

重启 IDE 之后就能看到全局菜单正常工作啦:

在水一篇文章之后,我还能做啥呢?给 AUR 留个言,让维护者把 libdbusmenu-glib 作为一个可选依赖,这样大家在安装或者更新 IDEA 的时候就知道啦:

Update: AUR 的维护者已经加上啦:

New optional dependencies for intellij-idea-ultimate-edition
    libdbusmenu-glib: For global menu support [installed]

Arch is the best!

后续

GTK 3 的应用可以通过安装 appmenu-gtk-module 来获取全局菜单的支持~

参考资料