Kategória: Linux všeobecne

Zmenené: 28. august 2011

XDG menu

Skôr alebo neskôr sa mnohí používatelia Linuxu začnú zaujímať ako funguje systém menu. Či už kvôli prispôsobeniu alebo len zo zvedavosti. Kdesi na nete som našiel tento popis, tak som ho preložil a pridal k nemu pár svojich poznámok. Nech slúži!

Systém menu v Linuxe sa skladá z rôznych súborov, ktoré majú pevné umiestnenie a príponu, ako i štruktúru:

  • menu je definované súbormi .menu;
  • podmenu sú definované v menu a popísané súbormi .directory;
  • položky v menu sú defiinované súbormi .desktop.

Podrobnosti a úplný zoznam možností hľadajte v špecifikácii menu prostredia.

Súbory definície menu (*.menu)

Súbory *.menu sú konfiguračné XML súbory, ktoré udávajú poradie, hierarchiu a zlučovanie menu i jeho položiek. Úpravou týchto súborov možno prispôsobiť menu pre všetkých používateľov alebo pre jedného konkrétneho používateľa, v závislosti na umiestnení súboru applications.menu, ktorý je upravovaný.

Umiestnenie súborov definície menu:

  • $XDG_CONFIG_DIRS/menus/ – systémové súbory *.menu
  • $XDG_CONFIG_HOME/menus/ – používateľské súbory *.menu

Súbor /etc/xdg/menus/applications.menu obsahuje definíciu hlavného menu Aplikácie.

  • ak nie je nastavené $XDG_CONFIG_DIRS, je použitá cesta /etc/xdg
  • ak nie je nastavené $XDG_CONFIG_HOME, je použitá cesta ~/.config

Prvky definície menu

  • <Menu> – koreňový prvok, ktorý môže obsahovať ďalšie vnorené prvky <Menu>, ktoré definujú podmenu (vnorenie týchto prvkov určuje štruktúru menu).
  • <Name> – udáva meno menu, každý prvok <Menu> musí obsahovať prvok <Name>.
  • <Directory> – udáva meno súboru položky podmenu *.directory, ktorá udáva meno, komentár a ikonu pre menu. Ak tento prvok nie je zadaný, potom je na zobrazenie mena menu použitý prvok <Name>. Predvolene sú súbory .directory hľadané v $XDG_DATA_DIRS/desktop-directories/.
  • <DefaultAppDirs> – inštrukcia, ktorá udáva, že budú vyhľadané všetky dostupné položky menu (*.desktop) z $XDG_DATA_DIRS/applications/. Ak nie je táto inštrukcia zahrnutá, potom nebudú vyhľadané položky *.desktop z týchto umiestnení.
  • <DefaultDirectoryDirs> – inštrukcia, ktorá udáva, že budú vyhľadané všetky dostupné položky podmenu (*.directory) z $XDG_DATA_DIRS /desktop-directories/. Ak táto inštrukcia nie je zahrnutá, potom nebudú vyhľadané položky *.directory z týchto umiestnení.
  • <Include> – obsahuje zoznam príslušných pravidiel, na základe ktorých je generovaný obsah menu. Môže zahŕňať pravidlá <Filename>, <Category>, <And>, <Or>, <Not> alebo <All>. Ak je použité viac ako jedno pravidlo, potom sú pravidlá zlúčené pomocou logického OR, takže menu obsahuje všetky položky, vyhovujúce aspoň jednému pravidlu.
  • <Exclude> – opak <Include>, teda všetky položky, ktoré vyhovujú tomuto prvku sú vylúčené z predchádzajúceho prvku <Include>. Kvôli tomuto sa musí tento prvok nachádzať až za prvkom <Include>.
  • <Filename> – pravidlo, ktoré vyberá položky menu, ktorých File-Id zodpovedá obsahu prvku <Filename>.
  • <Category> – pravidlo, ktoré vyberá položky menu, ktorých kľúč Categories zodpovedá obsahu prvku <Category>.
  • <And> – pravidlo, ktoré vyberá položky menu, ktoré sú zvolené všetkými vnorenými pravidlami v prvku <And>.
  • <Or> – pravidlo, ktoré vyberá položky menu, ktoré sú zvolené niektorým z vnorených pravidiel v prvku <Or>.
  • <Not> – pravidlo, ktoré nevyberá položky menu, ktoré sú vybrané niektorým z vnorených pravidiel v prvku <Not>.
  • <All> – pravidlo, ktoré vyberá všetky položky menu.

Súbory definície podmenu (*.directory)

Súbory *.directory obsahujú údaje o jednotlivých menu, ako ich mená, tooltip a ikonu. Systémové súbory položiek podmenu sú umiestnené v /usr/share/desktop-directories/.

Súbory definície podmenu musia byť umiestnené v adresári $XDG_DATA_DIRS/desktop-directories a musia mať príponu .directory. Súbory podmenu, špecifické pre používateľa, môžu byť umiestnené aj v $XDG_DATA_HOME/desktop-directories, ktorý je prehľadávaný prvý. Súbory podmenu sú zhromaždené zo všetkých adresárov, nastavených v premennej prostredia $XDG_DATA_DIRS, pričom je dodržané zadané poradie a adresáre uvedené skôr majú prednosť, ak existuje viacero súborov *.directory s rovnakým menom.

  • ak nie je nastavené $XDG_DATA_DIRS, je použitá cesta /usr/share
  • ak nie je nastavené $XDG_DATA_HOME, je použitá cesta ~/.local/share
[Desktop Entry]
Name=Graphics
Name[sk]=Grafika

Comment=Graphics applications
Comment[sk]=Grafické aplikácie

Icon=gnome-graphics
Type=Directory
Encoding=UTF-8

Prvky definície podmenu

  • Name – udáva meno menu, ktoré je zobrazené v menu.
  • Comment – udáva krátky popis menu, ktorý je zobrazený ako tooltip pri ukázaní na menu.
  • Icon – udáva meno súboru ikony podmenu, neobsahuje cestu ani príponu mena súboru.
  • Type – udáva typ menu, hodnota je vždy Directory.

Súbory položiek menu (*.desktop)

Súbory *.desktop obsahujú údaje o položkách menu, ako ich meno, príkaz na spustenie a ikonu. Súbory položiek menu môžu obsahovať aj kľúčové slová, ktoré určujú umiestnenie položky menu v hierarchii menu. Systémové súbory položiek menu sú umiestnené v /usr/share/applications/.

Používateľské súbory položiek menu sú umiestnené v $HOME/.local/share/applications/ a možno ich použiť na pridanie aplikácií do podmenu Otvoriť pomocou, ktoré sa objavuje pri pravom kliknutí na súbor. Súbor $HOME/.local/share/applications/mimeinfo.cache obsahuje informácie o priradení MIME typov s aplikáciami v $HOME/.local/share/applications/*.desktop s typmi súborov zadanými v súboroch *.desktop.

Súbory položiek menu musi abyť umiestnené v adresári $XDG_DATA_DIRS/applications a musia mať príponu .desktop. Položky menu, špecifické pre používateľa, môžu byť umiestnené aj v adresári $XDG_DATA_HOME/applications, ktorý je prehľadávaný prvý. Položky menu sú zhromaždené zo všetkých adresárov, nastavených v premennej prostredia $XDG_DATA_DIRS, pričom je dodržané zadané poradie a adresáre uvedené skôr majú prednosť, ak existuje viacero súborov .desktop s rovnakým menom.

  • ak nie je nastavené $XDG_DATA_DIRS, je použitá cesta /usr/share
  • ak nie je nastavené $XDG_DATA_HOME, je použitá cesta ~/.local/share
[Desktop Entry]
Name=Calculator
Name[sk]=Kalkulačka

Comment=Perform calculations
Comment[sk]=Vykonáva kalkulácie

GenericName=Graphic calculator
GenericName[sk]=Grafická kalkulačka

Exec=gcalctool
TryExec=qcalctool
Icon=accessories-calculator
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;Calculator

Prvky definície položky

  • Categories – udáva kľúčové slová, ktoré popisujú umiestnenie položky. Kľúčové slová sú oddelené bodkočiarkami (;). Zoznam štandardných kľúčových slov kategórií je v špecifikácii menu. Súbory definície menu mapujú položky menu do menu pomocou pravidiel v kľúči Categories,

  • Comment – udáva krátky popis položky, ktorý je zobrazený pri ukázaní na položku v menu,

  • Exec – udáva príkaz, ktorý je spustený pri použití položky menu,

  • TryExec – obsahuje príkaz, ktorý musí existovať v systémovej ceste, inak nie je súbor desktop použitý,

  • Icon – udáva meno súboru ikony, neobsahuje cestu, ani príponu súboru,

  • MimeType – udáva MIME typy, ktoré program spracováva,

  • Name – udáva meno položky, ktoré je zobrazené v menu,

  • NoDisplay – udáva, že aplikácia existuje, ale nemá byť zobrazená v menu,

  • Terminal – udáva, či má byť príkaz v kľúči Exec spustený v termináli, ak je hodnota true, je príkaz spustený v okne terminálu. Ak príkaz nevytvára okno, v ktorom beží, musí byť hodnota tohoto kľúča true,

  • Type udáva typ položky:

    • Application: položka, ktorá spúšťa aplikáciu,
    • Link: položka, ktorá odkazuje na súbor, adresár alebo vzdialený zdroj (napr. FTP stránka, web stránka, zdieľanie Windows…),
    • FSDevice: položka, ktorá je systémové zariadenie,
    • Directory: položka, ktorá je adresár.

Odstránenie položiek menu

Pre jednotlivých používateľov

Konfiguračné súbory menu pre používateľa umiestnené v adresári $HOME/.config/menus/ sú konfiguračné XML súbory, ktoré môžu prepísať predvolené menu. Napríklad na odstránenie položky menu Kalkulačka z podmenu Príslušenstvo, treba upraviť súbor applications.menu v adresári $HOME/.config/menus/, pridaním novej sekcie <Menu> a použitím prvku <Exclude>:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
     "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">

<!-- File created by desktop-file-utils version 0.8 -->
<Menu>
  <Name>Applications</Name>
  <MergeFile>/etc/xdg/menus/applications.menu</MergeFile>

  <!-- Removes the Calculator from the Accessories submenu -->
  <Menu>
    <Name>Accessories</Name>
    <Exclude>
      <Filename>gnome-gcalctool.desktop</Filename>
    </Exclude>
  </Menu>
  <!-- END of Calculator removal content -->

</Menu>

Súbor *.desktop, ktorý zodpovedá zadanej položke menu možno nájsť v adresári /usr/share/applications/. Súbor gnome-gcalctool.desktop zodpovedá položke menu Kalkulačka. Meno podmenu, v tomto prípade Accessories (Príslušenstvo) možno určiť zo súborov umiestnených v adresári /usr/share/desktop-directories/.Podobný spôsob možno na odstránenie iných položiek z menu Aplikácie a jeho podmenu.

Pre všetkých používateľov

Pre odstránenie položky Dasher z podmenu Accessories (Príslušenstvo), teba upraviť súbor /etc/xdg/menus/applications.menu, pridaním nasledujúcej časti pred poslednú značku </Menu>:

<Menu>
    <Name>Accessories</Name>
    <Exclude>
      <Filename>gnome-dasher.desktop</Filename>
    </Exclude>
  </Menu>

</Menu> <!-- End Applications -->

Príslušné meno súboru *.desktop pre danú položku menu možno určiť zo súborov v adresári /usr/share/applications/.

Odstránenie podmenu

Pre jednotivých používateľov

Pre odstránenie celého podmenu Systémové nastavenia pre používateľa, treba použiť prvok <Deleted/> v súbore $HOME/.config/menus/applications.menu:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
     "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">

<!-- File created by desktop-file-utils version 0.8 -->
<Menu>
  <Name>Applications</Name>
  <MergeFile>/etc/xdg/menus/applications.menu</MergeFile>

  <!-- Removes the System Settings submenu from the Applications menu-->
  <Menu>
    <Name>System Settings</Name>
    <Deleted/>
  </Menu>
<!-- END of System Settings removal content -->

</Menu>

Ostatné submenu z menu Aplikácie môžu byť odstránené podobným spôsobom. Mená podmenu možno určiť zo súborov umiestnených v adresári /usr/share/desktop-directories/.

Pre všetkých používateľov

Pre odstránenie podmenu Systémové nastavenia z menu Aplikácie, treba upraviť súbor /etc/xdg/menus/applications.menu, pridaním nasledujúcej časti pred poslednú značku </Menu>:

<Menu>
    <Name>System Settings</Name>
    <Deleted/>
  </Menu>
</Menu> <!-- End Applications -->

Mená podmenu možno určiť zo súborov v adresári /usr/share/desktop-directories/.