This is a Gnome Shell extension to make Advanced Settings (aka Gnome Tweak Tool) easier to access, via shortcut in User Menu.
Here's the extension download link. Just slide to install. Make sure you already installed Gnome Tweak Tool.
If you have "Alternative Status Menu" extension installed, these two extensions may have conflicted and as the result the Advanced Settings shortcut doesn't always appear after restart in User Menu.
![]() |
Advanced Settings in UserMenu by outbreak |
The latest version of Alternative Status Menu extension should fix this, but in case you haven't the latest version here's how to fix it (courtesy of erguille), apply on your own risk. I did this and it works, your mileage may vary :
- Disable "Advanced Setting in UserMenu"
- backup first then open alternative-status-menu extension.js , it maybe located in/usr/share/gnome-shell/extensions/alternative-status-menu@gnome-shell-extensions.gnome.org/ or
/home/USER/.local/share/gnome-shell/extensions - on line 5 add:
const Shell = imports.gi.Shell; - anywhere add:function _onAdvancedSettingsActivate() { Main.overview.hide();
let app = Shell.AppSystem.get_default().lookup_app('gnome-tweak-tool.desktop');
app.activate(); } - Between "System Settings" and PopupSeparator add:
item = new PopupMenu.PopupMenuItem(_("Advanced Settings"));
item.connect('activate', Lang.bind(item, _onAdvancedSettingsActivate)); this.menu.addMenuItem(item); - restart Gnome Shell with Alt+F2 "r"
The whole code should look like this, the formatting maybe slightly off so don't just copy and paste it may not work. Changes are in bold, so you can compare it with yours.:
/* -*- mode: js2 - indent-tabs-mode: nil - js2-basic-offset: 4 -*- */
const Lang = imports.lang;
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Shell = imports.gi.Shell;
const GnomeSession = imports.misc.gnomeSession;
const UserMenu = imports.ui.userMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
function updateSuspend(object, pspec, item) {
item.actor.visible = object.get_can_suspend();
}
function updateHibernate(object, pspec, item) {
item.actor.visible = object.get_can_hibernate();
}
function onSuspendActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.suspend_sync(null);
}));
}
function onHibernateActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.hibernate_sync(null);
}));
}
function createSubMenu() {
let item;
item = new UserMenu.IMStatusChooserItem();
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
this.menu.addMenuItem(item);
this._notificationsSwitch = item;
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Online Accounts"));
item.connect('activate', Lang.bind(this, this._onOnlineAccountsActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("System Settings"));
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Advanced Settings"));
item.connect('activate', Lang.bind(item, _onAdvancedSettingsActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
this.menu.addMenuItem(item);
this._lockScreenItem = item;
item = new PopupMenu.PopupMenuItem(_("Switch User"));
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
this.menu.addMenuItem(item);
this._loginScreenItem = item;
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
this.menu.addMenuItem(item);
this._logoutItem = item;
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Suspend"));
item.connect('activate', Lang.bind(this, onSuspendActivate));
this._upClient.connect('notify::can-suspend', Lang.bind(this, updateSuspend, item));
updateSuspend(this._upClient, null, item);
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Hibernate"));
item.connect('activate', Lang.bind(this, onHibernateActivate));
this._upClient.connect('notify::can-hibernate', Lang.bind(this, updateHibernate, item));
updateHibernate(this._upClient, null, item);
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Power Off..."));
item.connect('activate', Lang.bind(this, function() {
this._session.ShutdownRemote();
}));
this.menu.addMenuItem(item);
}
// Put your extension initialization code here
function init(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
function reset(statusMenu) {
statusMenu._updateSwitchUser();
statusMenu._updateLogout();
statusMenu._updateLockScreen();
statusMenu._presence.getStatus(Lang.bind(statusMenu, statusMenu._updateSwitch));
// HACK! Obtain the IMStatusChooserItem and force a _updateUser
statusMenu.menu._getMenuItems()[0]._updateUser();
}
function enable() {
imports.mainloop.timeout_add(9000, function() { _enable(); });
}
function _enable() {
let statusMenu = Main.panel._statusArea.userMenu;
statusMenu.menu.removeAll();
createSubMenu.call(statusMenu);
reset(statusMenu);
}
function disable() {
// not guarranteed to work, if more extensions operate in the same place
let statusMenu = Main.panel._statusArea.userMenu;
statusMenu.menu.removeAll();
statusMenu._createSubMenu();
reset(statusMenu);
}
function _onAdvancedSettingsActivate() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().lookup_app('gnome-tweak-tool.desktop');
app.activate();
}
keyword : advanced setting, user menu
const Lang = imports.lang;
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Shell = imports.gi.Shell;
const GnomeSession = imports.misc.gnomeSession;
const UserMenu = imports.ui.userMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
function updateSuspend(object, pspec, item) {
item.actor.visible = object.get_can_suspend();
}
function updateHibernate(object, pspec, item) {
item.actor.visible = object.get_can_hibernate();
}
function onSuspendActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.suspend_sync(null);
}));
}
function onHibernateActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.hibernate_sync(null);
}));
}
function createSubMenu() {
let item;
item = new UserMenu.IMStatusChooserItem();
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
this.menu.addMenuItem(item);
this._notificationsSwitch = item;
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Online Accounts"));
item.connect('activate', Lang.bind(this, this._onOnlineAccountsActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("System Settings"));
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Advanced Settings"));
item.connect('activate', Lang.bind(item, _onAdvancedSettingsActivate));
this.menu.addMenuItem(item);
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
this.menu.addMenuItem(item);
this._lockScreenItem = item;
item = new PopupMenu.PopupMenuItem(_("Switch User"));
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
this.menu.addMenuItem(item);
this._loginScreenItem = item;
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
this.menu.addMenuItem(item);
this._logoutItem = item;
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Suspend"));
item.connect('activate', Lang.bind(this, onSuspendActivate));
this._upClient.connect('notify::can-suspend', Lang.bind(this, updateSuspend, item));
updateSuspend(this._upClient, null, item);
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Hibernate"));
item.connect('activate', Lang.bind(this, onHibernateActivate));
this._upClient.connect('notify::can-hibernate', Lang.bind(this, updateHibernate, item));
updateHibernate(this._upClient, null, item);
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Power Off..."));
item.connect('activate', Lang.bind(this, function() {
this._session.ShutdownRemote();
}));
this.menu.addMenuItem(item);
}
// Put your extension initialization code here
function init(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
function reset(statusMenu) {
statusMenu._updateSwitchUser();
statusMenu._updateLogout();
statusMenu._updateLockScreen();
statusMenu._presence.getStatus(Lang.bind(statusMenu, statusMenu._updateSwitch));
// HACK! Obtain the IMStatusChooserItem and force a _updateUser
statusMenu.menu._getMenuItems()[0]._updateUser();
}
function enable() {
imports.mainloop.timeout_add(9000, function() { _enable(); });
}
function _enable() {
let statusMenu = Main.panel._statusArea.userMenu;
statusMenu.menu.removeAll();
createSubMenu.call(statusMenu);
reset(statusMenu);
}
function disable() {
// not guarranteed to work, if more extensions operate in the same place
let statusMenu = Main.panel._statusArea.userMenu;
statusMenu.menu.removeAll();
statusMenu._createSubMenu();
reset(statusMenu);
}
function _onAdvancedSettingsActivate() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().lookup_app('gnome-tweak-tool.desktop');
app.activate();
}
keyword : advanced setting, user menu



Post a Comment