#1 Le 19/12/2009, à 17:48
- btmtrn
{{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Bonjour,
Je suis en train de tester Openbox (sous Ubuntu 9.10 Netbook Remix avec un A.A.O A110) et j'aime bien, mais le problème est que le menu (clic droit sur le bureau) n'affiche pas les applications comme avec GNOME. J'ai cherché et je suis tombé sur cette page (qui concerne Archlinux avec GNOME et Openbox) qui explique qu'il est possible d'avoir des menus « dynamiques », avec la même organisation que sous GNOME et qui sont mis à jour avec les nouveaux logiciels installés.
J'ai suivi la procédure décrite sur le site et j'ai donc ajouté la ligne :
<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>
dans mon fichier menu.xml, mais ça ne fait rien. J'ai bien un menu « Application », mais rien dedans (juste un petit rectangle vide qui bloque un peu le menu).
Tous les paquets nécessaires (dont gnome-menus) sont bien installés, je ne vois pas d'où vient le problème.
Pouvez-vous m'aider ? Merci d'avance !
Dernière modification par btmtrn (Le 21/12/2009, à 21:27)
Hors ligne
#2 Le 19/12/2009, à 18:26
- wido
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Bonjour,
tu pourrais nous coller le fichier ~/.config/openbox/menu.xml
Hors ligne
#3 Le 19/12/2009, à 18:28
- vincentp010
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Salut,
si tu lance la commande obm-xdg dans un terminal, tu as bien le résultat du menu qui s'affiche?
Tu as bien mis ta ligne au bon endroit, entre les balises
<menu id="root-menu" label="Openbox 3">
</menu>
je suppose que oui vu qu'il affiche l'entrée Applications
Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go
Hors ligne
#4 Le 19/12/2009, à 18:39
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Voilà mon fichier menu.xml :
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Menu">
<item label="Exécuter">
<action name="Execute">
<execute>
gmrun
</execute>
</action>
</item>
<item label="Terminal">
<action name="Execute">
<execute>
x-terminal-emulator
</execute>
</action>
</item>
<item label="Navigateur">
<action name="Execute">
<execute>
x-www-browser
</execute>
</action>
</item>
<item label="Gestionnaire de fichiers">
<action name="Execute">
<execute>
nautilus
</execute>
</action>
</item>
<!-- This requires the presence of the 'menu' package to work -->
<separator/>
<menu execute="obm-xdg" id="xdg-menu" label="Applications"/>
<separator/>
<item label="ObConf">
<action name="Execute">
<execute>
obconf
</execute>
</action>
</item>
<item label="ObMenu">
<action name="Execute">
<execute>
obmenu
</execute>
</action>
</item>
<item label="Reconfigure">
<action name="Reconfigure"/>
</item>
<item label="Restart">
<action name="Restart"/>
</item>
<separator/>
<item label="Éteindre">
<action name="Execute">
<execute>
shutdown -h now
</execute>
</action>
</item>
<item label="Redémarrer">
<action name="Execute">
<execute>
shutdown -r now
</execute>
</action>
</item>
</menu>
</openbox_menu>
Quand je fais obm-xdg dans la console, j'ai cette erreur :
IOError: [Errno 2] No such file or directory: u'/etc/xdg/menus/debian-menu.menu'
Hors ligne
#5 Le 20/12/2009, à 11:00
- Baspar
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
De ce que j'en voit, tu ouvre bien le menu "root-menu", puis menu "xdg-menu", tu ferme bien ce dernier, mais le menu "root-menu" n'est pas fermé.
Donc juste avant le commentaire
<!-- This requires the presence of the 'menu' package to work -->
Ferme le menu en mettant un </menu>
Hors ligne
#6 Le 20/12/2009, à 11:29
- vincentp010
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Là tu dit une bêtise, le root-menu est fermé à l'avant dernière ligne.
Non le problème viens de la commande xdg-menu qui donne une erreur.
Tu pourrais essayer de remplacer ton fichier /usr/bin/obm-xdg par le mien en le sauvegardant avant:
sudo mv /usr/bin/obm-xdg /usr/bin/obm-xdg.bak
#!/usr/bin/python -O
#########################################################################
# Copyright 2005 Manuel Colmenero
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
########################################################################
#
# a free desktop menus implementation for openbox
#
import xml.dom.minidom, obxml, os, sys, time
class XdgMenu:
def __init__(self):
self.name = ""
self.title = ""
self.directory = ""
self.directorydir = ""
self.directorydirs = []
self.children = []
self.parent = None
self.include = None
self.exclude = None
self.lang = None
self.appdirs = []
self.items = []
self.onlyunallocated = False
self.deleted = False
self.filename = ""
def _get_node_value(self, node):
if node.hasChildNodes():
for n in node.childNodes:
if n.nodeName == "#text" and n.nodeValue.strip() != "":
return n.nodeValue.strip()
def _get_root_menu(self, menu):
child = menu
while child.parent != None:
child = child.parent
return child
def _find_menu(self, name):
if self.name == name:
return self
for c in self.children:
if c.name == name:
return c
else:
b = c._find_menu(name)
if b: return b
def merge(self, menu):
for directory in menu.directorydirs:
if os.path.isdir(directory):
self.directorydirs += directory
self.directory = menu.directory
self.children += menu.children
def parseInclude(self, node, logic):
for item in node.childNodes:
if item.nodeType == 1:
i = XdgLogic(item.nodeName.upper())
if item.nodeName.upper() in ("CATEGORY", "FILENAME"):
i.setCategory(self._get_node_value(item))
else:
i = XdgLogic(item.nodeName.upper())
self.parseInclude(item, i)
logic.append(i)
def parseXml(self, parent):
root = self._get_root_menu(self)
for item in parent.childNodes:
nname = item.nodeName.lower()
if nname == "name":
self.name = self._get_node_value(item)
elif nname == "directory":
self.directory = self._get_node_value(item)
elif nname == "directorydir":
value = self._get_node_value(item)
if not os.path.isabs(value):
value = "%s/%s" % (os.path.dirname(self.filename), value)
if os.path.isdir(value):
self.directorydirs.append(value)
elif nname == "defaultdirectorydirs":
env = os.getenv("XDG_DATA_DIRS")
if env:
for item in env.split(":"):
if os.path.isdir(item):
self.directorydirs.append("%s/desktop-directories"%(item))
else:
self.directorydirs.append("/usr/share/desktop-directories")
self.directorydirs.append("/usr/local/share/desktop-directories")
elif nname == "include":
self.include = XdgLogic("OR")
self.parseInclude(item, self.include)
elif nname == "exclude":
self.exclude = XdgLogic("OR")
self.parseInclude(item, self.exclude)
elif nname == "onlyunallocated":
self.onlyunallocated = True
elif nname == "notonlyunallocated":
self.onlyunallocated = False
elif nname == "deleted":
self.deleted = True
elif nname == "notdeleted":
self.deleted = False
elif nname == "mergefile":
fn = self._get_node_value(item)
if not os.path.isabs(fn):
fn = "%s/%s" % (os.path.dirname(self.filename), fn)
newmenu = XdgMenu()
newmenu.parseFile(fn)
m = root._find_menu(newmenu.name)
if m:
m.merge(newmenu)
else:
newmenu.parent = self
self.children.append(newmenu)
elif nname == "appdir":
dr = self._get_node_value(item)
if not os.path.isabs(dr):
dr = "%s/%s" % (os.path.dirname(self.filename), dr)
self.appdirs.append(dr)
elif nname == "defaultappdirs":
xdg_data_dirs = []
xdg_env = os.getenv("XDG_DATA_DIRS")
if xdg_env:
for item in xdg_env.split(":"):
if item != "" and os.path.isdir(item):
xdg_data_dirs.append(item)
else:
xdg_data_dirs.append("/usr/share")
xdg_data_dirs.append("/usr/local/share")
for xdir in xdg_data_dirs:
if os.path.isdir("%s/applications"%(xdir)):
self.appdirs.append("%s/applications"%(xdir))
elif nname == "menu":
newmenu = XdgMenu()
newmenu.appdirs += self.appdirs
newmenu.directorydirs += self.directorydirs
newmenu.filename = self.filename
newmenu.lang = self.lang
newmenu.parseXml(item)
m = root._find_menu(newmenu.name)
if m:
m.merge(newmenu)
else:
newmenu.parent = self
self.children.append(newmenu)
def parseFile(self, filename):
f = open(filename)
dom = xml.dom.minidom.parseString(f.read())
f.close()
self.filename = filename
self.parseXml(dom.documentElement)
def parseDirectoryFile(self, filename, language):
title = ""
accuracy = 0
if language:
l = language.split(".")[0].split("_")
if len(l) == 2:
lang_major = l[0]
lang_minor = l[1]
else:
lang_major = l[0]
lang_minor = None
else:
lang_major = "en"
lang_minor = None
for line in open(filename):
i = line.split("=")[0].lower()
n = line.find("=")
if i[0:4] == "name":
name = line[n+1:]
if "[" in line[:n]:
lang = line[:n].split("[")[1].split("]")[0]
else:
lang = None
if lang:
if lang_major in lang and (title == "" or accuracy < 2):
title = name
accuracy = 2
if lang_minor and lang_major in lang and lang_minor in lang:
title = name
accuracy = 3
elif title == "":
accuracy = 1
title = name
return unicode(title.strip() ,"utf-8")
def parseDesktopFile(self, filename, language):
title = ""
exe = ""
cats = []
accuracy = 0
if language:
l = language.split(".")[0].split("_")
if len(l) == 2:
lang_major = l[0]
lang_minor = l[1]
else:
lang_major = l[0]
lang_minor = None
else:
lang_major = "en"
lang_minor = None
for line in open(filename):
i = line.split("=")[0].lower()
n = line.find("=")
if i[0:4] == "name":
name = line[n+1:]
if "[" in line[:n]:
lang = line[:n].split("[")[1].split("]")[0]
else:
lang = None
if lang:
if lang_major in lang and (title == "" or accuracy < 2):
title = name
accuracy = 2
if lang_minor and lang_major in lang and lang_minor in lang:
title = name
accuracy = 3
elif title == "":
accuracy = 1
title = name
elif i == "exec":
exe = ""
jump = False
for c in line[n+1:]:
if not jump:
if c == "%":
jump = True
else:
exe += c
else:
jump = False
elif i == "categories":
cats = line[n+1:].strip().split(";")
if cats[-1] == "":
cats.pop(-1)
item = {
"name": unicode(title.strip() ,"utf-8"),
"exec": exe.strip(),
"categories": cats,
"filename": filename,
"allocated": False
}
return item
def getAllAppdirs(self, l=[]):
for item in self.children:
for dr in item.appdirs:
if not dr in l:
l.append(dr)
item.getAllAppdirs(l)
return l
def loadItems(self):
data = {}
appdirs = self.getAllAppdirs([])
for each in appdirs:
data[each] = []
for f in os.listdir(each):
if ".desktop" in f:
i = self.parseDesktopFile("%s/%s" % (each, f), self.lang)
data[each].append(i)
self._allocate_items(data)
self._create_items(data)
self._get_menus_titles(self.lang)
def _get_menus_titles(self, languaje):
for item in self.directorydirs:
fn = "%s/%s" % (item, self.directory)
if os.path.isfile(fn):
self.title = self.parseDirectoryFile(fn, languaje)
if self.title == "":
self.title = self.name
for each in self.children:
each._get_menus_titles(languaje)
def _allocate_items(self, data):
if self.include:
for d in self.appdirs:
for item in data[d]:
if self.include.evaluate(item["categories"], item["filename"]):
item["allocated"] = True
for item in self.children:
item._allocate_items(data)
def _create_items(self, data):
if self.include:
for d in self.appdirs:
for item in data[d]:
if not self.onlyunallocated or self.onlyunallocated and not item["allocated"]:
if self.include.evaluate(item["categories"], item["filename"]):
if self.exclude:
if not self.exclude.evaluate(item["categories"], item["filename"]):
self.items.append(item)
else:
self.items.append(item)
for item in self.children:
item._create_items(data)
def _create_obmenu(self, obmenu, root=None):
if self.parent:
pid = "xdg-" + self.name
else:
pid = root
for child in self.children:
if len(child.items) > 0 or len(child.children) > 0:
obmenu.createMenu(pid, child.title, "xdg-" + child.name)
child._create_obmenu(obmenu, root)
for item in self.items:
obmenu.createItem(pid, item["name"], "Execute", item["exec"])
class XdgLogic:
def __init__(self, tipe):
self.tipe = tipe
self.items = []
self.value = False
self.cat = ""
def append(self, item):
self.items.append(item)
def evaluate(self, list, filename):
if self.tipe == "CATEGORY":
self.value = self.cat in list
return self.value
if self.tipe == "FILENAME":
self.value = self.cat == filename
return self.value
if self.tipe == "NOT":
self.value = False
for i in self.items:
self.value = self.value or not i.evaluate(list, filename)
return self.value
if self.tipe == "AND":
self.value = True
for i in self.items:
if not i.evaluate(list, filename):
self.value = False
return self.value
return self.value
if self.tipe == "OR":
self.value = False
for i in self.items:
self.value = self.value or i.evaluate(list, filename)
return self.value
if self.tipe == "ALL":
self.value = True
return self.value
def setCategory(self, cat):
self.cat = cat
if __name__ == "__main__":
mnu = XdgMenu()
if os.getenv("LANG") != "":
mnu.lang = os.getenv("LANG")
home = os.getenv("HOME")
xdg_cd = os.getenv("XDG_CONFIG_DIRS")
xdg_ch = os.getenv("XDG_CONFIG_HOME")
if not xdg_ch:
xdg_ch = "%s/.config" % (home)
if not xdg_cd:
xdg_cd = "/etc/xdg"
filename = ""
role = None
if os.path.isfile("%s/menus/applications.menu"%(xdg_ch)):
filename = "%s/menus/applications.menu"%(xdg_ch)
else:
for cdir in xdg_cd.split(":"):
if os.path.isfile("%s/menus/applications.menu"%(cdir)):
filename = "%s/menus/applications.menu"%(cdir)
break
for arg in sys.argv[1:]:
if arg == "--import":
role = "import"
elif arg == "-i":
role = "import"
elif arg == "--replace":
role = "replace"
elif arg == "-r":
role = "replace"
else:
if os.path.isfile(sys.argv[1]):
filename = sys.argv[1]
mnu.parseFile(filename)
if role in ("replace", "import"):
mnu.loadItems()
obmenu = obxml.ObMenu()
obmenu.newMenu()
if role == "replace":
mnuid = "root-menu"
mnulb = "Openbox 3"
else:
mnuid = "obm-xdg-menus"
mnulb = "Gnome menus"
obmenu.createMenu(None, mnulb, mnuid)
mnu._create_obmenu(obmenu, mnuid)
if role == "replace":
obmenu.createMenu(mnuid, "Openbox", "Openbox-Conf-Menu")
obmenu.createItem("Openbox-Conf-Menu", "Edit preferences", "Execute", "obconf")
obmenu.createItem("Openbox-Conf-Menu", "Edit menus", "Execute", "obmenu")
obmenu.createItem("Openbox-Conf-Menu", "Reload prefences", "Reconfigure", "")
obmenu.createSep("Openbox-Conf-Menu")
obmenu.createItem("Openbox-Conf-Menu", "Exit", "Exit", "")
obmenu.createSep(mnuid)
obmenu.createLink(mnuid, "client-list-menu")
if not os.path.isdir(xdg_ch):
os.mkdir(xdg_ch)
if not os.path.isdir("%s/openbox"%(xdg_ch)):
os.mkdir("%s/openbox"%(xdg_ch))
if os.path.isfile("%s/openbox/menu.xml"%(xdg_ch)):
os.rename("%s/openbox/menu.xml"%(xdg_ch), "%s/openbox/menu.xml~"%(xdg_ch))
obmenu.saveMenu("%s/openbox/menu.xml"%(xdg_ch))
else:
obmenu.saveMenu("gnome-menus.xml")
else:
cachefile = "%s/.obmxdg.xml" % (home)
if os.path.isfile(cachefile):
new = False
for appdir in mnu.getAllAppdirs():
if os.path.getmtime(appdir) > os.path.getmtime(cachefile):
new = True
break
if not new:
cache = open(cachefile)
print cache.read()
cache.close()
sys.exit()
mnu.loadItems()
obmenu = obxml.ObMenu()
obmenu.newPipe()
mnu._create_obmenu(obmenu)
obmenu.saveMenu(cachefile)
obmenu.printXml()
Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go
Hors ligne
#7 Le 20/12/2009, à 11:29
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Quand j'ajoute </menu> avant le commentaire, j'ai une boîte de dialogue m'indiquant une erreur de syntaxe dans le fichier, et mon menu n'affiche plus que les 4 premiers éléments.
Hors ligne
#8 Le 20/12/2009, à 13:00
- vincentp010
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
On a posté en même temps, je sais pas si tu as essayé ma solution.
Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go
Hors ligne
#9 Le 20/12/2009, à 13:12
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Il faut avoir le paquet 'menu' d'installer :
sudo apt-get install menu menu-xdg
Essaye ça pour voir !
=> Sinon, regardes par là :
http://icculus.org/openbox/index.php/Help:Menus#The_Debian_menu
Il faut coller ça dans ton '~/.config/openbox/menu.xml' pour avoir un menu avec toutes tes applications :
<menu id="Debian"/>
Et tu rajoutes ça à ton '~/.config/openbox/rc.xml' :
<file>/var/lib/openbox/debian-menu.xml</file>
<file>debian-menu.xml</file>
( Entre les entrées <menu> et </menu>, avant l'entrée <file>menu.xml</file> )
Dernière modification par Kookaburra (Le 20/12/2009, à 13:21)
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#10 Le 20/12/2009, à 13:38
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
vincentp010 > Je n'avais pas le fichier /usr/bin/obm-xdg, j'ai donc copié directement le tien ; ça ne fonctionne pas.
Kookaburra > ça marche mais ce n'est pas tout à fait la même organisation que le menu de GNOME. Ça me liste pleins d'applications qu'on utilise en console, et il doit manquer des entrées (au moins gnometris).
J'ai aussi un autre problème avec le menu dont j'ai oublié de parler : il n'affiche pas son titre (mais c'est très secondaire).
Hors ligne
#11 Le 20/12/2009, à 18:46
- Baspar
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Désole, je n'avais pas vu que xdg-menu se fermait en fin de ligne...
Sinon pour éviter toute erreur de syntaxe utilise obmenu
Sur ceux, je suis désolé, mes compétences s'arrêtent ici je pense
Hors ligne
#12 Le 20/12/2009, à 19:07
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
C'est pas grave, merci quand même
Dernière modification par btmtrn (Le 20/12/2009, à 19:08)
Hors ligne
#13 Le 21/12/2009, à 17:38
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
J'ai essayé d'installer ce "pipeline" chez moi, et j'ai fini par réussir.
Voici la procédure :
* Installes les paquets suivants :
sudo apt-get install menu menu-xdg openbox-xdgmenu extra-xdg-menus xdg-utils
Certains seront surement déjà installés chez toi. Par exemple, cher moi, il manquait seulement le paquet 'menu-xdg' pour que le pipeline fonctionne ...
* Ensuite, il faut vérifier que tu as bien ce fichier dans "/usr/bin/obm-xdg" :
#!/usr/bin/python2.5 -O
#########################################################################
# Copyright 2005 Manuel Colmenero
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
########################################################################
#
# a free desktop menus implementation for openbox
#
import xml.dom.minidom, obxml, os, sys, time
class XdgMenu:
def __init__(self):
self.name = ""
self.title = ""
self.directory = ""
self.directorydir = ""
self.directorydirs = []
self.children = []
self.parent = None
self.include = None
self.exclude = None
self.lang = None
self.appdirs = []
self.items = []
self.onlyunallocated = False
self.deleted = False
self.filename = ""
def _get_node_value(self, node):
if node.hasChildNodes():
for n in node.childNodes:
if n.nodeName == "#text" and n.nodeValue.strip() != "":
return n.nodeValue.strip()
def _get_root_menu(self, menu):
child = menu
while child.parent != None:
child = child.parent
return child
def _find_menu(self, name):
if self.name == name:
return self
for c in self.children:
if c.name == name:
return c
else:
b = c._find_menu(name)
if b: return b
def merge(self, menu):
for directory in menu.directorydirs:
if os.path.isdir(directory):
self.directorydirs += directory
self.directory = menu.directory
self.children += menu.children
def parseInclude(self, node, logic):
for item in node.childNodes:
if item.nodeType == 1:
i = XdgLogic(item.nodeName.upper())
if item.nodeName.upper() in ("CATEGORY", "FILENAME"):
i.setCategory(self._get_node_value(item))
else:
i = XdgLogic(item.nodeName.upper())
self.parseInclude(item, i)
logic.append(i)
def parseXml(self, parent):
root = self._get_root_menu(self)
for item in parent.childNodes:
nname = item.nodeName.lower()
if nname == "name":
self.name = self._get_node_value(item)
elif nname == "directory":
self.directory = self._get_node_value(item)
elif nname == "directorydir":
value = self._get_node_value(item)
if not os.path.isabs(value):
value = "%s/%s" % (os.path.dirname(self.filename), value)
if os.path.isdir(value):
self.directorydirs.append(value)
elif nname == "defaultdirectorydirs":
env = os.getenv("XDG_DATA_DIRS")
if env:
for item in env.split(":"):
if os.path.isdir(item):
self.directorydirs.append("%s/desktop-directories"%(item))
else:
self.directorydirs.append("/usr/share/desktop-directories")
self.directorydirs.append("/usr/local/share/desktop-directories")
elif nname == "include":
self.include = XdgLogic("OR")
self.parseInclude(item, self.include)
elif nname == "exclude":
self.exclude = XdgLogic("OR")
self.parseInclude(item, self.exclude)
elif nname == "onlyunallocated":
self.onlyunallocated = True
elif nname == "notonlyunallocated":
self.onlyunallocated = False
elif nname == "deleted":
self.deleted = True
elif nname == "notdeleted":
self.deleted = False
elif nname == "mergefile":
fn = self._get_node_value(item)
if not os.path.isabs(fn):
fn = "%s/%s" % (os.path.dirname(self.filename), fn)
newmenu = XdgMenu()
newmenu.parseFile(fn)
m = root._find_menu(newmenu.name)
if m:
m.merge(newmenu)
else:
newmenu.parent = self
self.children.append(newmenu)
elif nname == "appdir":
dr = self._get_node_value(item)
if not os.path.isabs(dr):
dr = "%s/%s" % (os.path.dirname(self.filename), dr)
self.appdirs.append(dr)
elif nname == "defaultappdirs":
xdg_data_dirs = []
xdg_env = os.getenv("XDG_DATA_DIRS")
if xdg_env:
for item in xdg_env.split(":"):
if item != "" and os.path.isdir(item):
xdg_data_dirs.append(item)
else:
xdg_data_dirs.append("/usr/share")
xdg_data_dirs.append("/usr/local/share")
for xdir in xdg_data_dirs:
if os.path.isdir("%s/applications"%(xdir)):
self.appdirs.append("%s/applications"%(xdir))
elif nname == "menu":
newmenu = XdgMenu()
newmenu.appdirs += self.appdirs
newmenu.directorydirs += self.directorydirs
newmenu.filename = self.filename
newmenu.lang = self.lang
newmenu.parseXml(item)
m = root._find_menu(newmenu.name)
if m:
m.merge(newmenu)
else:
newmenu.parent = self
self.children.append(newmenu)
def parseFile(self, filename):
f = open(filename)
dom = xml.dom.minidom.parseString(f.read())
f.close()
self.filename = filename
self.parseXml(dom.documentElement)
def parseDirectoryFile(self, filename, language):
title = ""
accuracy = 0
if language:
l = language.split(".")[0].split("_")
if len(l) == 2:
lang_major = l[0]
lang_minor = l[1]
else:
lang_major = l[0]
lang_minor = None
else:
lang_major = "en"
lang_minor = None
for line in open(filename):
i = line.split("=")[0].lower()
n = line.find("=")
if i[0:4] == "name":
name = line[n+1:]
if "[" in line[:n]:
lang = line[:n].split("[")[1].split("]")[0]
else:
lang = None
if lang:
if lang_major in lang and (title == "" or accuracy < 2):
title = name
accuracy = 2
if lang_minor and lang_major in lang and lang_minor in lang:
title = name
accuracy = 3
elif title == "":
accuracy = 1
title = name
return unicode(title.strip() ,"utf-8")
def parseDesktopFile(self, filename, language):
title = ""
exe = ""
cats = []
accuracy = 0
if language:
l = language.split(".")[0].split("_")
if len(l) == 2:
lang_major = l[0]
lang_minor = l[1]
else:
lang_major = l[0]
lang_minor = None
else:
lang_major = "en"
lang_minor = None
for line in open(filename):
i = line.split("=")[0].lower()
n = line.find("=")
if i[0:4] == "name":
name = line[n+1:]
if "[" in line[:n]:
lang = line[:n].split("[")[1].split("]")[0]
else:
lang = None
if lang:
if lang_major in lang and (title == "" or accuracy < 2):
title = name
accuracy = 2
if lang_minor and lang_major in lang and lang_minor in lang:
title = name
accuracy = 3
elif title == "":
accuracy = 1
title = name
elif i == "exec":
exe = ""
jump = False
for c in line[n+1:]:
if not jump:
if c == "%":
jump = True
else:
exe += c
else:
jump = False
elif i == "categories":
cats = line[n+1:].strip().split(";")
if cats[-1] == "":
cats.pop(-1)
item = {
"name": unicode(title.strip() ,"utf-8"),
"exec": exe.strip(),
"categories": cats,
"filename": filename,
"allocated": False
}
return item
def getAllAppdirs(self, l=[]):
for item in self.children:
for dr in item.appdirs:
if not dr in l:
l.append(dr)
item.getAllAppdirs(l)
return l
def loadItems(self):
data = {}
appdirs = self.getAllAppdirs([])
for each in appdirs:
data[each] = []
for f in os.listdir(each):
if ".desktop" in f:
i = self.parseDesktopFile("%s/%s" % (each, f), self.lang)
data[each].append(i)
self._allocate_items(data)
self._create_items(data)
self._get_menus_titles(self.lang)
def _get_menus_titles(self, languaje):
for item in self.directorydirs:
fn = "%s/%s" % (item, self.directory)
if os.path.isfile(fn):
self.title = self.parseDirectoryFile(fn, languaje)
if self.title == "":
self.title = self.name
for each in self.children:
each._get_menus_titles(languaje)
def _allocate_items(self, data):
if self.include:
for d in self.appdirs:
for item in data[d]:
if self.include.evaluate(item["categories"], item["filename"]):
item["allocated"] = True
for item in self.children:
item._allocate_items(data)
def _create_items(self, data):
if self.include:
for d in self.appdirs:
for item in data[d]:
if not self.onlyunallocated or self.onlyunallocated and not item["allocated"]:
if self.include.evaluate(item["categories"], item["filename"]):
if self.exclude:
if not self.exclude.evaluate(item["categories"], item["filename"]):
self.items.append(item)
else:
self.items.append(item)
for item in self.children:
item._create_items(data)
def _create_obmenu(self, obmenu, root=None):
if self.parent:
pid = "xdg-" + self.name
else:
pid = root
for child in self.children:
if len(child.items) > 0 or len(child.children) > 0:
obmenu.createMenu(pid, child.title, "xdg-" + child.name)
child._create_obmenu(obmenu, root)
for item in self.items:
obmenu.createItem(pid, item["name"], "Execute", item["exec"])
class XdgLogic:
def __init__(self, tipe):
self.tipe = tipe
self.items = []
self.value = False
self.cat = ""
def append(self, item):
self.items.append(item)
def evaluate(self, list, filename):
if self.tipe == "CATEGORY":
self.value = self.cat in list
return self.value
if self.tipe == "FILENAME":
self.value = self.cat == filename
return self.value
if self.tipe == "NOT":
self.value = False
for i in self.items:
self.value = self.value or not i.evaluate(list, filename)
return self.value
if self.tipe == "AND":
self.value = True
for i in self.items:
if not i.evaluate(list, filename):
self.value = False
return self.value
return self.value
if self.tipe == "OR":
self.value = False
for i in self.items:
self.value = self.value or i.evaluate(list, filename)
return self.value
if self.tipe == "ALL":
self.value = True
return self.value
def setCategory(self, cat):
self.cat = cat
if __name__ == "__main__":
mnu = XdgMenu()
if os.getenv("LANG") != "":
mnu.lang = os.getenv("LANG")
home = os.getenv("HOME")
xdg_cd = os.getenv("XDG_CONFIG_DIRS")
xdg_ch = os.getenv("XDG_CONFIG_HOME")
if not xdg_ch:
xdg_ch = "%s/.config" % (home)
if not xdg_cd:
xdg_cd = "/etc/xdg"
filename = ""
role = None
if os.path.isfile("%s/menus/applications.menu"%(xdg_ch)):
filename = "%s/menus/applications.menu"%(xdg_ch)
else:
for cdir in xdg_cd.split(":"):
if os.path.isfile("%s/menus/applications.menu"%(cdir)):
filename = "%s/menus/applications.menu"%(cdir)
break
for arg in sys.argv[1:]:
if arg == "--import":
role = "import"
elif arg == "-i":
role = "import"
elif arg == "--replace":
role = "replace"
elif arg == "-r":
role = "replace"
else:
if os.path.isfile(sys.argv[1]):
filename = sys.argv[1]
mnu.parseFile(filename)
if role in ("replace", "import"):
mnu.loadItems()
obmenu = obxml.ObMenu()
obmenu.newMenu()
if role == "replace":
mnuid = "root-menu"
mnulb = "Openbox 3"
else:
mnuid = "obm-xdg-menus"
mnulb = "Gnome menus"
obmenu.createMenu(None, mnulb, mnuid)
mnu._create_obmenu(obmenu, mnuid)
if role == "replace":
obmenu.createMenu(mnuid, "Openbox", "Openbox-Conf-Menu")
obmenu.createItem("Openbox-Conf-Menu", "Edit preferences", "Execute", "obconf")
obmenu.createItem("Openbox-Conf-Menu", "Edit menus", "Execute", "obmenu")
obmenu.createItem("Openbox-Conf-Menu", "Reload prefences", "Reconfigure", "")
obmenu.createSep("Openbox-Conf-Menu")
obmenu.createItem("Openbox-Conf-Menu", "Exit", "Exit", "")
obmenu.createSep(mnuid)
obmenu.createLink(mnuid, "client-list-menu")
if not os.path.isdir(xdg_ch):
os.mkdir(xdg_ch)
if not os.path.isdir("%s/openbox"%(xdg_ch)):
os.mkdir("%s/openbox"%(xdg_ch))
if os.path.isfile("%s/openbox/menu.xml"%(xdg_ch)):
os.rename("%s/openbox/menu.xml"%(xdg_ch), "%s/openbox/menu.xml~"%(xdg_ch))
obmenu.saveMenu("%s/openbox/menu.xml"%(xdg_ch))
else:
obmenu.saveMenu("gnome-menus.xml")
else:
cachefile = "%s/.obmxdg.xml" % (home)
if os.path.isfile(cachefile):
new = False
for appdir in mnu.getAllAppdirs():
if os.path.getmtime(appdir) > os.path.getmtime(cachefile):
new = True
break
if not new:
cache = open(cachefile)
print cache.read()
cache.close()
sys.exit()
mnu.loadItems()
obmenu = obxml.ObMenu()
obmenu.newPipe()
mnu._create_obmenu(obmenu)
obmenu.saveMenu(cachefile)
obmenu.printXml()
Pour être sûr d'avoir le bon fichier au bon endroit, tu peux ré-installer le paquet 'obmenu', ce qui va remettre en place ce fichier :
sudo apt-get remove obmenu && sudo apt-get install obmenu
* Tu rajoutes cette ligne dans ton 'menu.xml', tu l'enregistres et enfin tu fais "reconfigure" et "restart" :
<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>
Maintenant, cela doit fonctionner ...
Dernière modification par Kookaburra (Le 21/12/2009, à 17:40)
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#14 Le 21/12/2009, à 17:44
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Par contre, il est loin d'être parfait aussi, il ne retrouve pas toutes les applications
Logique, quand on lit ça :
http://wiki.archlinux.fr/openbox:reglage
il peut générer un menu à base de sous menus-catégories d'applications GTK/GNOME installées sur votre ordinateur
Bye bye les applications non "gtk-gnome"
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#15 Le 21/12/2009, à 18:06
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Toujours rien !
Hors ligne
#16 Le 21/12/2009, à 18:11
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Je ne peux rien de plus pour toi, chez moi ça marche ...
Tu as bien tout fait ce que je t'avais montré ? (au cas où )
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#17 Le 21/12/2009, à 18:27
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
J'ai réinstallé obmenu au lieu de comparer les deux fichiers obm-xdg et ça marche (traduction française possible ?) ! Merci pour ton aide !
Dans ta capture d'écran tu semble avoir un menu « Système » (comme GNOME), comment as-tu fait ?
Ensuite, reste le problème du titre du menu.
Hors ligne
#18 Le 21/12/2009, à 19:39
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
J'ai réinstallé obmenu au lieu de comparer les deux fichiers obm-xdg et ça marche (traduction française possible ?) ! Merci pour ton aide !
Cool !
Pour la traduction en fr, je pense qu'il faut faire des modifs dans le obm-xdg, mais là comme ça, je peux pas te dire ...
Dans ta capture d'écran tu semble avoir un menu « Système » (comme GNOME), comment as-tu fait ?
C'est une partie du menu "par défaut" de Crunchbang Linux, après les programmes qui vont avec ...
Je te poste mon 'menu.xml", si ça peux t'aider
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Openbox 3">
<separator label="CrunchBang Linux"/>
<item label="Thunar">
<action name="Execute">
<execute>
thunar
</execute>
</action>
</item>
<item label="Geany">
<action name="Execute">
<execute>
geany
</execute>
</action>
</item>
<item label="Deluge">
<action name="Execute">
<execute>
deluge
</execute>
</action>
</item>
<item label="aMule">
<action name="Execute">
<execute>
amule
</execute>
</action>
</item>
<item label="Media-center">
<action name="Execute">
<execute>
/home/dimitri/ubuntu/deb/mediacenter/launch-mc.sh
</execute>
</action>
</item>
<item label="Synaptic">
<action name="Execute">
<execute>
gksudo synaptic
</execute>
</action>
</item>
scrot -d 10 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ & gpicview ~/images/$f'
<separator/>
<menu execute="python ~/.config/openbox/scripts/gweather.py orleans fr" id="pipe-weather" label="Météo"/>
<menu id="photographie" label="Photographie">
<item label="Gimp">
<action name="Execute">
<execute>
gimp
</execute>
</action>
</item>
<item label="Gthumb">
<action name="Execute">
<execute>
gthumb
</execute>
</action>
</item>
<item label="Phatch">
<action name="Execute">
<execute>
phatch
</execute>
</action>
</item>
<item label="jBrout">
<action name="Execute">
<execute>
jbrout
</execute>
</action>
</item>
<item label="RawTherapee">
<action name="Execute">
<execute>
rawtherapee
</execute>
</action>
</item>
<item label="Hugin">
<action name="Execute">
<execute>
hugin
</execute>
</action>
</item>
<item label="Enblend">
<action name="Execute">
<execute>
enblend
</execute>
</action>
</item>
<menu id="Screenshots" label="Screenshots">
<item label="Now ...">
<action name="Execute">
<execute>
scrot '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ScreenShoots & gpicview ~/images/ScreenShoots/$f'
</execute>
</action>
</item>
<item label="In 5 s ...">
<action name="Execute">
<execute>
scrot -d 5 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ScreenShoots & gpicview ~/images/ScreenShoots/$f'
</execute>
</action>
</item>
<item label="In 10 s ...">
<action name="Execute">
<execute>
scrot -d 10 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ScreenShoots & gpicview ~/images/ScreenShoots/$f'
</execute>
</action>
</item>
</menu>
</menu>
<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>
<menu id="Debian"/>
<menu id="preferences" label="Préférences">
<item label="Edit conkyrc">
<action name="Execute">
<execute>
geany ~/.conkyrc1
</execute>
</action>
</item>
<item label="dmenu config file">
<action name="Execute">
<execute>
geany ~/.config/dmenu/dmenu-bind.sh
</execute>
</action>
</item>
<item label="gmrunrc">
<action name="Execute">
<execute>
geany ~/.gmrunrc
</execute>
</action>
</item>
<item label="Terminator config file">
<action name="Execute">
<execute>
geany ~/.config/terminator/config
</execute>
</action>
</item>
<item label="Tint2 config file">
<action name="Execute">
<execute>
geany ~/.config/tint2/tint2rc
</execute>
</action>
</item>
<item label="User Interface Settings">
<action name="Execute">
<execute>
lxappearance
</execute>
</action>
</item>
<item label="Screensaver - Power">
<action name="Execute">
<execute>
gnome-screensaver-preferences
</execute>
</action>
</item>
<item label="Choose wallpapers">
<action name="Execute">
<execute>
nitrogen ~/images/wallpapers/
</execute>
</action>
</item>
</menu>
<menu id="openbox" label="Openbox">
<item label="Edit menu.xml">
<action name="Execute">
<execute>
geany ~/.config/openbox/menu.xml
</execute>
</action>
</item>
<item label="rc.xml">
<action name="Execute">
<execute>
geany ~/.config/openbox/rc.xml
</execute>
</action>
</item>
<item label="autostart.sh">
<action name="Execute">
<execute>
geany ~/.config/openbox/autostart.sh
</execute>
</action>
</item>
<item label="Obmenu">
<action name="Execute">
<execute>
obmenu
</execute>
</action>
</item>
<item label="Obconf">
<action name="Execute">
<execute>
obconf
</execute>
</action>
</item>
<item label="Obkey">
<action name="Execute">
<execute>
python /home/dimitri/ubuntu/deb/obkey/obkey
</execute>
</action>
</item>
<item label="Reconfigure">
<action name="Reconfigure"/>
</item>
<item label="Restart">
<action name="Restart"/>
</item>
</menu>
<menu id="systéme" label="Systéme">
<item label="System Update">
<action name="Execute">
<execute>
system-update
</execute>
</action>
</item>
<item label="Disk Partitioner">
<action name="Execute">
<execute>
gksudo gparted
</execute>
</action>
</item>
<item label="Adjust with lxrandr">
<action name="Execute">
<execute>
lxrandr
</execute>
</action>
</item>
<item label="Adjust with grandr">
<action name="Execute">
<execute>
grandr
</execute>
</action>
</item>
<item label="Edit Default Applications">
<action name="Execute">
<execute>
terminator --command="sudo update-alternatives --all"
</execute>
</action>
</item>
<item label="Login setup (GDM)">
<action name="Execute">
<execute>
gksudo gdmsetup
</execute>
</action>
</item>
<item label="Network Admin">
<action name="Execute">
<execute>
network-admin
</execute>
</action>
</item>
<item label="Package Manager">
<action name="Execute">
<execute>
gksudo synaptic
</execute>
</action>
</item>
<item label="Passwords and Encryption Keys">
<action name="Execute">
<execute>
seahorse
</execute>
</action>
</item>
<item label="Printer Settings">
<action name="Execute">
<execute>
system-config-printer
</execute>
</action>
</item>
<item label="Restricted Device Manager">
<action name="Execute">
<execute>
gksudo jockey-gtk
</execute>
</action>
</item>
<item label="Services/Daemons">
<action name="Execute">
<execute>
services-admin
</execute>
</action>
</item>
<item label="Shared Folders">
<action name="Execute">
<execute>
shares-admin
</execute>
</action>
</item>
<item label="System Monitor">
<action name="Execute">
<execute>
terminator --command=htop
</execute>
</action>
</item>
<item label="System Logs">
<action name="Execute">
<execute>
gnome-system-log
</execute>
</action>
</item>
<item label="Time/Date">
<action name="Execute">
<execute>
time-admin
</execute>
</action>
</item>
<item label="Users/Groups">
<action name="Execute">
<execute>
users-admin
</execute>
</action>
</item>
</menu>
<separator/>
<item label="OBlogout">
<action name="Execute">
<execute>
oblogout
</execute>
</action>
</item>
</menu>
</openbox_menu>
Ensuite, reste le problème du titre du menu.
Tu veux juste changer le nom du menu "applications", c'est ça ? C'est simple, tu modifie "applications" dans ce que tu as mis dans le 'menu.xml" :
<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>
<menu id="xdg-menu" label="Ce que tu veux" execute="obm-xdg"/>
Dernière modification par Kookaburra (Le 21/12/2009, à 19:40)
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#19 Le 21/12/2009, à 20:42
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
La localisation du menu doit se faire via des fichiers appelés, je vais faire des recherches.
Le titre du menu, c'est ce qui te met « CrunchBang Linux » tout en haut sur fond gris. Je ferais bien une capture d'écran, mais le menu s'enlève à chaque fois (pour le coup, c'est mieux avec Windows pour les éléments « pop-up »).
Hors ligne
#20 Le 21/12/2009, à 21:17
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Le titre du menu, c'est ce qui te met « CrunchBang Linux » tout en haut sur fond gris. Je ferais bien une capture d'écran, mais le menu s'enlève à chaque fois (pour le coup, c'est mieux avec Windows pour les éléments « pop-up »).
Ha ok, dans ce cas là il s'agit d'un séparateur avec un titre, comme ça :
<separator label="CrunchBang Linux"/>
<separator label="Ce que tu veux"/>
Tu peux en mettre où tu veux dans ton menu.xml, avec le "titre" que tu veux !
Tiens, différentes captures de mon bureau sous Openbox, pour te donner une idée de ce que l'on peut y faire
Dernière modification par Kookaburra (Le 21/12/2009, à 21:18)
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#21 Le 21/12/2009, à 21:25
- btmtrn
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Très bien. Merci beaucoup pour ton aide. Je met en résolu !
Hors ligne
#22 Le 21/12/2009, à 21:58
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Content d'avoir pu t'aider
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#23 Le 11/01/2010, à 21:46
- DomS
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Il faut coller ça dans ton '~/.config/openbox/menu.xml' pour avoir un menu avec toutes tes applications :
<menu id="Debian"/>
Et tu rajoutes ça à ton '~/.config/openbox/rc.xml' :
<file>/var/lib/openbox/debian-menu.xml</file> <file>debian-menu.xml</file>
( Entre les entrées <menu> et </menu>, avant l'entrée <file>menu.xml</file> )
Je ne comprends pas, chez moi ça ne marche pas. Pourtant tout était bien installé et bien réglé. Voici mon fichier menu.xml
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="Debian" label="Debian">
</menu>
<menu id="root-menu" label="Openbox 3">
<item label="Web">
<action name="Execute">
<execute>
firefox
</execute>
</action>
</item>
<item label="Fichier">
<action name="Execute">
<execute>
thunar
</execute>
</action>
</item>
<item label="Pidgin">
<action name="Execute">
<execute>
pidgin
</execute>
</action>
</item>
<item label="Terminal">
<action name="Execute">
<execute>
xterm
</execute>
</action>
</item>
<!-- This requires the presence of the 'menu' package to work -->
<separator/>
<menu id="root-menu-425526" label="Audio et Vidéo">
<item label="Gravure CD/DVD">
<action name="Execute">
<execute>
brasero
</execute>
</action>
</item>
<item label="GNOME Mplayer">
<action name="Execute">
<execute>
gnome-mplayer
</execute>
</action>
</item>
<item label="VLC">
<action name="Execute">
<execute>
vlc
</execute>
</action>
</item>
<item label="Audacious">
<action name="Execute">
<execute>
audacious
</execute>
</action>
</item>
<item label="Sonata">
<action name="Execute">
<execute>
sonata
</execute>
</action>
</item>
<item label="Quod Libet">
<action name="Execute">
<execute>
quodlibet
</execute>
</action>
</item>
<item label="Alsamixer">
<action name="Execute">
<execute>
xterm -e alsamixer
</execute>
</action>
</item>
</menu>
<menu id="root-menu-643912" label="Graphisme">
<item label="The GIMP">
<action name="Execute">
<execute>
gimp
</execute>
</action>
</item>
<item label="Visionneur d'images">
<action name="Execute">
<execute>
gpicview
</execute>
</action>
</item>
</menu>
<menu id="root-menu-894741" label="Internet">
<item label="Firefox">
<action name="Execute">
<execute>
firefox
</execute>
</action>
</item>
<item label="Pidgin">
<action name="Execute">
<execute>
pidgin
</execute>
</action>
</item>
<item label="Emesene">
<action name="Execute">
<execute>
emesene
</execute>
</action>
</item>
<item label="Transmission">
<action name="Execute">
<execute>
transmission
</execute>
</action>
</item>
<item label="Wicd">
<action name="Execute">
<execute>
wicd
</execute>
</action>
</item>
</menu>
<menu id="root-menu-303456" label="Bureautique">
<item label="Abiword">
<action name="Execute">
<execute>
abiword
</execute>
</action>
</item>
<item label="Gnumeric">
<action name="Execute">
<execute>
gnumeric
</execute>
</action>
</item>
<item label="OOo Traitement de texte">
<action name="Execute">
<execute>
ooffice -writer
</execute>
</action>
</item>
<item label="OOo Tableur">
<action name="Execute">
<execute>
ooffice -calc
</execute>
</action>
</item>
<item label="OOo Présentation">
<action name="Execute">
<execute>
ooffice -impress
</execute>
</action>
</item>
</menu>
<menu id="root-menu-51280" label="Utilitaires">
<item label="Leafpad">
<action name="Execute">
<execute>
leafpad
</execute>
</action>
</item>
<item label="Geany">
<action name="Execute">
<execute>
geany
</execute>
</action>
</item>
<item label="Calculatrice">
<action name="Execute">
<execute>
xcalc
</execute>
</action>
</item>
<item label="Utilisation disques">
<action name="Execute">
<execute>
baobab
</execute>
</action>
</item>
<item label="Galternatives">
<action name="Execute">
<execute>
galternatives
</execute>
</action>
</item>
<item label="Xarchiver">
<action name="Execute">
<execute>
xarchiver
</execute>
</action>
</item>
</menu>
<menu id="root-menu-875347" label="Système">
<item label="Htop">
<action name="Execute">
<execute>
xterm -e htop
</execute>
</action>
</item>
<item label="Moniteur">
<action name="Execute">
<execute>
xfce4-taskmanager
</execute>
</action>
</item>
</menu>
<separator/>
<menu id="root-menu-59416" label="Config">
<menu id="root-menu-59416-92457" label="Admin">
<item label="Gestionnaire de paquets Synaptic">
<action name="Execute">
<execute>
gksu synaptic
</execute>
</action>
</item>
<item label="Gparted">
<action name="Execute">
<execute>
gksu gparted
</execute>
</action>
</item>
<item label="GDM setup">
<action name="Execute">
<execute>
gksu gdmsetup
</execute>
</action>
</item>
</menu>
<menu id="root-menu-59416-15441" label="Préférences">
<item label="Thème GTK">
<action name="Execute">
<execute>
gtk-chtheme
</execute>
</action>
</item>
<item label="Fond d'écran">
<action name="Execute">
<execute>
nitrogen /usr/share/bee/wallpapers
</execute>
</action>
</item>
</menu>
<menu id="root-menu-59416-21537" label="Openbox">
<item label="Obconf">
<action name="Execute">
<execute>
obconf
</execute>
</action>
</item>
<item label="Obmenu">
<action name="Execute">
<execute>
obmenu
</execute>
</action>
</item>
<item label="Editer autostart">
<action name="Execute">
<execute>
leafpad ~/.config/openbox/autostart
</execute>
</action>
</item>
<item label="Editer menu.xml">
<action name="Execute">
<execute>
leafpad ~/.config/openbox/menu.xml
</execute>
</action>
</item>
<item label="Editer rc.xml">
<action name="Execute">
<execute>
leafpad ~/.config/openbox/rc.xml
</execute>
</action>
</item>
<separator/>
<item label="Reconfigure">
<action name="Reconfigure"/>
</item>
<item label="Restart">
<action name="Restart"/>
</item>
</menu>
</menu>
<separator/>
<item label="Fermer la session">
<action name="Exit"/>
</item>
<item label="Redémarrer">
<action name="Execute">
<execute>
sudo shutdown -r now
</execute>
</action>
</item>
<item label="Arrêter">
<action name="Execute">
<execute>
sudo shutdown -h now
</execute>
</action>
</item>
</menu>
</openbox_menu>
Le menu debian est le seul qui ne s'affiche pas
Dernière modification par D0mS (Le 11/01/2010, à 21:48)
PC fixe : lubuntu 24.04
Hors ligne
#24 Le 11/01/2010, à 22:05
- Kookaburra
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Je pense que dans ton 'menu.xml' ton menu Debian n'est pas placé là où il faut. En fait il ne faut rien avant "<menu id="root-menu" label="Openbox 3">" ... Et tu ne mettais pas la bonne syntaxe pour le menu "Debian" en plus
Essayes de le placer comme ça, enregistres-le, fait "reconfigure" et dis-nous ce que ça donne !
<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Openbox 3">
<separator label="Debian "/>
<item label="Web">
<action name="Execute">
<execute>
firefox
</execute>
</action>
</item>
<item label="Fichier">
<action name="Execute">
<execute>
thunar
</execute>
</action>
</item>
<item label="Pidgin">
<action name="Execute">
<execute>
pidgin
</execute>
</action>
</item>
<item label="Terminal">
<action name="Execute">
<execute>
xterm
</execute>
</action>
</item>
<separator/>
<!-- This requires the presence of the 'menu' package to work -->
<menu id="Debian"/>
<separator/>
Dernière modification par Kookaburra (Le 11/01/2010, à 22:12)
Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...
Hors ligne
#25 Le 12/01/2010, à 19:42
- DomS
Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas
Merci ça marche ! Merci de ton aide. Je ne comprends pas ce que la ligne :
<separator label="Debian "/>
vient faire au début.
PC fixe : lubuntu 24.04
Hors ligne