Также как и Accesibility Icon, вывод имени пользователя в верхнем правом углу и меню для изменения доступности имхо - не самая необходимая вещь и я бы с радостью от неё избавился. Также как и в случае с Accesibility Icon, существует соответствующее расширение gnome-shell, однако оно требует некоторого допиливания.
1) Устанавливаем расширение:
yum install gnome-shell-extension-noim
2) Т.к. версия Gnome Shell в Fedora 16 отличается от 3.0, под которую настроено расширение, идем в /usr/share/gnome-shell/extensions/noim@fpmurphy.com/metadata.json и редактируем там версию Gnome Shell, устанавливая:
"shell-version": ["3.2"],
3) Однако после перезапуска gnome все равно не работает (перезапуск осуществляется с помощью Alt+F2 и ввода команды "r"). Идем в лог ошибок: Alt+F2 lg (откроется отладчик расширений LookingGlass), вкладка Errors (кстати, закрывается отладчик нажатием Esc), где видим:
Extension noim@... had error: Error: no JS module 'statusMenu' found
4) Придется правит исходники. Открываем /usr/share/gnome-shell/extensions/noim@fpmurphy.com/extension.js и вносим следующие изменения:
- Комментируем импорт statusMenu:
// Gnome shell 3.2 has no statusMenu module
//const StatusMenu = imports.ui.statusMenu;
- Добавляем функции init(), enable(), disable():
// fixes error "missing 'init' function"
function init()
{
changeUserMenu();
}
// fixes error "missing 'enable' function"
function enable(){}
// fixes error "missing 'disable' function"
function disable(){}
- Поправляем получение переменной statusMenu в начале функции changeUserMenu:
let statusMenu = Main.panel._statusArea.userMenu;
- Поправляем скрытие ненужных пунктов меню, а именно, имени пользователя с иконкой, пункта "Уведомления" и "Учётные записи в сети". Для этого заменяем цикл по элементам массива children просто явным скрытием элементов по индексам:
// user name & icon
children[0].hide();
// "notification"
children[1].hide();
// delimiter
children[2].hide();
// "network accounts"
children[3].hide();
5) Перезапускаем Gnome Shell (Alt+F2 r)
6) Теперь расширение нужно разрешить: устанавливаем (если ещё не установили) gnome-tweak-tool, заходим в него, идем в "Расширения Shell", там включаем расширение. Снова перезапускаем гномшелл.
6) Теперь расширение нужно разрешить: устанавливаем (если ещё не установили) gnome-tweak-tool, заходим в него, идем в "Расширения Shell", там включаем расширение. Снова перезапускаем гномшелл.
7) Всё, теперь вместо длинной надписи с имененем пользователя на панели видим только иконку "Fedora":
На всякий случай, полный полученный мной текст extension.js:
//
// Copyright 2011 (c) Finnbarr P. Murphy. All rights reserved.
//
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
// Gnome shell 3.2 has no statusMenu module
//const StatusMenu = imports.ui.statusMenu;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
// change the icon_name if you want to display a different icon
// the icon must exist in the appropriate directory
const ICON_NAME = 'fedora-logo-icon';
// fixes error "missing 'init' function"
function init()
{
changeUserMenu();
}
// fixes error "missing 'enable' function"
function enable(){}
// fixes error "missing 'disable' function"
function disable(){}
function changeUserMenu()
{
// future version - let statusMenu = Main.panel._userMenu;
//let statusMenu = Main.panel._statusmenu;
let statusMenu = Main.panel._statusArea.userMenu;
let noimlogo = new St.Icon({ icon_type: St.IconType.FULLCOLOR,
style_class: 'popup-menu-icon',
icon_name: ICON_NAME });
let box = statusMenu._name.get_parent();
box.get_children().forEach(function (actor) { actor.destroy(); });
let noimBox = new St.BoxLayout({ style_class: 'noim-icon'});
noimBox.add_actor(noimlogo);
box.add_actor(noimBox);
let _name = new St.Label();
box.add(_name, { y_align: St.Align.MIDDLE, y_fill: false });
statusMenu._updateUserName = function() {};
statusMenu._updatePresenceIcon = function(presence, status) { };
statusMenu._presence = null;
let children = statusMenu.menu.box.get_children();
// user name & icon
children[0].hide();
// "notification"
children[1].hide();
// delimiter
children[2].hide();
// "network accounts"
children[3].hide();
}
function main() {
changeUserMenu();
}
Здравствуйте. Не могли бы вы подсказать, где нужно копаться, чтобы добавить пару кнопок на панель и вместо кнопки "обзор" поставить иконку без использования дополнительных расширений? Буду очень признателен!
ОтветитьУдалить