UbuntuのUnityで、メニューをアプリケーションウィンドウに表示させる

Updated:

UbuntuのUnityインターフェースでは、アプリケーションのメニューが、グロー
バルメニューバーに表示されます。(ちょうどMacintoshのような感じです。)

これはこれで、慣れてしまえば便利なのでしょうが、メニューを各アプリケー
ションのウィンドウに表示させたい、という根強いニーズがあるようです。

私の場合、WindowsマシンのVMWare Player上で、Ubuntuを実行しています。通
常は、VMWareの「Unityモード」(ややこしいのですが)を使って、Windowsのデ
スクトップ上にLinuxアプリのウィンドウを個別に表示させています。この際に、
アプリケーションのウィンドウにメニューを表示させる必要があります。

VMWare Playerのリリースノートを見ると「既知の問題」として、このことが記
載されていました。対処法としては「UbuntuのAPPMENU(グローバルメニュー)を
disableすると、アプリケーションウィンドウにメニューが表示されるようにな
るぞよ」と書いてありました。

というわけで、前置きがとても長くなってしまいましたが、グローバルメニュー
を禁止して、アプリケーションのウィンドウにメニューを表示させる方法を調
べをみました。

以下のページにUnityのグローバルメニューを禁止する方法が説明されていまし
た。

Disable The AppMenu (Global Menu) In Ubuntu

詳しくはこれを読んでいただくこととして、大きく2つの方法があります。

1つは、「環境変数UBUNTU_MENUPROXYに0をセットして、アプリケーションを起
動する」という方法です。アプリケーションは、この環境変数を見て、メニュー
をどこに表示するかを決めているようです。(というか、不評であることを想定
して、このような隠し機能を用意しているのでしょう:-)

もう1つは、グローバルメニューの処理を行なうパッケージを抜いてしまうとい
う方法です。

$ sudo apt-get remove appmenu-gtk appmenu-gtk3 appmenu-qt indicator-appmenu

環境変数UBUNTU_MENUPROXYを設定する方法をとることにしました。ファイル
/etc/X11/Xsession.d/81ubuntumenuproxyにexport UBUNTU_MENUPROXY=0
と書いておけば、すべてのアプリケーションで、メニューがアプリケーション
ウィンドウに表示されます。

sudo su
echo "export UBUNTU_MENUPROXY=0" > /etc/X11/Xsession.d/81ubuntumenuproxy

これで、(VMWare Playerの)Unityモードで、Windowsデスクトップに、Linuxの
ウィンドウを表示する際にも、ちゃんとアプリケーションのメニューが表示さ
れるになりました。めでたしめでたし。