Je suis sur Wheezy x64 c’est gnome 3 la version de base installé sur le système. Comment est-ce que l’on fait pour ouvrir à partir du terminal le programme “Menu principal” ? Merci de ton aide !
EDIT : Grâce à cette session j’ai pu chercher le nom de l’application à travers le “menu principal” c’est la commande et le programme appelé : "alacarte"
Je vais essayer de restaurer tout ça ! merci 
Me voilà à présent sur ma session par défaut. Je lance la commande Alt + F2 = alacarte. Je n’ai aucune réponse … J’ouvre un terminal grâce à la commande alt+f2=“gnome-terminal” puis je recommence dessus :
$ alacarte
Traceback (most recent call last):
  File "/usr/bin/alacarte", line 37, in <module>
    main()
  File "/usr/bin/alacarte", line 33, in main
    app = MainWindow(datadir, version)
  File "/usr/share/alacarte/Alacarte/MainWindow.py", line 43, in __init__
    self.editor = MenuEditor()
  File "/usr/share/alacarte/Alacarte/MenuEditor.py", line 33, in __init__
    self.load()
  File "/usr/share/alacarte/Alacarte/MenuEditor.py", line 47, in load
    raise ValueError("can not load menu tree %r" % (self.name,))
ValueError: can not load menu tree 'gnome-applications.menu'
J’essaie à présent “iceweasel” pour aller sur internet et vous rapporter tout cela : alt+f2=“iceweasel” et ce programme là fonctionne.
Avez-vous une idée ? Ou pensez-vous que je dois aller sur un forum spécialisé sur gnome 3 ? Car après tout, c’est de gnome qu’il s’agit plus que de Debian, non ?
EDIT 2 : Je viens de lancer le nautilus et j’ai été voir dans usr/bin/alacarte. Je l’ai ouvert avec gedit et voilà ce qu’il en ressort :
[code]#! /usr/bin/python -OOt
-- python --
-- coding: utf-8 --
Alacarte Menu Editor - Simple fd.o Compliant Menu Editor
Copyright © 2006  Travis Watkins
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
import sys
sys.path.insert(0,’/usr/share/alacarte’)
from Alacarte.MainWindow import MainWindow
def main():
try:
from Alacarte import config
datadir = config.pkgdatadir
version = config.VERSION
except ImportError:
datadir = '.'
version = '0.9’
app = MainWindow(datadir, version)
app.run()
if name == ‘main’:
main()[/code]
Et maintenant le fichier usr/share/alacarte/alacarte/menueditor.py :
[code]# -- coding: utf-8 --
Alacarte Menu Editor - Simple fd.o Compliant Menu Editor
Copyright © 2006  Travis Watkins, Heinrich Wendel
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
import os
import xml.dom.minidom
import xml.parsers.expat
from gi.repository import GMenu, GLib
from Alacarte import util
class MenuEditor(object):
def init(self, name=‘applications.menu’):
menu_prefix = os.getenv(‘XDG_MENU_PREFIX’) or 'gnome-'
name = menu_prefix + name
self.name = name
    self.tree = GMenu.Tree.new(name, GMenu.TreeFlags.SHOW_EMPTY|GMenu.TreeFlags.INCLUDE_EXCLUDED|GMenu.TreeFlags.INCLUDE_NODISPLAY|GMenu.TreeFlags.SHOW_ALL_SEPARATORS|GMenu.TreeFlags.SORT_DISPLAY_NAME)
    self.tree.connect('changed', self.menuChanged)
    self.load()
    self.path = os.path.join(util.getUserMenuPath(), self.tree.props.menu_basename)
    self.loadDOM()
def loadDOM(self):
    try:
        self.dom = xml.dom.minidom.parse(self.path)
    except (IOError, xml.parsers.expat.ExpatError), e:
        self.dom = xml.dom.minidom.parseString(util.getUserMenuXml(self.tree))
    util.removeWhitespaceNodes(self.dom)
def load(self):
    if not self.tree.load_sync():
        raise ValueError("can not load menu tree %r" % (self.name,))
def menuChanged(self, *a):
    self.load()
def save(self):
    fd = open(self.path, 'w')
    fd.write(self.dom.toprettyxml())
    fd.close()
def revert(self):
    self.revertTree(self.tree.get_root_directory())
    path = os.path.join(util.getUserMenuPath(), os.path.basename(self.tree.get_canonical_menu_path()))
    try:
        os.unlink(path)
    except OSError:
        pass
    self.loadDOM()
    self.save()
def revertTree(self, menu):
    item_iter = menu.iter()
    item_type = item_iter.next()
    while item_type != GMenu.TreeItemType.INVALID:
        if item_type == GMenu.TreeItemType.DIRECTORY:
            item = item_iter.get_directory()
            self.revertTree(item)
        elif item_type == GMenu.TreeItemType.ENTRY:
            item = item_iter.get_entry()
            self.revertItem(item)
        item_type = item_iter.next()
    self.revertMenu(menu)
def revertItem(self, item):
    if not self.canRevert(item):
        return
    try:
        os.remove(item.get_desktop_file_path())
    except OSError:
        pass
    self.save()
def revertMenu(self, menu):
    if not self.canRevert(menu):
        return
    #wtf happened here? oh well, just bail
    if not menu.get_desktop_file_path():
        return
    file_id = os.path.split(menu.get_desktop_file_path())[1]
    path = os.path.join(util.getUserDirectoryPath(), file_id)
    try:
        os.remove(path)
    except OSError:
        pass
    self.save()
def getMenus(self, parent):
    if parent is None:
        yield (self.tree.get_root_directory(), True)
        return
    item_iter = parent.iter()
    item_type = item_iter.next()
    while item_type != GMenu.TreeItemType.INVALID:
        if item_type == GMenu.TreeItemType.DIRECTORY:
            item = item_iter.get_directory()
            yield (item, self.isVisible(item))
        item_type = item_iter.next()
def getContents(self, item):
    contents = []
    item_iter = item.iter()
    item_type = item_iter.next()
    while item_type != GMenu.TreeItemType.INVALID:
        item = None
        if item_type == GMenu.TreeItemType.DIRECTORY:
            item = item_iter.get_directory()
        elif item_type == GMenu.TreeItemType.ENTRY:
            item = item_iter.get_entry()
        elif item_type == GMenu.TreeItemType.HEADER:
            item = item_iter.get_header()
        elif item_type == GMenu.TreeItemType.ALIAS:
            item = item_iter.get_alias()
        elif item_type == GMenu.TreeItemType.SEPARATOR:
            item = item_iter.get_separator()
        if item:
            contents.append(item)
        item_type = item_iter.next()
    return contents
def getItems(self, menu):
    item_iter = menu.iter()
    item_type = item_iter.next()
    while item_type != GMenu.TreeItemType.INVALID:
        item = None
        if item_type == GMenu.TreeItemType.ENTRY:
            item = item_iter.get_entry()
        elif item_type == GMenu.TreeItemType.DIRECTORY:
            item = item_iter.get_directory()
        elif item_type == GMenu.TreeItemType.HEADER:
            item = item_iter.get_header()
        elif item_type == GMenu.TreeItemType.ALIAS:
            item = item_iter.get_alias()
        elif item_type == GMenu.TreeItemType.SEPARATOR:
            item = item_iter.get_separator()
        yield (item, self.isVisible(item))
        item_type = item_iter.next()
def canRevert(self, item):
    if isinstance(item, GMenu.TreeEntry):
        if util.getItemPath(item.get_desktop_file_id()) is not None:
            path = util.getUserItemPath()
            if os.path.isfile(os.path.join(path, item.get_desktop_file_id())):
                return True
    elif isinstance(item, GMenu.TreeDirectory):
        if item.get_desktop_file_path():
            file_id = os.path.split(item.get_desktop_file_path())[1]
        else:
            file_id = item.get_menu_id() + '.directory'
        if util.getDirectoryPath(file_id) is not None:
            path = util.getUserDirectoryPath()
            if os.path.isfile(os.path.join(path, file_id)):
                return True
    return False
def setVisible(self, item, visible):
    dom = self.dom
    if isinstance(item, GMenu.TreeEntry):
        menu_xml = self.getXmlMenu(self.getPath(item.get_parent()), dom.documentElement, dom)
        if visible:
            self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(), 'Include')
            self.writeItem(item, NoDisplay=False)
        else:
            self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(), 'Exclude')
        self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), dom)
    elif isinstance(item, GMenu.TreeDirectory):
        item_iter = item.iter()
        first_child_type = item_iter.next()
        #don't mess with it if it's empty
        if first_child_type == GMenu.TreeItemType.INVALID:
            return
        menu_xml = self.getXmlMenu(self.getPath(item), dom.documentElement, dom)
        for node in self.getXmlNodesByName(['Deleted', 'NotDeleted'], menu_xml):
            node.parentNode.removeChild(node)
        self.writeMenu(item, NoDisplay=not visible)
        self.addXmlTextElement(menu_xml, 'DirectoryDir', util.getUserDirectoryPath(), dom)
    self.save()
def createItem(self, parent, before, after, **kwargs):
    file_id = self.writeItem(None, **kwargs)
    self.insertExternalItem(file_id, parent.get_menu_id(), before, after)
def insertExternalItem(self, file_id, parent_id, before=None, after=None):
    parent = self.findMenu(parent_id)
    dom = self.dom
    self.addItem(parent, file_id, dom)
    self.positionItem(parent, ('Item', file_id), before, after)
    self.save()
def insertExternalMenu(self, file_id, parent_id, before=None, after=None):
    menu_id = file_id.rsplit('.', 1)[0]
    parent = self.findMenu(parent_id)
    dom = self.dom
    self.addXmlDefaultLayout(self.getXmlMenu(self.getPath(parent), dom.documentElement, dom) , dom)
    menu_xml = self.getXmlMenu(self.getPath(parent) + [menu_id], dom.documentElement, dom)
    self.addXmlTextElement(menu_xml, 'Directory', file_id, dom)
    self.positionItem(parent, ('Menu', menu_id), before, after)
    self.save()
def createSeparator(self, parent, before=None, after=None):
    self.positionItem(parent, ('Separator',), before, after)
    self.save()
def editItem(self, item, icon, name, comment, command, use_term, parent=None, final=True):
    #if nothing changed don't make a user copy
    app_info = item.get_app_info()
    if icon == app_info.get_icon() and name == app_info.get_display_name() and comment == item.get_comment() and command == item.get_exec() and use_term == item.get_launch_in_terminal():
        return
    #hack, item.get_parent() seems to fail a lot
    if not parent:
        parent = item.get_parent()
    self.writeItem(item, Icon=icon, Name=name, Comment=comment, Exec=command, Terminal=use_term)
    if final:
        dom = self.dom
        menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom)
        self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), dom)
    self.save()
def editMenu(self, menu, icon, name, comment, final=True):
    #if nothing changed don't make a user copy
    if icon == menu.get_icon() and name == menu.get_name() and comment == menu.get_comment():
        return
    #we don't use this, we just need to make sure the <Menu> exists
    #otherwise changes won't show up
    dom = self.dom
    menu_xml = self.getXmlMenu(self.getPath(menu), dom.documentElement, dom)
    self.writeMenu(menu, Icon=icon, Name=name, Comment=comment)
    if final:
        self.addXmlTextElement(menu_xml, 'DirectoryDir', util.getUserDirectoryPath(), dom)
    self.save()
def copyItem(self, item, new_parent, before=None, after=None):
    dom = self.dom
    file_path = item.get_desktop_file_path()
    keyfile = GLib.KeyFile()
    keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS)
    util.fillKeyFile(keyfile, dict(Categories=[], Hidden=False))
    app_info = item.get_app_info()
    file_id = util.getUniqueFileId(app_info.get_name().replace(os.sep, '-'), '.desktop')
    out_path = os.path.join(util.getUserItemPath(), file_id)
    contents, length = keyfile.to_data()
    f = open(out_path, 'w')
    f.write(contents)
    f.close()
    self.addItem(new_parent, file_id, dom)
    self.positionItem(new_parent, ('Item', file_id), before, after)
    self.save()
    return file_id
def deleteItem(self, item):
    self.writeItem(item, Hidden=True)
    self.save()
def deleteMenu(self, menu):
    dom = self.dom
    menu_xml = self.getXmlMenu(self.getPath(menu), dom.documentElement, dom)
    self.addDeleted(menu_xml, dom)
    self.save()
def deleteSeparator(self, item):
    parent = item.get_parent()
    contents = self.getContents(parent)
    contents.remove(item)
    layout = self.createLayout(contents)
    dom = self.dom
    menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom)
    self.addXmlLayout(menu_xml, layout, dom)
    self.save()
def findMenu(self, menu_id, parent=None):
    if parent is None:
        parent = self.tree.get_root_directory()
    if menu_id == parent.get_menu_id():
        return parent
    item_iter = parent.iter()
    item_type = item_iter.next()
    while item_type != GMenu.TreeItemType.INVALID:
        if item_type == GMenu.TreeItemType.DIRECTORY:
            item = item_iter.get_directory()
            if item.get_menu_id() == menu_id:
                return item
            menu = self.findMenu(menu_id, item)
            if menu is not None:
                return menu
        item_type = item_iter.next()
def isVisible(self, item):
    if isinstance(item, GMenu.TreeEntry):
        app_info = item.get_app_info()
        return not (item.get_is_excluded() or app_info.get_nodisplay())
    elif isinstance(item, GMenu.TreeDirectory):
        return not item.get_is_nodisplay()
    return True
def getPath(self, menu):
    names = []
    current = menu
    while current is not None:
        names.append(current.get_menu_id())
        current = current.get_parent()
    # XXX - don't append root menu name, alacarte doesn't
    # expect it. look into this more.
    names.pop(-1)
    return names[::-1]
def getXmlMenuPart(self, element, name):
    for node in self.getXmlNodesByName('Menu', element):
        for child in self.getXmlNodesByName('Name', node):
            if child.childNodes[0].nodeValue == name:
                return node
    return None
def getXmlMenu(self, path, element, dom):
    for name in path:
        found = self.getXmlMenuPart(element, name)
        if found is not None:
            element = found
        else:
            element = self.addXmlMenuElement(element, name, dom)
    return element
def addXmlMenuElement(self, element, name, dom):
    node = dom.createElement('Menu')
    self.addXmlTextElement(node, 'Name', name, dom)
    return element.appendChild(node)
def addXmlTextElement(self, element, name, text, dom):
    for temp in element.childNodes:
        if temp.nodeName == name:
            if temp.childNodes[0].nodeValue == text:
                return
    node = dom.createElement(name)
    text = dom.createTextNode(text)
    node.appendChild(text)
    return element.appendChild(node)
def addXmlFilename(self, element, dom, filename, type = 'Include'):
    # remove old filenames
    for node in self.getXmlNodesByName(['Include', 'Exclude'], element):
        if node.childNodes[0].nodeName == 'Filename' and node.childNodes[0].childNodes[0].nodeValue == filename:
            element.removeChild(node)
    # add new filename
    node = dom.createElement(type)
    node.appendChild(self.addXmlTextElement(node, 'Filename', filename, dom))
    return element.appendChild(node)
def addDeleted(self, element, dom):
    node = dom.createElement('Deleted')
    return element.appendChild(node)
def makeKeyFile(self, file_path, kwargs):
    if 'KeyFile' in kwargs:
        return kwargs['KeyFile']
    keyfile = GLib.KeyFile()
    if file_path is not None:
        keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS)
    util.fillKeyFile(keyfile, kwargs)
    return keyfile
def writeItem(self, item, **kwargs):
    if item is not None:
        file_path = item.get_desktop_file_path()
    else:
        file_path = None
    keyfile = self.makeKeyFile(file_path, kwargs)
    if item is not None:
        file_id = item.get_desktop_file_id()
    else:
        file_id = util.getUniqueFileId(keyfile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, 'Name'), '.desktop')
    contents, length = keyfile.to_data()
    f = open(os.path.join(util.getUserItemPath(), file_id), 'w')
    f.write(contents)
    f.close()
    return file_id
def writeMenu(self, menu, **kwargs):
    if menu is not None:
        file_id = os.path.split(menu.get_desktop_file_path())[1]
        file_path = menu.get_desktop_file_path()
        keyfile = GLib.KeyFile()
        keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS)
    elif menu is None and 'Name' not in kwargs:
        raise Exception('New menus need a name')
    else:
        file_id = util.getUniqueFileId(kwargs['Name'], '.directory')
        keyfile = GLib.KeyFile()
    util.fillKeyFile(keyfile, kwargs)
    contents, length = keyfile.to_data()
    f = open(os.path.join(util.getUserDirectoryPath(), file_id), 'w')
    f.write(contents)
    f.close()
    return file_id
def getXmlNodesByName(self, name, element):
    for child in element.childNodes:
        if child.nodeType == xml.dom.Node.ELEMENT_NODE:
            if isinstance(name, str) and child.nodeName == name:
                yield child
            elif isinstance(name, list) or isinstance(name, tuple):
                if child.nodeName in name:
                    yield child
def addXmlMove(self, element, old, new, dom):
    if not self.undoMoves(element, old, new, dom):
        node = dom.createElement('Move')
        node.appendChild(self.addXmlTextElement(node, 'Old', old, dom))
        node.appendChild(self.addXmlTextElement(node, 'New', new, dom))
        #are parsed in reverse order, need to put at the beginning
        return element.insertBefore(node, element.firstChild)
def addXmlLayout(self, element, layout, dom):
    # remove old layout
    for node in self.getXmlNodesByName('Layout', element):
        element.removeChild(node)
    # add new layout
    node = dom.createElement('Layout')
    for order in layout:
        if order[0] == 'Separator':
            child = dom.createElement('Separator')
            node.appendChild(child)
        elif order[0] == 'Filename':
            child = self.addXmlTextElement(node, 'Filename', order[1], dom)
        elif order[0] == 'Menuname':
            child = self.addXmlTextElement(node, 'Menuname', order[1], dom)
        elif order[0] == 'Merge':
            child = dom.createElement('Merge')
            child.setAttribute('type', order[1])
            node.appendChild(child)
    return element.appendChild(node)
def addXmlDefaultLayout(self, element, dom):
    # remove old default layout
    for node in self.getXmlNodesByName('DefaultLayout', element):
        element.removeChild(node)
    # add new layout
    node = dom.createElement('DefaultLayout')
    node.setAttribute('inline', 'false')
    return element.appendChild(node)
def createLayout(self, items):
    layout = []
    layout.append(('Merge', 'menus'))
    for item in items:
        if isinstance(item, GMenu.TreeDirectory):
            layout.append(('Menuname', item.get_menu_id()))
        elif isinstance(item, GMenu.TreeEntry):
            layout.append(('Filename', item.get_desktop_file_id()))
        elif isinstance(item, GMenu.TreeSeparator):
            layout.append(('Separator',))
        else:
            layout.append(item)
    layout.append(('Merge', 'files'))
    return layout
def addItem(self, parent, file_id, dom):
    xml_parent = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom)
    self.addXmlFilename(xml_parent, dom, file_id, 'Include')
def moveItem(self, parent, item, before=None, after=None):
    self.positionItem(parent, item, before=before, after=after)
    self.save()
def positionItem(self, parent, item, before=None, after=None):
    contents = self.getContents(parent)
    if after:
        index = contents.index(after) + 1
    elif before:
        index = contents.index(before)
    else:
        # append the item to the list
        index = len(contents)
    #if this is a move to a new parent you can't remove the item
    if item in contents:
        # decrease the destination index, if we shorten the list
        if (before and (contents.index(item) < index)) \
                or (after and (contents.index(item) < index - 1)):
            index -= 1
        contents.remove(item)
    contents.insert(index, item)
    layout = self.createLayout(contents)
    dom = self.dom
    menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom)
    self.addXmlLayout(menu_xml, layout, dom)
def undoMoves(self, element, old, new, dom):
    nodes = []
    matches = []
    original_old = old
    final_old = old
    #get all <Move> elements
    for node in self.getXmlNodesByName(['Move'], element):
        nodes.insert(0, node)
    #if the <New> matches our old parent we've found a stage to undo
    for node in nodes:
        xml_old = node.getElementsByTagName('Old')[0]
        xml_new = node.getElementsByTagName('New')[0]
        if xml_new.childNodes[0].nodeValue == old:
            matches.append(node)
            #we should end up with this path when completed
            final_old = xml_old.childNodes[0].nodeValue
    #undoing <Move>s
    for node in matches:
        element.removeChild(node)
    if len(matches) > 0:
        for node in nodes:
            xml_old = node.getElementsByTagName('Old')[0]
            xml_new = node.getElementsByTagName('New')[0]
            path = os.path.split(xml_new.childNodes[0].nodeValue)
            if path[0] == original_old:
                element.removeChild(node)
                for node in dom.getElementsByTagName('Menu'):
                    name_node = node.getElementsByTagName('Name')[0]
                    name = name_node.childNodes[0].nodeValue
                    if name == os.path.split(new)[1]:
                        #copy app and dir directory info from old <Menu>
                        root_path = dom.getElementsByTagName('Menu')[0].getElementsByTagName('Name')[0].childNodes[0].nodeValue
                        xml_menu = self.getXmlMenu(root_path + '/' + new, dom.documentElement, dom)
                        for app_dir in node.getElementsByTagName('AppDir'):
                            xml_menu.appendChild(app_dir)
                        for dir_dir in node.getElementsByTagName('DirectoryDir'):
                            xml_menu.appendChild(dir_dir)
                        parent = node.parentNode
                        parent.removeChild(node)
                node = dom.createElement('Move')
                node.appendChild(self.addXmlTextElement(node, 'Old', xml_old.childNodes[0].nodeValue, dom))
                node.appendChild(self.addXmlTextElement(node, 'New', os.path.join(new, path[1]), dom))
                element.appendChild(node)
        if final_old == new:
            return True
        node = dom.createElement('Move')
        node.appendChild(self.addXmlTextElement(node, 'Old', final_old, dom))
        node.appendChild(self.addXmlTextElement(node, 'New', new, dom))
        return element.appendChild(node)[/code]