J'ai supprimé toutes mes applications du menu principal

Bonsoir,

J’ai fait une fausse manipulation et j’ai cliqué au mauvais endroit dans l’application : “Menu principal”. Et maintenant lorsque je me connecte sur ma session je n’ai plus aucune application ! Il n’y a plus rien du tout… Je vous écris ce message grâce à un autre compte utilisateur sur mon pc…
Savez-vous comment faire pour récupérer toutes ses applications ?
Ce que je faisais au moment de tout supprimer : j’avais des vieilles applications qui ne me servaient plus à rien et je cherchais à les supprimer du menu. Sauf qu’au moment où je voulais supprimer un raccourcie vers une application, j’ai en fait tout supprimer. Je n’ai plus aucun menu, je n’ai plus rien du tout…

Merci pour votre contribution ! :slightly_smiling:

[quote=“James Grishenko”]Bonsoir,

J’ai fait une fausse manipulation et j’ai cliqué au mauvais endroit dans l’application : “Menu principal”. Et maintenant lorsque je me connecte sur ma session je n’ai plus aucune application ! Il n’y a plus rien du tout… Je vous écris ce message grâce à un autre compte utilisateur sur mon pc…
Savez-vous comment faire pour récupérer toutes ses applications ?
Ce que je faisais au moment de tout supprimer : j’avais des vieilles applications qui ne me servaient plus à rien et je cherchais à les supprimer du menu. Sauf qu’au moment où je voulais supprimer un raccourcie vers une application, j’ai en fait tout supprimer. Je n’ai plus aucun menu, je n’ai plus rien du tout…

Merci pour votre contribution ! :slightly_smiling:[/quote]

Un menu :think: oui mais de quel gestionnaire de fenêtre :whistle: ?

un alt F2 te permettra de lancer à la main un terminal et depuis ce terminal relancer l’application toujours à la main pour éditer à nouveau ton menu :whistle:

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 :wink:

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]

Bon apparement t’a fais sauté l’arborescence du menu, comment as-tu fais ton compte.

Ouvre le dans un premier temps en ROOT pour chercher à récupérer un arbre potable ou sinon récupère celui-ci d’un user ou le menu est valide.

J’ai fait :

[code]$ su

alacarte[/code]

J’ai le programme qui s’ouvre cette fois-ci ! C’est super ! Je fais comment ensuite pour que l’arborescence et tout soient copiés sur ma session utilisateur ?

Je viens d’avoir une idée ! Est-ce que l’on peut remettre à zéro son environnement graphique ? Comme ça je n’aurai pas à tout réinstaller (et donc à reconfigurer mon ordinateur depuis le début :013 )

up !

peut-être en réinstallant un paquet du style gnome-menu

(faire une recherche dans les paquets installés : dpkg -l |grep gnome )

Voilà j’ai fait ce que tu m’as dit… :

adrien@Adrien:~$ dpkg -l |grep gnome ii gir1.2-gnomebluetooth-1.0 3.4.2-1 amd64 Introspection data for GnomeBluetooth ii gir1.2-gnomekeyring-1.0 3.4.1-1 amd64 GNOME keyring services library - introspection data ii gkbd-capplet 3.4.0.2-1 amd64 GNOME Panel applet for libgnomekbd ii gnome-accessibility-themes 3.4.2-2.1 all Accessibility themes for the GNOME desktop ii gnome-applets 3.4.1-3 amd64 Various applets for the GNOME panel - binary files ii gnome-applets-data 3.4.1-3 all Various applets for the GNOME panel - data files ii gnome-backgrounds 3.4.2-1 all Set of backgrounds packaged with the GNOME desktop ii gnome-bluetooth 3.4.2-1 amd64 GNOME Bluetooth tools ii gnome-color-manager 3.4.2-1 amd64 Color management integration for the GNOME desktop environment ii gnome-contacts 3.4.1-1+b1 amd64 Contacts manager for GNOME ii gnome-control-center 1:3.4.3.1-2 amd64 utilities to configure the GNOME desktop ii gnome-control-center-data 1:3.4.3.1-2 all configuration applets for GNOME - data files ii gnome-core 1:3.4+7 amd64 GNOME Desktop Environment -- essential components ii gnome-desktop3-data 3.4.2-1 all Common files for GNOME desktop apps ii gnome-dictionary 3.4.0-2 amd64 GNOME dictionary application ii gnome-disk-utility 3.0.2-3 amd64 manage and configure disk drives and media ii gnome-documents 0.4.2-2 amd64 Document manager for GNOME ii gnome-font-viewer 3.4.0-2 amd64 font viewer for GNOME ii gnome-games 1:3.4.2-3 all games for the GNOME desktop ii gnome-games-data 1:3.4.2-3 all data files for the GNOME games ii gnome-games-extra-data 3.2.0-4 all games for the GNOME desktop (extra artwork) ii gnome-icon-theme 3.4.0-2 all GNOME Desktop icon theme ii gnome-icon-theme-extras 3.4.0-1 all GNOME Desktop icon theme (additional icons) ii gnome-icon-theme-symbolic 3.4.0-2 all GNOME desktop icon theme (symbolic icons) ii gnome-js-common 0.1.2-1 all Common modules for GNOME JavaScript interpreters ii gnome-keyring 3.4.1-5 amd64 GNOME keyring services (daemon and tools) ii gnome-mag 1:0.16.3-1 amd64 a screen magnifier for the GNOME desktop ii gnome-media 3.4.0-1 amd64 GNOME media utilities ii gnome-menus 3.4.2-5 amd64 GNOME implementation of the freedesktop menu specification ii gnome-mime-data 2.18.0-1 all base MIME and Application database for GNOME. ii gnome-nettool 3.2.0-1 amd64 network information tool for GNOME ii gnome-online-accounts 3.4.2-2 amd64 GNOME Online Accounts ii gnome-orca 3.4.2-2 all Scriptable screen reader ii gnome-packagekit 3.4.2-2 amd64 Graphical distribution neutral software management tools ii gnome-packagekit-data 3.4.2-2 all Data files for graphical distribution neutral software management tools ii gnome-panel 3.4.2.1-4 amd64 launcher and docking facility for GNOME ii gnome-panel-data 3.4.2.1-4 all common files for the GNOME Panel ii gnome-power-manager 3.4.0-2 amd64 power management tool for the GNOME desktop ii gnome-screensaver 3.4.1-1 amd64 GNOME screen saver and locker ii gnome-screenshot 3.4.1-1 amd64 screenshot application for GNOME ii gnome-session 3.4.2.1-4 all GNOME Session Manager - GNOME 3 session ii gnome-session-bin 3.4.2.1-4 amd64 GNOME Session Manager - Minimal runtime ii gnome-session-common 3.4.2.1-4 all GNOME Session Manager - common files ii gnome-session-fallback 3.4.2.1-4 all GNOME Session Manager - GNOME fallback session ii gnome-settings-daemon 3.4.2+git20121218.7c1322-3+deb7u2 amd64 daemon handling the GNOME session settings ii gnome-shell 3.4.2-7 amd64 graphical shell for the GNOME desktop ii gnome-shell-common 3.4.2-7 all common files for the GNOME graphical shell ii gnome-shell-extensions 3.4.0-2 all Extensions to extend functionality of GNOME Shell ii gnome-sudoku 1:3.4.2-3 all Sudoku puzzle game for GNOME ii gnome-sushi 0.4.1-3 amd64 sushi is a quick previewer for nautilus ii gnome-system-log 3.4.1-3 amd64 system log viewer for GNOME ii gnome-system-monitor 3.4.1-2+b1 amd64 Process viewer and system resource monitor for GNOME ii gnome-terminal 3.4.1.1-2 amd64 GNOME terminal emulator application ii gnome-terminal-data 3.4.1.1-2 all Data files for the GNOME terminal emulator ii gnome-themes-standard 3.4.2-2.1 amd64 Standard GNOME themes ii gnome-themes-standard-data 3.4.2-2.1 all Data files for GNOME standard themes ii gnome-tweak-tool 3.4.0.1-2 all tool to adjust advanced configuration settings for GNOME ii gnome-user-guide 3.4.2-1+build1 all GNOME user's guide ii gnome-user-share 3.0.2-1 amd64 User level public file sharing via WebDAV or ObexFTP ii gnome-video-effects 0.4.0-1 all GNOME Video Effects ii libgnome-bluetooth10 3.4.2-1 amd64 GNOME Bluetooth tools - support library ii libgnome-desktop-3-2 3.4.2-1 amd64 Utility library for loading .desktop files - runtime files ii libgnome-keyring-common 3.4.1-1 all GNOME keyring services library - data files ii libgnome-keyring0:amd64 3.4.1-1 amd64 GNOME keyring services library ii libgnome-mag2 1:0.16.3-1 amd64 screen magnification library for the GNOME desktop (shared library) ii libgnome-media-profiles-3.0-0 3.0.0-1 amd64 GNOME Media Profiles library ii libgnome-menu-3-0 3.4.2-5 amd64 GNOME implementation of the freedesktop menu specification ii libgnome2-0 2.32.1-3 amd64 The GNOME library - runtime files ii libgnome2-common 2.32.1-3 all The GNOME library - common files ii libgnomecanvas2-0 2.30.3-1.2 amd64 powerful object-oriented display engine - runtime files ii libgnomecanvas2-common 2.30.3-1.2 all powerful object-oriented display engine - common files ii libgnomekbd-common 3.4.0.2-1 all GNOME library to manage keyboard configuration - common files ii libgnomekbd7 3.4.0.2-1 amd64 GNOME library to manage keyboard configuration - shared library ii libgnomeui-0 2.24.5-2 amd64 GNOME user interface library - runtime files ii libgnomeui-common 2.24.5-2 all GNOME user interface library - common files ii libgnomevfs2-0 1:2.24.4-2 amd64 GNOME Virtual File System (runtime libraries) ii libgnomevfs2-common 1:2.24.4-2 all GNOME Virtual File System (common files) ii libgnomevfs2-extra 1:2.24.4-2 amd64 GNOME Virtual File System (extra modules) ii libpam-gnome-keyring 3.4.1-5 amd64 PAM module to unlock the GNOME keyring upon login ii libreoffice-gnome 1:3.5.4+dfsg2-0+deb7u2 amd64 office productivity suite -- GNOME integration ii libsoup-gnome2.4-1:amd64 2.38.1-2 amd64 HTTP library implementation in C -- GNOME support library ii network-manager-gnome 0.9.4.1-5 amd64 network management framework (GNOME frontend) ii policykit-1-gnome 0.105-2 amd64 GNOME authentication agent for PolicyKit-1 ii python-gnome2 2.28.1+dfsg-1 amd64 Python bindings for the GNOME desktop environment ii task-gnome-desktop 3.14.1 all GNOME desktop environment adrien@Adrien:~$ su Mot de passe : root@Adrien:/home/adrien# apt-get --purge remove gnome-menu Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait E: Impossible de trouver le paquet gnome-menu root@Adrien:/home/adrien# apt-get --purge remove gnome-menu Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait E: Impossible de trouver le paquet gnome-menu root@Adrien:/home/adrien#

tu as réinstallé le paquet gnome-menus?

La première fois j’avais fait au singulier “gnome-menu” ça ne marchait pas. Là ça marche voilà le résultat :

adrien@Adrien:~$ su Mot de passe : root@Adrien:/home/adrien# apt-get remove --purge gnome-menus Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants seront ENLEVÉS : gnome-applets* gnome-control-center* gnome-core* gnome-menus* gnome-panel* gnome-session-fallback* task-gnome-desktop* 0 mis à jour, 0 nouvellement installés, 7 à enlever et 0 non mis à jour. Après cette opération, 7 391 ko d'espace disque seront libérés. Souhaitez-vous continuer [O/n] ? O (Lecture de la base de données... 140427 fichiers et répertoires déjà installés.) Suppression de gnome-applets ... Suppression de task-gnome-desktop ... Suppression de gnome-core ... Suppression de gnome-control-center ... Purge des fichiers de configuration de gnome-control-center ... Suppression de gnome-session-fallback ... Suppression de gnome-panel ... Suppression de gnome-menus ... Purge des fichiers de configuration de gnome-menus ... Traitement des actions différées (« triggers ») pour « man-db »... Traitement des actions différées (« triggers ») pour « gconf2 »... Traitement des actions différées (« triggers ») pour « menu »... Traitement des actions différées (« triggers ») pour « desktop-file-utils »... root@Adrien:/home/adrien# apt-get install gnome-menus Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires : accountsservice apg at-spi2-core baobab caribou caribou-antler cli-common cups-pk-helper dconf-tools empathy empathy-common espeak-data fonts-cantarell gcalctool gdm3 gir1.2-atspi-2.0 gir1.2-panelapplet-4.0 gir1.2-wnck-3.0 gnome-applets-data gnome-backgrounds gnome-control-center-data gnome-dictionary gnome-disk-utility gnome-font-viewer gnome-icon-theme-extras gnome-mag gnome-media gnome-online-accounts gnome-orca gnome-packagekit gnome-packagekit-data gnome-panel-data gnome-screenshot gnome-system-log gnome-system-monitor gucharmap hyphen-en-us libatk-adaptor libatk-adaptor-data libatk-bridge2.0-0 libatspi1.0-0 libatspi2.0-0 libavahi-gobject0 libavahi-ui-gtk3-0 libbrlapi0.5 libcaribou-gtk-module libcaribou-gtk3-module libcolorblind0 libcpufreq0 libdbus-glib1.0-cil libdbus1.0-cil libdotconf1.0 libespeak1 libgail-common libgconf2.0-cil libgdict-1.0-6 libgdict-common libgdiplus libgdu-gtk0 libgeocode-glib0 libglib2.0-cil libgmime2.6-cil libgnome-mag2 libgnome-media-profiles-3.0-0 libgtk-vnc-2.0-0 libgtk2.0-cil libgvnc-1.0-0 liblouis-data liblouis2 libmono-addins-gui0.2-cil libmono-addins0.2-cil libmono-cairo4.0-cil libmono-corlib4.0-cil libmono-i18n-west4.0-cil libmono-i18n4.0-cil libmono-posix4.0-cil libmono-security4.0-cil libmono-sharpzip4.84-cil libmono-system-configuration4.0-cil libmono-system-core4.0-cil libmono-system-drawing4.0-cil libmono-system-security4.0-cil libmono-system-xml4.0-cil libmono-system4.0-cil libnm-glib-vpn1 libnm-gtk-common libnm-gtk0 librest-extras-0.7-0 libsocialweb-client2 libsocialweb-common libsocialweb-service libsocialweb0 libsonic0 libspeechd2 libtelepathy-farstream2 libwnck-3-0 libwnck-3-common mobile-broadband-provider-info mono-4.0-gac mono-gac mono-runtime mousetweaks nautilus-sendto-empathy network-manager-gnome python-brlapi python-louis python-pyatspi python-pyatspi2 python-speechd rdesktop sound-theme-freedesktop speech-dispatcher telepathy-gabble telepathy-idle telepathy-logger telepathy-salut tomboy vinagre vino xbrlapi Veuillez utiliser « apt-get autoremove » pour les supprimer. Les NOUVEAUX paquets suivants seront installés : gnome-menus 0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 165 ko dans les archives. Après cette opération, 1 578 ko d'espace disque supplémentaires seront utilisés. Réception de : 1 http://ftp.fr.debian.org/debian/ wheezy/main gnome-menus amd64 3.4.2-5 [165 kB] 165 ko réceptionnés en 6s (24,9 ko/s) Sélection du paquet gnome-menus précédemment désélectionné. (Lecture de la base de données... 140150 fichiers et répertoires déjà installés.) Dépaquetage de gnome-menus (à partir de .../gnome-menus_3.4.2-5_amd64.deb) ... Paramétrage de gnome-menus (3.4.2-5) ... root@Adrien:/home/adrien#

Est-ce que toutes les dépendances qu’il a supprimé, il les a remises ? Ou je dois les remettre ? Merci et aucun changement :frowning:

Pour réinstaller un paquet, c’est plutôt

on ne “purge” que si vraiment ça ne résout pas le problème, vu que “purge” va supprimer les fichiers de conf…

Sinon j’ai pas de Gnome3 sous la main là tout de suite, mais il faudrait essayer de recopier les menus depuis un profil clean