alacarte의 한계를 넘어설 수 있다.
(이하는 Ubuntu 10.10에서의 내용이다.)

아래의 장소들과 깊은 관계되어 있다.
System default value가 들어 있는 곳 :

* /etc/xdg/ -> menus

User value가 들어 있는 곳

* ~/.config/ -> menus
 * ~/.local/share/ -> desktop-directories(- Directory), applications(- Menu Items)

.desktop 들어 있는 standard location

* /usr/share/applications/

크게 '.directory'와 '.desktop' 두 개의 확장자를 기억해 둘 필요가 있다.
'.directory'는 메뉴의 directory정보이고, '.desktop'은 메뉴 item의 정보라는 것 정도만 기억하자.

실험적으로, alacarte로 directory와 item을 만들어 보자.

pannel -> Application -> right click -> Edit Menus

로 들어가면 쉽게 만들어 볼 수 있다. GUI환경이라 skip...

만들었으면,  "~/.local/share/desktop-directories"로 가 보자. 그러면,  alacarte-madexx.directory 라는 file들이 새로 생겼을 것이고, 이 파일을 열어보면, GUI환경에서 새로 추가한 directory정보들과 일치함을 알 수 있다.
그리고 이번에는 "~/.local/share/applications"로 가 보자. alacarte-madexx.desktop 이라는 새로운 파일들을 볼 수 있고, 내용은 GUI환경에서 추가한, menu item정보임을 쉽게 알 수 있다.
이제 "~/.config/menus/"로 가서 applications.menu를 열어보자. 그러면, 위에서 봤던, '.directory' 파일과  '.desktop'파일의 이름이 나오는 메뉴 tag가 새로이 생성된 것을 알 수 있다.
간단히 정리하면, alacarte로 새로운 메뉴와 메뉴 item을 만들면 다음과 같은 파일이 생성/수정 된다.
(alacarte로 첫 메뉴/item을 만들었을 경우를 가정.)

* ~/.local/share/desktop-directories/alacarte-made.directory (추가) -- *1
* ~/.local/share/applications/alacarte-made.desktop (추가) -- *2
* ~/.config/menus/applications.menu (수정) -- *3

*1, *2는 메뉴/item 의 내용에 대한 정보이고, *3이 메뉴 구조에 대한 정보이다.

이제 case study로 실습해보자.
Ubuntu 10.10에서 Ubuntu Software Center에서 wine을 설치하고 이를 Applications 메인 메뉴에 등록해보자.
설치는 간단하니 skip하고...
설치가 끝나면 "/usr/share/applications"에  'wine.desktop, wine-xxxx.desktop' file들이 새롭게 생긴 것을 볼 수 있다. 이제 우리는 이걸 main menu에 잘 등록해 주기만 하면 된다.
그냥 하나씩 등록해도 되겠으나, 일반적으로 wine의 메뉴는 아래의 구조를 가진다.

wine
 +- Programs
 |    +- Accessories
 |        +- Notepad
 |
 |- Browse C: Drive
 |- Configure Wine
 +- Uninstall Wine Software

"각 '.desktop' 파일을 열어보면, category항목들이 보일 것이다. 특히 'wine-notepad.desktop'을 모면 "Categories=Wine-Programs-Accessories;"를 볼 수 있다.  즉 Category구조가 메뉴의 구조가 되고 있다. 이런 사항을 반영해서, *3 를 수정하면 된다.
그냥 direct로 수정해도 되겠으나, 차후 maintenance를 위해서 wine 메뉴는 따로 빼서 만들고 이를 *3에 merge하는 방식이 더 나아 보인다.
아래는 필자가 manual하게 추가한 결과이다.

*3에 추가

<Menu>
  <Name>Wine</Name>
  <MergeFile>wine.menu</MergeFile>
  <Directory>Wine.directory</Directory>
  <Include>
    <Category>Wine</Category>
    <Filename>wine.desktop</Filename>
  </Include>
  <Exclude>
    <Filename>wine.desktop</Filename>
  </Exclude>
  <AppDir>/home/hbg683/.local/share/applications</AppDir>
</Menu>

~/.config/menu/wine.menu 추가

<Menu>
  <Name>Wine</Name>
  <Directory>Wine.directory</Directory>
  <Include>
    <Category>Wine</Category>
     <Filename>wine.desktop</Filename>
  </Include>
  <AppDir>/home/hbg683/.local/share/applications</AppDir>
  <Menu>
    <Name>Programs</Name>
    <Directory>Wine-Program.directory</Directory>
    <DefaultLayout inline="false"/>
    <Menu>
      <Name>Accessories</Name>
      <Directory>Wine-Programs.Accessories.directory</Directory>
      <Include>
        <Category>Wine-Programs-Accessories</Category>
      </Include>
    </Menu>
    <DirectoryDir>/home/hbg683/.local/share/desktop-directories</DirectoryDir>
  </Menu>
  <DefaultLayout inline="false"/>
  <Exclude>
    <Filename>wine.desktop</Filename>
  </Exclude>
</Menu>

'~/.local/share/desktop-directories'에 각종 '.directory'파일 추가

Wine.directory
[Desktop Entry]
Name=Wine
Comment=Wine Windoes Program Loader
Type=Directory
Icon=wine
X-Ubuntu-Gettext-Domain=gnome-menus
Wine-Programs.directory, Wine-Programs-Accessories.directory 추가 (내용은 생략)

끝.

+ Recent posts