如何在不使用GUI的情况下删除两个MATE面板中的一个?

在默认安装中,MATE设置了两个面板(顶部和底部),我想使用mateconftool-2或使用命令行(终端)的其他工具删除顶部面板。

我找不到如何做到这一点(从终端),所以我尝试删除~/.mateconf/apps/panel/toplevels/的目录,然后重新启动面板,但它什么也没做,因此面板仍然存在。

如何删除使用GUI的面板之一?

经过一些跟踪和错误,无数的目录,文件差异,还有一点点挖掘到Mate-Panel源代码( panel.c ),确认如下:

步骤手动删除面板

(1)必须移除目标面板的所有对象

  • ~/mateconf/app/panel/objects/删除对象的文件夹
  • ~/mateconf/app/general/%mateconf.xml /apps/panel/general/object_id_list删除对象的引用

(2)必须删除目标面板的所有小程序

  • 删除~/mateconf/app/panel/applets/ applet文件夹
  • ~/mateconf/app/general/%mateconf.xml /apps/panel/general/applet_id_list中的/apps/panel/general/applet_id_list删除applet的引用

(3)移除面板

  • 删除~/mateconf/app/panel/toplevels/面板文件夹
  • ~/mateconf/app/general/%mateconf.xml /apps/panel/general/toplevel_id_list中删除面板的引用

长话短说,结果如下

DEL_PANEL是要删除的面板。 目前设置为顶级面板。

 #!/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` 

测试环境

  • 操作系统:Ubuntu 12.04 LTS
  • Mate Desktop:1.4.x,从这里为Ubuntu配合官方回购。

将dconf密钥org.mate.session.required-component.panel设置为空字符串也可以。 您可以使用dconf命令执行此操作,如:

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

编辑:哦,我没有看到两者中的第一部分。 抱歉。 我希望它可以帮助其他人。