既にxfceも4.11に到達し、ubuntu 14.04 LTSリリースも差し迫っている感のある昨今。
debianのjessieも今年11月にフリーズフェイズに移行だそうでして、debianも悪くないかな〜とかいろいろ考えるそんな時に今更な話ではありますが…
実はalchemyというソフトウェアを知りました。
javaなのでwindowsやmacでも動くと思われます。もちろんubuntuでも動作しました。web版もあったりします。
という話はまた別の記事にするとして、今回、そのalchemyをデスクトップメニューに追加しようとして躓きました。
xfce4ではいつごろからかメニューエディタが消滅してしまい、alacarteというソフトで代用していたのですが、このalacarteが吐くメニューも、いつしかxfce4では対応しなくなっていたのですね。この辺、ごくまれにしか弄らないのですぐに忘れてしまいます。
また、macのquicksilverに似たランチャーソフト「kupfer」がこれまた便利で、アプリケーションメニューよりこっちをよく使っていたりするのもいかんのでしょうね。
そんなわけで手動でalchemyをメニューに登録した顛末を書いておきます。ちなみにxfce4公式の解説はこちら(英語)
まずファイル構成なのですが、通常、以下のようになっており、自分で改造したい場合は/usr/shareなどのファイルをいじるのではなく、ホームディレクトリの設定ディレクトリに複製したファイルを置き、そちらをいじりますので、ホームディレクトリの説明だけにとどめます。
- アプリケーションメニュー定義 .menuファイルの置き場
- ~/.config/menus/
- アプリケーションアイコン定義 .desktopファイルの置き場
- ~/.local/share/applications/
- サブメニューアイコン定義 .directoryファイルの置き場
- ~/.local/share/desktop-directories/
.desktopファイルと.directoryファイルが文字列として見た目が似ていてややこしいですが、全然違うものですので注意しましょう。そして基本的に、いじるのは.desktopファイルだけです。
.menuファイルとは、アプリケーションメニューアイコンのプロパティから設定する、メニューの大本となるファイルです。
これは通常システムデフォルトである場合、ホームディレクトリではなく/etc/xdg/menus/xfce-applications.menuとかが使われていると思います。この部分からカスタマイズしたい場合は、~/.config/menus/にコピーします。
ただ単にアイコンを既存のサブメニューに追加するだけならば、.menuファイルの内容の確認は必要ですが、書き換える必要はありません。
さてこの.menu、中身はXMLでして、各エントリはこのようになっています。非常に長いので、Graphicsサブメニューの部分だけを抽出しておきます。
<Menu> <Name>Graphics</Name> <Directory>xfce-graphics.directory</Directory> <Include> <Category>Graphics</Category> </Include> </Menu>
このうちDirectoryタグが示すxfce-graphics.directoryとは、/usr/share/desktop-directories あるいは ~/.local/share/desktop-directories にある.directoryファイルであり、その中身はサブメニューアイコンの定義とアイコンラベルの表示語句、そしてその語句の国際化定義です。
これにより、日本語環境下のアプリケーションメニューにおいては、「Graphics」サブメニューは、xfce-graphics.directoryで定義されている翻訳文字列「グラフィックス」として表示されます。
ですから、.directoryファイルはほとんどいじる必要はないでしょう。
そして…今回もっとも重要なCategoryタグは、このNameタグで示された「Graphics」サブメニューが対応するカテゴリーを示しています。
おや?
それではそのカテゴリーに対応するサブメニュー定義ファイルはどこにあるのでしょう?
上記のように、.directoryの中は翻訳用データとアイコンの定義ぐらいで、サブメニューの各アイコンについての記載は一切ありません。
実は、サブメニューの各アイコンをリスト的に定義するものは、
xfce4には無いのです。
これに気づくまでにしばらく時間を費やしました…orz
知ってしまえば当たり前ですがw
xfceでは(xfceだけではないかも?)いつの頃からかは知りませんが、
「.desktopファイルの中に記述されたCategoriesエントリに設定されたカテゴリにアイコンを登録する」
という仕組みになっており、これにより.desktopファイルを一つ書くだけで複数のサブメニューに同じ物を表示できるという事になっています。
ですから、通常、作るのは.desktopファイルだけでいいのです。
おいらが今回作成した~/.local/share/applications/alchemy.desktop は以下のようになってます。
[Desktop Entry] Version=1.0 Type=Application Name=Alchemy Comment= Exec=/usr/local/bin/alchemy Icon=setroubleshoot_icon Path= Terminal=false StartupNotify=false Categories=Graphics
一番重要なのがCategories=で、ここに、アプリを載せたいサブメニューに対して.menuファイルで設定されているCategoryタグのカテゴリ名を書いておきます。
すると、xfceが勝手に対応するサブメニューを調べて登録してくれるというわけです。
ubuntu 12.04のalacarteでは、このCategoriesエントリを吐いてくれないので全然メニューを弄れず、ほとんど役に立たないという現象が発生していました。
カテゴリーについての注意事項も一応書いておきます。
- カテゴリーを自作する時はX-というプレフィックスをつけるのが慣習だそうです。たとえばCreativeというカテゴリを自作したいのなら、そのまんまではなくX-Creativeなどとする(必須ではない)
- 複数のカテゴリーを.desktopファイルに記載する場合は、;で区切る。たとえばGraphics;X-Creativeというように。
- 逆にサブメニューを複数のカテゴリの集合にしたい場合は、.menuファイルのIncludeタグ内にCategoryタグを複数並べる。
なお、変更したらxfdesktop --reloadコマンドで再認識させないと更新されないようです…
既にxfceも4.11に到達し、ubuntu 14.04 LTSリリースも差し迫っている感のある昨今。
debianのjessieも今年11月にフリーズフェイズに移行だそうでして、debianも悪くないかな〜とかいろいろ考えるそんな時に今更な話ではありますが…
実はalchemyというソフトウェアを知りました。
javaなのでwindowsやmacでも動くと思われます。もちろんubuntuでも動作しました。web版もあったりします。
という話はまた別の記事にするとして、今回、そのalchemyをデスクトップメニューに追加しようとして躓きました。
xfce4ではいつごろからかメニューエディタが消滅してしまい、alacarteというソフトで代用していたのですが、このalacarteが吐くメニューも、いつしかxfce4では対応しなくなっていたのですね。この辺、ごくまれにしか弄らないのですぐに忘れてしまいます。
また、macのquicksilverに似たランチャーソフト「kupfer」がこれまた便利で、アプリケーションメニューよりこっちをよく使っていたりするのもいかんのでしょうね。
そんなわけで手動でalchemyをメニューに登録した顛末を書いておきます。ちなみにxfce4公式の解説はこちら(英語)
まずファイル構成なのですが、通常、以下のようになっており、自分で改造したい場合は/usr/shareなどのファイルをいじるのではなく、ホームディレクトリの設定ディレクトリに複製したファイルを置き、そちらをいじりますので、ホームディレクトリの説明だけにとどめます。
- アプリケーションメニュー定義 .menuファイルの置き場
- ~/.config/menus/
- アプリケーションアイコン定義 .desktopファイルの置き場
- ~/.local/share/applications/
- サブメニューアイコン定義 .directoryファイルの置き場
- ~/.local/share/desktop-directories/
.desktopファイルと.directoryファイルが文字列として見た目が似ていてややこしいですが、全然違うものですので注意しましょう。そして基本的に、いじるのは.desktopファイルだけです。
.menuファイルとは、アプリケーションメニューアイコンのプロパティから設定する、メニューの大本となるファイルです。
これは通常システムデフォルトである場合、ホームディレクトリではなく/etc/xdg/menus/xfce-applications.menuとかが使われていると思います。この部分からカスタマイズしたい場合は、~/.config/menus/にコピーします。
ただ単にアイコンを既存のサブメニューに追加するだけならば、.menuファイルの内容の確認は必要ですが、書き換える必要はありません。
さてこの.menu、中身はXMLでして、各エントリはこのようになっています。非常に長いので、Graphicsサブメニューの部分だけを抽出しておきます。
<Menu> <Name>Graphics</Name> <Directory>xfce-graphics.directory</Directory> <Include> <Category>Graphics</Category> </Include> </Menu>
このうちDirectoryタグが示すxfce-graphics.directoryとは、/usr/share/desktop-directories あるいは ~/.local/share/desktop-directories にある.directoryファイルであり、その中身はサブメニューアイコンの定義とアイコンラベルの表示語句、そしてその語句の国際化定義です。
これにより、日本語環境下のアプリケーションメニューにおいては、「Graphics」サブメニューは、xfce-graphics.directoryで定義されている翻訳文字列「グラフィックス」として表示されます。
ですから、.directoryファイルはほとんどいじる必要はないでしょう。
そして…今回もっとも重要なCategoryタグは、このNameタグで示された「Graphics」サブメニューが対応するカテゴリーを示しています。
おや?
それではそのカテゴリーに対応するサブメニュー定義ファイルはどこにあるのでしょう?
上記のように、.directoryの中は翻訳用データとアイコンの定義ぐらいで、サブメニューの各アイコンについての記載は一切ありません。
実は、サブメニューの各アイコンをリスト的に定義するものは、
xfce4には無いのです。
これに気づくまでにしばらく時間を費やしました…orz
知ってしまえば当たり前ですがw
xfceでは(xfceだけではないかも?)いつの頃からかは知りませんが、
「.desktopファイルの中に記述されたCategoriesエントリに設定されたカテゴリにアイコンを登録する」
という仕組みになっており、これにより.desktopファイルを一つ書くだけで複数のサブメニューに同じ物を表示できるという事になっています。
ですから、通常、作るのは.desktopファイルだけでいいのです。
おいらが今回作成した~/.local/share/applications/alchemy.desktop は以下のようになってます。
[Desktop Entry] Version=1.0 Type=Application Name=Alchemy Comment= Exec=/usr/local/bin/alchemy Icon=setroubleshoot_icon Path= Terminal=false StartupNotify=false Categories=Graphics
一番重要なのがCategories=で、ここに、アプリを載せたいサブメニューに対して.menuファイルで設定されているCategoryタグのカテゴリ名を書いておきます。
すると、xfceが勝手に対応するサブメニューを調べて登録してくれるというわけです。
ubuntu 12.04のalacarteでは、このCategoriesエントリを吐いてくれないので全然メニューを弄れず、ほとんど役に立たないという現象が発生していました。
カテゴリーについての注意事項も一応書いておきます。
- カテゴリーを自作する時はX-というプレフィックスをつけるのが慣習だそうです。たとえばCreativeというカテゴリを自作したいのなら、そのまんまではなくX-Creativeなどとする(必須ではない)
- 複数のカテゴリーを.desktopファイルに記載する場合は、;で区切る。たとえばGraphics;X-Creativeというように。
- 逆にサブメニューを複数のカテゴリの集合にしたい場合は、.menuファイルのIncludeタグ内にCategoryタグを複数並べる。
なお、変更したらxfdesktop --reloadコマンドで再認識させないと更新されないようです…
fc2コメント:
> とろろさん
2014/02/12 19:32:52 |
trip:NbbOyPNtM/4/flzI
2014/02/11 23:57:54 | とろろ | URL
trip:VAlJsmYTNsKeQJ/+