Openboxのメニューにアプリケーションの一覧を

OpenboxでGnomeのようなアプリケーションの起動メニューを使いたいと思う人は多いだろう。というよりは、デフォルトで対応してないために、使うのを諦めてしまう人が多いと思う。
自分はOpenbox Menu Generatorというプログラムを使っていて、使い勝手は非常に良く満足している。OpenBox Menu Generator in Launchpad

しかしUbuntuのレポジトリに入っていないので、自力インストールが必要で、幾分か敷居が高いことは事実だろう。
より簡単なやり方について調べたのでメモしておく。
まず、Openbox-xdgmenuをapt-getなりSynapticなりソフトウェアセンターからインストールする。
まずは、コマンドをそのまま叩いてみよう。

shin@shin-laptop:~$ openbox-xdgmenu
Creates an OpenBox menu from an Xdg menu structure.

Usage:
openbox-xdgmenu [options]

Options:
-a: Show the amount of items in each category next to its name.
-p: Do not use categories.

For example:
openbox-xdgmenu "/etc/xdg/menus/applications.menu"

exampleの通りにコマンドをうってみると、




baobab


/usr/bin/emacs23

(長いので中略)

のように、xmlのソースがずらずらと端末の画面に表示される。このxmlのタグ、というのが、動的なメニューを実現してくれる。動的なメニューというのは、つまり、その項目を選択するたびに動的に内容を生成して表示するタイプのメニューのこと。これは非常に便利で、しかもShellScriptであったり、Perlとかの動的な言語(Cでも書けるけど)を知っているのであれば、メニューを単なるランチャーという範疇を超えてカスタマイズすることができるので、使ってて楽しい部分でもある。

話が脱線した。このパイプメニューをどうやってroot-menu(デスクトップで右クリックしたときに表示されるメニュー)に組み込むかだ。

Openboxのメニューを編集できる、GUIのソフトとして、obmenuというのが用意されている。もし入ってないなら、

sudo apt-get install obmenu

をやってから進もう。できた?では'obmenu'とターミナルで叩いて起動する。

とまあ、こんな感じで表示されるはず。(はじめてOpenboxを使うならもっと殺風景だろうけど)

さて、さっきのパイプメニューを組み込んでみよう。
Add>Pipemenu
を選ぶ。上下の位置は、動かしたい項目を選んで矢印を押せばいい。
さて、できたNewpipeを選んでもらうと、Label,id,Action(今回これは入力できない),commandが編集できるようになるだろう。

それぞれの項目の説明を一応しておくと、Labelが表示される名前、idはそれぞれのPipemenuを区別するidだ。なんでこんなもんが必要かという事についてはあとで触れる。actionは項目を選択したときの動作の種類(Executeが基本と思っていい)。commandは実行するコマンド。簡単だよね。

Label、idは何でもいい。好きな名前にしてもらって構わないけど、labelは"アプリケーション、idは"applications"とかにしとけばわかりやすいだろう。commandの欄は、さきほどxmlを吐いてきたコマンド、つまり

openbox-xdgmenu /etc/xdg/menus/applications.menu

としよう。これで、File -> 保存を選択する。

これで、アプリケーションの一覧にアクセスするメニューが出来ていると思う。

ではidの使い方について。

確かにこれで、アプリケーションを起動するときにいちいちターミナルで打ち込まなくてもよくなった。しかし、右クリック、「アプリケーション」を選択、「アプリの分類」目的のアプリと、一階層だけ無駄に階層が深くなってしまった気がする。一発でアプリケーションの選択ができるようにな工夫があってもいいはずだ。

もちろん極度のめんどくさがり屋であるハッカー達が用意してないわけがない。キーボードショートカットにパイプメニューを直に表示する方法がある。

そのまえに、~/.config/openbox/にrc.xmlというファイルはあるだろうか?なければ、とりあえず、デフォルトの設定をもらってこよう。

cp /etc/xdg/openbox/rc.xml ~/.config/openbox/rc.xml

このrc.xmlというのは、キーボードショートカットやマウスの挙動、ウィンドウ装飾のテーマなんかの設定ファイルだ。今回はキーボードに登録しておこう。他ボタンマウスを持っていれば、マウスに割り当てるのもいいだろう。
本当は、この辺の登録もGUIでやりたいのだが、公式設定ツールのobconfにまだ機能がないので、直接編集することにする。ただのxmlだし。
まずはルートメニュー。



root-menu

をrc.xml(中略)の間に記述する。
これで、Windowsキーとスペースキーでルートメニューが表示されるようになった。
さて、さっき作ったPipemenuを登録しよう。とりあえずWindowsキー+aとかにしておく。



applications

となる。これで、アプリケーションを起動するときに、余計な階層を一つたどる必要がなくなった。

今のところ、不満なのは、root-menuから、pipemenuを削除すると、このキーボードショートカットも使えなくなること。既にルートに記述されている必要がないので、消したくなることもたまにあるだろう。回避方法はありそうな気はするんだけど・・・。

これを応用すれば、結構いろいろ作れる。例えばシステムの情報を動的に生成させてメニューを開けばみれるようにしておくとか、ファイルの一覧を取得して開くようなpipemenuを使えば、ファイルマネージャを使うまでもない時なんかは便利だ。

自分はこれでaudaciousという音楽プレイヤーの制御をしている。いちいちAlt-tabでウィンドウを切り替える必要がないので重宝している。

追記:アプリケーションメニューだけを表示する。
回避方法が見つかった。

Openboxはメニューファイルを複数設定できることを利用する。
前述のrc.xmlにメニューファイルを指定する箇所がある。

/var/lib/openbox/debian-menu.xml
menu.xml
200
no 100
yes

の部分。ここで、通常の~/.config/openbox/menu.xmlの他に、/var/lib/openbox/Debian-menu.xmlを指定する。これはデフォルトで存在かどうかはスマンが知らない。

で、このファイルの内容を見てみると、

とあるので、「Windows+a」に割り振ったrc.xml設定の

applications

Debian

に変更する。多分これが一番簡単。

他のやり方としては、例えば、menu2.xmlとかを作ってそこにPipe−menuを記述しといて、pipemenuをキーボードショートカットで呼び出すとかかな?
ま、いずれにせよ、これでroot-menuを肥大化させずに、さまざまなメニューを利用することが可能であることがわかった。