Il y a souvent sous KDE des soucis de menus. Entrées en double, ou qui disparaissent. Ce qui suit est une compile de ce que j'ai testé avec plus ou moins de succès.
Tout d'abord la base. Comme souvent, il n'y a pas un mais deux systèmes de menus sous linux. L'un est d'origine conjointe Debian/freedesktop.org et l'autre propre à KDE.
L'idée est qu'avant kde 3.2, il n'y avait pas de système unifié pour les menus. Gnome avait son système, Kde aussi. Pour KDE, les menus étaient stockés de manière arborescente dans /usr/share/applnk (ou $HOME/.kde/share/applnk). Un fichier .desktop correspondant à une application, les sous dossiers aux sous-menus.
Le groupe de travail freedesktop.org a donc travaillé sur la spécification d'un menu unifié (menus dits XDG). La structure est maintenant stockée dans un fichier .menu comprenant l'arborescence et chaque entrée correspond à un fichier .desktop (comme pour kde). par exemple :
Les fichiers .menus sont stockés dans le chemin contrôlé par la variable $XDG_CONFIG_DIRS (généralement $KDEDIR/etc/xdg/menus et /etc/xdg/menus). La version utilisateur est quant à elle placée dans $XDG_CONFIG_HOME ($HOME/.config/menus).
Les fichiers .desktop sont stockés dans le chemin contrôlé par la variable $XDG_DATA_DIRS (généralement $KDEDIR/share/applications, /usr/share/applications, /usr/local/share/applications). La version utilisateur se trouve dans $XDG_DATA_HOME ($HOME/.local/applications)
Les fichiers .directory décrivant les sous menus sont contrôlé par les mêmes variables que les .desktop ou le cas échéant dans les dossiers $KDEDIR/share/desktop-directories, /usr/share/desktop-directories, /usr/local/share/desktop-directories et $HOME/.local/desktop-directories pour l'utilisateur.
Pour faire simple on va commence par "sanifier" les menus communs à tous (il faut être root).
Lors de l'installation d'un pacquage, les entrées de menus associés aux applications sont présente dans un fichier à un format spécial. Ce fichier est copié en /usr/lib/menu.
Prenons l'exemple du pacquage synce qui contient une définition de menus stocké dans le fichier /usr/lib/menu/synce-software-manager. Son contenu est le suivant :
Cela donne toutes les infos concernant l'appli, ainsi que la dépendance avec X11. Une fois le fichier copié du RPM par rpm/urpmi, le script d'installer du rpm va fabriquer l'entrée de menu à partir de ce fichier. Pour se faire, il va exécuter l'outil Debian update-menus.
Cet utilitaire a pour objectif de scanner tous les fichiers /usr/lib/menu et fabriquer pour chaque entrée un fichier menu au norme FreeDesktop.org (fichier .desktop) qu'il va déplacer en /var/lib/menu-xdg/applications/Mandrakelinux (spécifique à la drake mais les autres distro devraient retrouver leurs petits). L'utilitaire va créer, si nécessaire, les sous dossier correspondant à l'entrée "section" du précédent fichier de package. Cette arborescence est celle que l'on retrouve dans nos menus KDE, Gnome, etc...
update-menus ne se limite pas à cela, il va aussi lancer des scriptes pour chaque fichier de définition de package. Ces traitements sont assurés par en exécutant séquentiellement tout script contenu dans /etc/menu-methods. On trouvera par exemple dans ce dossier les scriptes créant des structures de menus pour enlightenment (s'il est installé).
Enfin, update-menus va retrier les entrées de package afin de pouvoir ranger les menus (les fichiers .desktop) dans d'autres sections que celles que prévues par les concepteurs du package. Si l'on décide par exemple de déplacer tous les Autres bureautique/traitement de texte et traitement de textes. Le fichier de paramétrage des traductions de section étant assuré par le fichier /etc/menu-methods/translate-menus.
Dans tous les cas faire un man update-menus pour plus d'infos sur le sujet.
Voilà donc comment les menus apparaissent dans kde à chaque installation de package. Maintenant donc, rien ne nous empêche si les choses vont mal de lancer update-menus à la main. Pour cela, il suffit de taper :
Pour info, -n implique un lancement synchrone (ne rendant la main qu'à la fin du traitement) et -v pour afficher le travail effectué. On peut aussi spécifier -d pour une sortie de debuggage.
Il suffit ensuite de vérifier que les menus sont bien générés en /var/lib/menu-xdg/applications/Mandrakelinux.
Dés fois, les menus n'apparaissent toujours pas dans le dossier menu-xdg, il s'agit alors peut-être d'une erreur dans la définition de menus du package. J'ai eu un cas comme cela avec le package OpenOffice 1.9 de thac. Le fichier /usr/lib/menu/OpenOffice semblait bon et j'ai galèrer pendant un certain temps avant de me décifer à replacer les package(OpenOffice) par des package(menu) (pourquoi ?!?) et là, au update-menus suivant tout c'est bien passé.
D'un point de vue utilisateur, update-menus effectue le même travail qu'au niveau root mais se base en plus sur les dossiers locaux au compte (~/.menu). Cela permet d'altérer la config de base pour des besoins spécifiques.
Avant l'apparition des menus freedesktop.org, kde avait déjà son propre système de menus. Les menus par défaut, étaient stockés dans /usr/share/applnk (et ensuite l'arborescence des menus) puis ceux de l'utilisateur dans ~/.kde/share/applnk. J'avoue ne pas bien avoir compris comment kde arbitre aujourd'hui entre freedesktop et applnk, c'est encore assez obscure (est-ce que update-menus a un scripte dans "menu-methods" qui généré les menus kde et qui m'aurait échappé ? Le script menu peut-être ?).
Il est possible de recharger les menus de kde sans avoir à relance. Il suffit pour cela de lancer la commande kbuildsycoca et pour réinitialiser le kicker dcop kicker kicker restart.
Tout d'abord, mandrake a mis en place un système de menus simplifiés qui complique un peu tout. Du coup il y a 3 systèmes de menu sous mdk, normal, simplifié et complet. Les deux derniers sont gérés par menudrake. Le passage d'un type de menu à l'autre est géré par la présence de :
En gros, c'est un joli bazar géré par le scripte /etc/profile.d/menu-xdg.sh
On comprend alors que le menu standard et simplifié de mandrake sont en fait deux versions de menus type XDG et que sinon, ce sont les menus kde qui priment (/usr/share/applnk).
Pour utiliser les menus kde, il suffira donc de renomer en .old le scripte menu-xdg.sh. Et pour utiliser les menus xdg standard, on remplacera ce scripte par :
Le premier scripte est à lancer en tant que root. Le second en tant qu'utilisateur (dans konsole avec kde lancé !!). Ils reprennent toutes les étapes expliquées dans ce tuto.
Normalement, tout est maintenant en ordre.
Poster un nouveau commentaire