dothikoのカクカクワールド2D REBOOT

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか色々。

xfce4.8でのアプリケーションメニュー編集について

この記事はfc2から引っ越した記事です

既にxfceも4.11に到達し、ubuntu 14.04 LTSリリースも差し迫っている感のある昨今。
debianのjessieも今年11月にフリーズフェイズに移行だそうでして、debianも悪くないかな〜とかいろいろ考えるそんな時に今更な話ではありますが…

実はalchemyというソフトウェアを知りました。
javaなのでwindowsmacでも動くと思われます。もちろんubuntuでも動作しました。web版もあったりします。

という話はまた別の記事にするとして、今回、そのalchemyをデスクトップメニューに追加しようとして躓きました。

xfce4ではいつごろからかメニューエディタが消滅してしまい、alacarteというソフトで代用していたのですが、このalacarteが吐くメニューも、いつしかxfce4では対応しなくなっていたのですね。この辺、ごくまれにしか弄らないのですぐに忘れてしまいます。
また、macquicksilverに似たランチャーソフト「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なのでwindowsmacでも動くと思われます。もちろんubuntuでも動作しました。web版もあったりします。

という話はまた別の記事にするとして、今回、そのalchemyをデスクトップメニューに追加しようとして躓きました。

xfce4ではいつごろからかメニューエディタが消滅してしまい、alacarteというソフトで代用していたのですが、このalacarteが吐くメニューも、いつしかxfce4では対応しなくなっていたのですね。この辺、ごくまれにしか弄らないのですぐに忘れてしまいます。
また、macquicksilverに似たランチャーソフト「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/11 23:57:54 | とろろ | URL

trip:VAlJsmYTNsKeQJ/+

xfceを使われているのですね。 軽いからでしょうか? 最近は、絵を描く時に資料を参照するサブPCの Ubuntuは12.04でUnityでそのまま使っていますが、 CPUがAtom(!)なので、ちょっと重い感じがしています。

> とろろさん

2014/02/12 19:32:52 | dothiko

trip:NbbOyPNtM/4/flzI

> xfceを使われているのですね。 > 軽いからでしょうか? 比較的軽いのと高機能のバランスがいい感じが気に入っています。あとさらなる軽さを目指して、ウィンドウのソフトシャドウなどのコンポジット効果をoffにしています xfceはなんといっても、ウィンドウを Windowsキー(デフォルトではaltキーですが)を押したままマウスでドラッグすれば ウィンドウのどこを掴んでも移動できるのがメチャクチャ気に入っています。 そのまま画面外にドラッグすれば仮想デスクトップで次のデスクトップに移動できるのも使いやすいのです。 さらに、xfceは仮想デスクトップのインジケーター上でもウィンドウを移動させられるのですが、確か2008年ごろにこれが出来たのはxfceだけだった気がします。 gnomeは今はどうなってるのかわかりませんけどね…なんだかgnome3になって非常に不評だったので近寄っていません(^^; これならxubuntuでもいい気がしていますというか、多分殆ど同じだと思うんですけどね… > 最近は、絵を描く時に資料を参照するサブPCの > Ubuntuは12.04でUnityでそのまま使っていますが、 > CPUがAtom(!)なので、ちょっと重い感じがしています。 AtomPentium4の3GHz相当とか言われてたのでそれなりのパワーがあるのかと思ってましたが、時代の流れを感じますね…Unityはグラフィック効果を多用しているので苦しいかもです。 まぁ、xfceならatomでもそこそこ…とは思うのですが、xfceも昔よりは重くなっているそうです。 lxdeというのがxfceよりさらに軽くて、機能もそこそこ、見栄えもそこそこなので、atomには向いてるかもですね。
この記事におけるコメントのトリップは、バックアップによって取得されたものを、更に独自の方法でハッシュ化したものであり、fc2ブログでの表示とは異なります