Como posso remover um dos dois painéis MATE sem usar a GUI?

3

Em uma instalação padrão o MATE configura dois painéis (superior e inferior), eu gostaria de ter o painel superior removido usando mateconftool-2 ou outra ferramenta usando a linha de comando (Terminal).

Não consigo encontrar como fazer isso (no Terminal), então tentei excluir o diretório em ~/.mateconf/apps/panel/toplevels/ e reiniciar o painel, mas ele não faz nada e o painel ainda está lá.

Como posso remover um dos painéis não usando a GUI ?

    
por Uri Herrera 19.12.2012 / 07:54

2 respostas

5

Depois de alguns rastros e erros, um incontável diretório, arquivo diffing, e também cavando um pouco no código-fonte Mate-Panel (panel.c ), confirmado a seguir:

Etapa para remover o painel manualmente

(1) Todos os objetos do painel de destino precisam ser removidos

  • Excluir a pasta do objeto em ~/mateconf/app/panel/objects/
  • Excluir a referência do objeto de /apps/panel/general/object_id_list in ~/mateconf/app/general/%mateconf.xml

(2) Todos os applets do painel de destino precisam ser removidos

  • Excluir a pasta do applet em ~/mateconf/app/panel/applets/
  • Excluir a referência do applet de /apps/panel/general/applet_id_list in ~/mateconf/app/general/%mateconf.xml

(3) Remover o painel

  • Excluir a pasta do painel em ~/mateconf/app/panel/toplevels/
  • Excluir a referência do painel de /apps/panel/general/toplevel_id_list in ~/mateconf/app/general/%mateconf.xml

Longa história curta, a seguir é o resultado

DEL_PANEL é o painel a ser excluído. Atualmente está definido para o painel superior.

#!/bin/bash

PANEL_PATH="${HOME}/.mateconf/apps/panel"
DEL_PANEL='top_panel_screen0'

    echo 'DEBUG: Panel Path' ${PANEL_PATH}
    echo 'DEBUG: Panel to be deleted' ${DEL_PANEL}

# -- Get old toplevel id list

TOPLEVEL_ID_LIST_OLD='mateconftool-2 -g /apps/panel/general/toplevel_id_list | cut -d\[ -f2 | cut -d\] -f1 | sed 's/,/ /g''

    echo 'DEBUG: Old toplevel_id_list' ${TOPLEVEL_ID_LIST_OLD}

# -- Generate new toplevel id list

TOPLEVEL_ID_LIST_NEW=''
for i in ${TOPLEVEL_ID_LIST_OLD}
do
    if [[ "$DEL_PANEL" != *"${i}"* ]]
    then
        echo -e "DEBUG: \tKeep ${i}"
        TOPLEVEL_ID_LIST_NEW="${TOPLEVEL_ID_LIST_NEW} ${i}"
    else
        echo -e "DEBUG: \tDel  ${i}"
        # -- Delete panel folder
        rm -rf ${PANEL_PATH}/toplevels/${i}
    fi
done
TOPLEVEL_ID_LIST_NEW="['echo ${TOPLEVEL_ID_LIST_NEW} | sed 's/ /,/g'']"

# -- Apply new toplevel id list
mateconftool-2 -s /apps/panel/general/toplevel_id_list -t list --list-type=string "${TOPLEVEL_ID_LIST_NEW}"

    echo 'DEBUG: New toplevel_id_list' 'mateconftool-2 -g /apps/panel/general/toplevel_id_list'


# - APPLETS
# -- Identify applet to be deleted

cd ${PANEL_PATH}/applets
DEL_APPLET='grep -r ${DEL_PANEL} *|cut -d\/ -f1'

    echo 'DEBUG: DEL_APPLET' ; for i in ${DEL_APPLET} ; do echo -e "DEBUG: \t${i}" ; done

# -- Get old applet id list

APPLET_ID_LIST_OLD='mateconftool-2 -g /apps/panel/general/applet_id_list | cut -d\[ -f2 | cut -d\] -f1 | sed 's/,/ /g''

    echo 'DEBUG: Old applet_id_list' ${APPLET_ID_LIST_OLD}

# -- Generate new applet id list

APPLET_ID_LIST_NEW=''
for i in ${APPLET_ID_LIST_OLD}
do
    if [[ "$DEL_APPLET" != *"${i}"* ]]
    then
        echo -e "DEBUG: \tKeep ${i}"
        APPLET_ID_LIST_NEW="${APPLET_ID_LIST_NEW} ${i}"
    else
        echo -e "DEBUG: \tDel  ${i}"
        # -- Delete applet folder
        rm -rf ${PANEL_PATH}/applets/${i}
    fi
done
APPLET_ID_LIST_NEW="['echo ${APPLET_ID_LIST_NEW} | sed 's/ /,/g'']"

# -- Apply new applet id list
mateconftool-2 -s /apps/panel/general/applet_id_list -t list --list-type=string "${APPLET_ID_LIST_NEW}"

    echo 'DEBUG: New applet_id_list' 'mateconftool-2 -g /apps/panel/general/applet_id_list'


# - OBJECTS
# -- Identify object to be deleted

cd ${PANEL_PATH}/objects
DEL_OBJECT='grep -r ${DEL_PANEL} *|cut -d\/ -f1'

    echo 'DEBUG: DEL_OBJECT' ; for i in ${DEL_OBJECT} ; do echo -e "DEBUG: \t${i}" ; done

# -- Get old object id list

OBJECT_ID_LIST_OLD='mateconftool-2 -g /apps/panel/general/object_id_list | cut -d\[ -f2 | cut -d\] -f1 | sed 's/,/ /g''

    echo 'DEBUG: Old object_id_list' ${OBJECT_ID_LIST_OLD}

# -- Generate new object id list

OBJECT_ID_LIST_NEW=''
for i in ${OBJECT_ID_LIST_OLD}
do
    if [[ "$DEL_OBJECT" != *"${i}"* ]]
    then
        echo -e "DEBUG:\tKeep ${i}"
        OBJECT_ID_LIST_NEW="${OBJECT_ID_LIST_NEW} ${i}"
    else
        echo -e "DEBUG:\tDel  ${i}"
        # -- Delete object folder
        rm -rf ${PANEL_PATH}/objects/${i}
    fi
done
OBJECT_ID_LIST_NEW="['echo ${OBJECT_ID_LIST_NEW} | sed 's/ /,/g'']"

# -- Apply new object id list
mateconftool-2 -s /apps/panel/general/object_id_list -t list --list-type=string "${OBJECT_ID_LIST_NEW}"

    echo 'DEBUG: New applet_id_list' 'mateconftool-2 -g /apps/panel/general/object_id_list'

Ambiente de teste

  • SO: Ubuntu 12.04 LTS
  • Mate Desktop: 1.4.x, Mate Official Repo para Ubuntu em aqui .
por John Siu 22.12.2012 / 12:47
1

Configurar a chave do dconf org.mate.session.required-component.panel para a string vazia também funciona. Você provavelmente pode fazer isso usando um comando dconf como:

dconf write /org/mate/session/required-components/panel "''"

Edit: Ah, eu não vi a parte um do dois . Desculpa. Espero que possa ajudar outras pessoas.

    
por Renke Grunwald 20.05.2015 / 19:41