Xdg-menu
xdg-menu は Free Desktop メニュースタンダード を使って WM 用のメニューを生成します。公式リポジトリから archlinux-xdg-menu をインストールできます。
以下のウィンドウマネージャがサポートされています:
- twm
- ion3
- WindowMaker
- fvwm2
- icewm
- blackbox
- fluxbox
- openbox
- awesome
KDE, Gnome, Xfce, Enlightenment は最初から XDG に対応しています。
目次
メニューの階層
- アプリケーション
- アクセシビリティ
- アクセサリ
- 開発
- 教育
- ゲーム
- グラフィック
- インターネット
- マルチメディア
- オフィス
- その他
- 科学
- システム
設定
Xdg_menu は3つの情報源に基づいてメニューを生成します: ルートメニューあるいはコマンドラインで指定した XML メニューテンプレート、最後に実行されたときにキャッシュされた情報、そして一連の設定ファイルです。
- XML メニューテンプレートは
/etc/xdg/menus
に存在します。 - xdg_menu のコードを変更してレイアウトを変えるときは、
~/.xdg_menu_cache
内のファイルを全て削除しないと変更箇所が perl スクリプトに反映されない理由を見つけるのに無駄に時間をかけることになります。 - アプリケーションの個別設定は
/usr/share/applications
にあります。
他の設定ファイルのディレクトリは /usr/share
下で見つけられます。通常、それらのディレクトリに変更を加える必要はありません。ただし、メニューのレイアウトの表示方法などを変更したい場合はメニューテンプレートを細かく修正できます。大きな変更をするときは実際の xdg_menu の perl スクリプトを調整する必要があります。アプリケーションが表示されなかったり、おかしな名前で表示されるような場合、/usr/share/applications
の .desktop
ファイルを確認してください。標準ファイル をチェックしてください。
他のディレクトリのデスクトップエントリを追加
デフォルトでは、Xdg-menu は /usr/share/applications
にデスクトップエントリをインストールするアプリケーションを使います。~/.local/share/applications
などのユーザーフォルダにデスクトップエントリをインストールするアプリケーションをメニューに追加するには、/etc/xdg/menus/arch-applications.menu
ファイルを編集して適当なディレクトリの <AppDir>
タグを追加してください。以下を参照:
/etc/xdg/menus/arch-applications.menu
<Menu> <Name>Applications</Name> <Directory>Arch-Applications.directory</Directory> <DefaultAppDirs/> <AppDir>/home/username/.local/share/applications</AppDir> <DefaultDirectoryDirs/> <DefaultMergeDirs/> ...
使用方法
xdg_menu [--format <format>] [--desktop <desktop>] [--charset <charset>] [--language <language>] [--root-menu <root-menu>] [--die-on-error] [--fullmenu] [--help] format - output format possible formats: twm, WindowMaker, fvwm2, icewm, ion3 blackbox, fluxbox, openbox, xfce4, openbox3, openbox3-pipe, awesome readable default: WindowMaker fullmenu - output a full menu and not only a submenu desktop - desktop name for NotShowIn and OnlyShowIn default: the same as format charset - output charset default: <locale> language - output language default: <locale> root-menu - location of root menu file default: /opt/gnome/etc/xdg/menus/applications.menu die-on-error - abort execution on any error, default: try to continue verbose - print debugging information help - print this text
update-menus は XDG のファイルから WM のメニューを更新し、設定で自動的に更新することもできます。
/etc/update-menus.conf
を利用する xdg_menu のスクリプトラッパーです。
archlinux-xdg-menu (xdg_menu) パッケージをインストールする必要があります。
/etc/update-menus.conf
はウィンドウマネージャのリストから生成するメニューを選択します。# でコメントを付与できます。
生成されたメニューは全て /var/cache/xdg-menu/
に保存されます。詳しくはこのページのサンプルセクションを見て下さい。
サンプル
Awesome
$ xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu >~/.config/awesome/archmenu.lua
実行後、以下のように rc.lua
を編集:
- 新しい menu.lua ファイルの require ステートメントを追加
- xdgmenu を呼び出す新しいメニューの awful.menu オブジェクトのエントリを追加
... xdg_menu = require("archmenu") ... ... mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, { "Applications", xdgmenu }, { "open terminal", terminal } } }) ...
IceWM
$ xdg_menu --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu >>~/.icewm/programs
/etc/update-menus.conf
で icewm をアンコメント- root で update-menus を実行
~/.icewm/programs
に/var/cache/xdg-menu/icewm/programs
のシンボリックリンクを作成
Ion3
$ xdg_menu --format ion3 --root-menu /etc/xdg/menus/arch-applications.menu >~/.ion3/default-session--0/_xdg-menu.lua
実行後、cfg_menus.lua
を編集して _xdg-menu.lua
ファイルを記述してメインメニューにメニューを追加してください。例:
... dopath("_xdg-menu") -- Main menu defmenu("mainmenu", { submenu("XDG Menu", "<NAME-OF-FIRST-MENU-IN-_xdg-menu.lua-FILE>"), submenu("Programs", "appmenu"), menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"), menuentry("Help", "mod_query.query_man(_)"), menuentry("About Ion", "mod_query.show_about_ion(_)"), submenu("Styles", "stylemenu"), submenu("Session", "sessionmenu"), }) ...
/etc/update-menus.conf
の ion3 をアンコメント- root で update-menus を実行
cfg_menus.lua
を編集してxdg-menu.lua
ファイルを記述しメインメニューにメニューを追加
例:
... dopath("/var/cache/xdg-menu/ion3/xdg-menu.lua") -- Main menu defmenu("mainmenu", { submenu("XDG Menu", "<NAME-OF-FIRST-MENU-IN-xdg-menu.lua-FILE>"), submenu("Programs", "appmenu"), menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"), menuentry("Help", "mod_query.query_man(_)"), menuentry("About Ion", "mod_query.show_about_ion(_)"), submenu("Styles", "stylemenu"), submenu("Session", "sessionmenu"), }) ...
FluxBox
$ xdg_menu --format fluxbox --root-menu /etc/xdg/menus/arch-applications.menu >~/.fluxbox/my-menu
メニューファイルを変更して生成したメニューを include する。
以下のように行を追加してください:
[include] (my-menu)
/etc/update-menus.conf
で fluxbox をアンコメント- root で update-menus を実行
- メニューファイルを変更して生成したメニューをインクルード
以下のように行を追加してください:
[include] (/var/cache/xdg-menu/fluxbox/boxrc)
OpenBox
次のコマンドでメニューを生成:
$ xdg_menu --format openbox3 --root-menu /etc/xdg/menus/arch-applications.menu > xdg-menu.xml
そしてメニューを menu.xml
に手動で追加してください。例えば、menu.xml
に xdg-menu.xml
を配置して root-menu に以下を追加:
<menu id="Applications" />
パイプメニューを使う
xdg_open をパイプメニューとして使うことで新しいアプリケーションをインストールした時に自動的にメニューを更新させることができます。
以下を menu.xml
のルートメニュータグの間のどこかに追加してください:
<menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />
例:
<?xml version="1.0" encoding="UTF-8"?> <openbox_menu xmlns="http://openbox.org/3.4/menu"> <menu id="root-menu" label="Openbox 3"> <menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" /> <separator /> <item label="Log Out"> <action name="Exit"> <prompt>yes</prompt> </action> </item> </menu> </openbox_menu>
/etc/update-menus.conf
の openbox をアンコメント- root で update-menus を実行
menu.xml
ファイルを変更して生成したメニューを読み込む
例えば、以下をルートメニューに追加してください:
<menu id="xdg-menu" label="XDG Menu" execute="cat /var/cache/xdg-menu/openbox/menu.xml"/>
Twm
次を実行:
$ xdg_menu --format twm --root-menu /etc/xdg/menus/arch-applications.menu >my-twm-menu
そして twmrc に手動で追加してください。m4 プリプロセッサを使用する vtwm や ctwm などの twm の亜種を使用する場合は、以下を *twmrc に追加することでメニューを読み込めます:
sinclude(`/PATH/TO/my-twm-menu')
/etc/update-menus.conf
内の twm をアンコメント/etc/X11/twm/system.twmrc
ファイルにアプリケーションメニューを追加 (以下の行を defops メニューに追記):
"apps" f.menu "Applications"
- root で update-menus を実行
twm -f /var/cache/xdg-menu/twm/twmrc
を実行
(/etc/X11/twm/system.twmrc
をカスタマイズすることもできます)。
WindowMaker
次を実行:
$ xdg_menu --format WindowMaker --root-menu /etc/xdg/menus/arch-applications.menu >my-wm-menu
WindowMaker のメニューファイルに以下を追加:
#include "my-wm-menu"
WPrefs の "Application Menu Definitions" を使用して "Generated Submenu" に xdg コマンドをパラメータとして追加することも可能です。
/etc/update-menus.conf
の WindowMaker をアンコメント- root で update-menus を実行
- メニューファイルに以下を追加:
#include "/var/cache/xdg-menu/WindowMaker/wmrc"
Fvwm2
メニューを生成:
$ xdg_menu --format fvwm2 --root-menu /etc/xdg/menus/arch-applications.menu >fvwm2-menu
メニューをルートメニューに追加:
read fvwm2-menu AddToMenu MenuFvwmRoot "Root Menu" Title + "&0. XDG Menu" Popup xdg_menu
/etc/update-menus.conf
の fvwm2 をアンコメント- root で update-menus を実行
.fvwm2rc
ファイルを開いて生成したメニューを指定。例:
AddToMenu MenuFvwmRoot "Root Menu" Title + "&0. XDG Menu" Popup xdg_menu
read /var/cache/xdg-menu/fvwm2/fvwm2rc
BlackBox
$ xdg_menu --format blackbox --root-menu /etc/xdg/menus/arch-applications.menu >my-menu
メニューファイルを修正して生成したメニューを読み込んで下さい。
例えば以下のように行を追加:
[include] (my-menu)
/etc/update-menus.conf
の blackbox をアンコメント- root で update-menus を実行
- メニューファイルを編集して生成したメニューを読み込む
例えば以下のように行を追加:
[include] (/var/cache/xdg-menu/blackbox/boxrc)