Xdg-menu

提供: ArchWiki
ナビゲーションに移動 検索に移動

xdg-menu は以下のウィンドウマネージャ用の XDG デスクトップメニュー を生成するツールです:

KDE, GNOME, Xfce, Enlightenment は最初から XDG に対応しています。

インストール

archlinux-xdg-menu パッケージをインストールしてください。

メニューの階層

  • アプリケーション
    • アクセシビリティ
    • アクセサリ
    • 開発
    • 教育
    • ゲーム
    • グラフィック
    • インターネット
    • マルチメディア
    • オフィス
    • その他
    • 科学
    • システム

設定

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

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

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 を使う

$ 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 を使う

$ xdg_menu --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu >>~/.icewm/programs

update-menus を使う

  • /etc/update-menus.conf で icewm をアンコメント
  • root で update-menus を実行
  • ~/.icewm/programs/var/cache/xdg-menu/icewm/programs のシンボリックリンクを作成

Ion3

xdg_menu を使う

$ 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"),
})

...

update-menus を使う

  • /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 を使う

$ xdg_menu --format fluxbox  --root-menu /etc/xdg/menus/arch-applications.menu >~/.fluxbox/my-menu

メニューファイルを変更して生成したメニューを include する。

以下のように行を追加してください:

      [include] (my-menu)

update-menus を使う

  • /etc/update-menus.conf で fluxbox をアンコメント
  • root で update-menus を実行
  • メニューファイルを変更して生成したメニューをインクルード

以下のように行を追加してください:

      [include] (/var/cache/xdg-menu/fluxbox/boxrc)

OpenBox

xdg_menu を使う

次のコマンドでメニューを生成:

$ xdg_menu --format openbox3 --root-menu /etc/xdg/menus/arch-applications.menu > xdg-menu.xml

そしてメニューを menu.xml に手動で追加してください。例えば、menu.xmlxdg-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>

update-menus を使う

  • /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 を使う

次を実行:

$ 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')

update-menus を使う

  • /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 を使う

次を実行:

$ 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 コマンドをパラメータとして追加することも可能です。

update-menus を使う

  • /etc/update-menus.conf の WindowMaker をアンコメント
  • root で update-menus を実行
  • メニューファイルに以下を追加:
#include "/var/cache/xdg-menu/WindowMaker/wmrc"

Fvwm2

xdg_menu を使う

メニューを生成:

$ 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

update-menus を使う

  • /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 を使う

$ xdg_menu --format blackbox  --root-menu /etc/xdg/menus/arch-applications.menu >my-menu

メニューファイルを修正して生成したメニューを読み込んで下さい。

例えば以下のように行を追加:

[include] (my-menu)

update-menus を使う

  • /etc/update-menus.conf の blackbox をアンコメント
  • root で update-menus を実行
  • メニューファイルを編集して生成したメニューを読み込む

例えば以下のように行を追加:

[include] (/var/cache/xdg-menu/blackbox/boxrc)

参照