Brandon Invergo

My Gnome-Shell Workflow After 6 Months

I’ve been a happy user of Gnome 3 since it was first released, first via the (at the time) very unstable Ubuntu PPA and after a short while, on an Arch Linux install built from the ground up to run it. The internet is awash with ridiculous arguments about whether or not Gnome 3 and, in particular, Gnome- Shell are good. Personally I couldn’t care less about these arguments and I don’t wish to recapitulate them here. My Gnome 2 usage was already approaching this new workflow well before Gnome 3 was released. I had only a top panel that I barely used (auto-hidden, actually), an empty desktop, and I launched everything via Gnome Do. So adjusting to Gnome-Shell was pretty easy for me. Nonetheless, I’ve made some tweaks over time and I figured I’d share them, especially now that most of the major distros come with it installed or available in the repositories, many new users are likely to give it a try. For those who are open to giving it a chance, hopefully some of these tweaks and tips will make the experience even smoother for them. Some tips are old hat, while I haven’t seen some other ones mentioned anywhere.

INSTALL GNOME-TWEAK-TOOL

This is a must-do, of course, and it should be available in your distro’s repositories. It makes handling some advanced or "hidden" settings of Gnome- Shell a bit easier. You can use it to set default system fonts, change themes, manage extensions, etc. I would also recommend familiarizing yourself with the dconf-editor, which provides access to even more settings (though in a less user-friendly manner). You can launch it by hitting Alt-F2 and typing in "dconf-editor".

As for me, I actually don’t change much. For my fonts, I use Cantarell as my default, Sans for documents, Monospace for, well, monospace, and Sans for window titles, all at size 9 (1024x768 resolution…I’d have them a bit bigger on a bigger screen). Hinting is at medium and I use Rgba antialiasing. I set it to show the date in the clock, for its obvious usefulness. Everything else is set to the default. Most notably, I chose to stick with the default of windows only having a close button (sans minimize and maximize buttons). For maximizing, I just use the keyboard (Alt-F10) or the snap feature (drag the titlebar to the top of the screen). I don’t minimize. In my mind, if a window needs to be minimized, than it’s on the wrong workspace.

USE EXTENSIONS

Everyone seems to complain that Gnome-Shell lacks customizability, which I find to be an utterly ridiculous claim, considering that basically the whole of it is open to extensions for modifying it to your liking. It baffles me how the community could complain about this, but then turn around and be ecstatic over window managers like Awesome or dwm, which have only the barest functionality until you start extending or patching them. Anyway, at this point there are many extensions available and they are more or less easy to manage with gnome-tweak- tool, though to be honest extension management is an area that Gnome could improve. If you want an always-visible dock or a traditional Gnome menu, they’re just an extension away. As for me and my workflow, though, I only use a few extensions:

  • no-a11y: Gnome’s efforts to make their desktop accessible are admirable, but I think the majority of people don’t need the accessibility options, so that icon in the panel is just taking up space. I use this extension to hide it.

  • system-monitor-applet: I generally buy into the idea that the panel notification area of Gnome 2 or any other Windows 95 clone quickly becomes an obnoxious, distracting mess, so I’m glad that Gnome 3 has reduced it to just the necessities. That said, I’m running a 5 year old laptop and I often do computationally intensive tasks, so for me, having a CPU meter visible at all times is necessary. Using the plugin’s customizability, I’ve made sure that it’s grayscale like the rest of the panel, setting the "User" process color to #CCCCCC, the "System" process color to #474747 and the "Other" process color to #262626, with a transparent background. I turned the text off and the graph width is 25. I only use the CPU meter, though of course the RAM meter is handy too. A quick left-click on the graph brings up a lot more useful information.

  • alternative-status-menu: One of the contentious changes in Gnome-Shell is, of course, the option to power off being hidden unless you hold the Alt key, with only the option to suspend being otherwise shown. I use a laptop, so to suspend the system, I simply close the lid. I use this extension to make "Power Off" a permanent option.

  • window-navigator: I like to use the keyboard and avoid the mouse as much as possible (as discussed next). The Activities overlay is only partially keyboard navigable, only in the "Applications" area. This extension allows you to use the keyboard to navigate the "Windows" area: hold Alt to see a number over each of your open windows and press a number to bring that window into focus. Similarly, hold Ctrl and hit a number to select a workspace.

USE YOUR KEYBOARD

A big complaint for some is that Gnome-Shell makes your mouse travel too far to get anything done. That may be the case, but the better solution is to just use your keyboard for as much as possible. It, without a doubt, requires less movement than any mouse-based interaction, even in Gnome 2, allowing you to do things the moment they come to mind. So, break the habit of typing and then reaching for your mouse and just keep your hands on that home row. In particular:

  • Launching applications: as you probably know by now, hitting the Mod/Windows key opens the Activities overlay, where you can immediately start typing to find the application you want. A little-talked about feature of the latest Gnome- Shell release (3.2.1) is that it now sorts the search results by frequency of use, which is great. To launch Firefox, I simply hit Mod, then "F", and then Enter. This is also a nice way to easily find contacts or settings, of course.

  • Switching windows: Alt-Tab is, of course, an old, familiar key combination. It changed a bit in Gnome 3 to only switch between applications, so if you have five windows of one application open, they will appear as one item in the application switcher. It takes a bit to get used to it, but you can press Alt-` (or whatever key is above Tab on your keyboard) to switch between open windows of an application. Also, from the Alt-Tab application switcher, you can navigate with the arrow keys: left and right to switch between applications and down and up to move into and out of an application’s window list. Once you get used to this difference (I admit I still trip up on it sometimes), it’s actually really nice; it just takes a bit of muscle memory training. This one will come into play later in the article.

  • Launching applications by shortcut: By default, if you try to launch an application in Gnome-Shell when an instance is already running, the view will switch to that instance, rather than launching a new one. I find that, in most cases, this isn’t a problem as I almost always only have one instance of a program running. There are, of course, a couple notable exceptions for me: the terminal and the file manager. For these, I set up keyboard shortcuts to launch them. You can do this in System Settings -> Keyboard -> Shortcuts. You can set many shortcuts here. In the launchers section, I set "Home folder" to have a shortcut of Ctrl-Alt-N ("N" for "Nautilus") and "Launch terminal" to have a shortcut of Ctrl-Alt-T. Now when I hit these key combos, a new instance of the terminal or the file manager are launched no matter how many other instances are running. If you need a special launcher (i.e. I could imagine wanting one for a text editor), you can do so under "Custom Shortcuts". Note: I have had some problems doing these settings before, so I’ve had to set them the hard way in dconf-editor (in org.gnome.settings-daemon.plugins.media-keys)

  • Vim-like bindings for switching workspaces: This is a personal preference: I like the Vim keybindings since they allow me to keep my fingers on the home row. So, in the aforementioned keyboard shortcut settings, under "Navigation", I changed "Move to workspace above" to be Ctrl-Alt-B and "Move to workspace below" to Ctrl-Alt-F to be like Vim’s page up and page down shortcuts. Similarly, I set "Move window one workspace up" to Shift-Ctrl-Alt-B and "Move window one workspace down" to Shift-Ctrl-Alt-F. I use these shortcuts very frequently, so that I essentially never use the workspace picker in the Activities overview.

  • Vim-like bindings for the browser: Continuing from the last one, I tried to make my keybindings consistent throughout my usual tasks. So, for browsing, I use Uzbl (more on that below), which I set to use basic Vim movement keys (jkhl, Ctrl-F / Ctrl-B, etc.). You can also use Pentadactyl for Firefox, though I haven’t tried this yet.

  • Make Caps Lock an extra Ctrl key: Ok, this isn’t Gnome-specific but it’s a huge help. I use keyboard shortcuts all the time and I never type in all caps, so it makes no sense that the key conveniently next to my finger is useless, while one of the most useful keys is out of the way in the corner. So, under Settings -> Region and Language -> Layouts -> Options…, I make Caps Lock an extra Ctrl key (under "Ctrl Key Position"). If you do use Caps Lock from time to time, you can also just swap the two keys. This is another thing that takes a bit of time to get used to but once you do, you can never go back.

INSTALL ALACARTE

This is a small tip but it’s something that tripped me up at first. Unfortunately, not all software is built to install nicely under Gnome, so you have to add them yourself to the Activities "Applications" area. Gnome doesn’t have a built-in way to do this, but the application Alacarte makes editing the available applications simple.

USE THE DARK ADWAITA THEME

I prefer dark themes and the dark Adwaita theme that became available with 3.2 is really nice, though I can’t understand why it would only be used for some applications (picture viewer, movie player). I set it to instead be the default theme for all applications that support it, which means for all GTK 3 applications. To do this, I have the file ~/.config/gtk-3.0/settings.ini containing:

[Settings]
gtk-theme-name = Adwaita
gtk-fallback-icon-theme = gnome
# next option is applicable only if selected theme supports it
gtk-application-prefer-dark-theme = true
# set font name and dimension
gtk-font-name = Sans 10

"gtk-application-prefer-dark-theme" is of course the setting of interest. Now, applications which are not yet using GTK 3 will stand out if you’re using the default, light GTK 2 theme, which is annoying, but I like the dark theme too much in general to go back (and I’ve been too lazy to do anything about that GTK 2 theme problem).

CHANGE YOUR BROWSING HABITS

This one won’t be for everyone and bears some explanation. A problem with the old taskbar-oriented method of window management was that, as more windows were opened, the taskbar became a cluttered mess. This was especially a problem before tabbed web browsers came out, so that every webpage that you opened led to another item in the task bar. This problem was cleared up by the aforementioned tabbed browsers, as well as window grouping in the task bar. In the former case, though, the problem was just shifted. Instead of a cluttered taskbar, we ended up with cluttered tab bars. With enough tabs open in Firefox, you have nothing left to go by but the favicon and a one or two characters to figure out which tab contains what. In other browsers like Gnome’s Epiphany, the tabs don’t shrink but instead enter out view and you must scroll the tab bar to find what you want.

So now we’re using Gnome-Shell, which completely does away with the task bar, but then we spend most of our time in a browser, which shoves something equivalent back into our lives. I realized that if I just stop using tabs and open everything in a new browser window, I can then use some of the niceties of Gnome-Shell to better manage my browsing sessions. Heresy, I know! But think about it. If you use one workspace for browsing, and you open all new pages in a new browser, you can get a much better overview from Gnome-Shell of what pages you have open than what’s offered by a tab bar. For a quick glance, you can hit the Mod/Windows key to see a small representation as well as the full title of every site you have open. With the window-navigator extension, you can quickly select one by number or you can just click by mouse. If you’re not sure, you can use the mouse wheel to zoom in on one of the windows. And for quick scrolling through your open sites, start pracitcing with Alt-` to switch between all the open browser windows. Once again, you get a small preview and you can see the full page title.

web overview

Now, without using tabs, you can get rid of the tab bar entirely, which takes up valuable vertical screen real estate. While the latest versions of Firefox remedy that problem a bit, the tabbed browsing concept is so deeply integrated into Firefox that I found it to be distracting. Epiphany is a good possibility, because you can easily hide not only the tabs, but you can also go all out and hide the toolbar and the menubar (only in version 3.2 for the menubar), leaving nothing between you and your web content but the Shell panel and the window title bar (hit Ctrl-L to temporarily open up the toolbar to type in an address). Unfortunately, Epiphany isn’t very keyboard-friendly, in my opinion.

In the end, I went with Uzbl, which is incredibly customizable and keyboard-friendly, albeit a bit less friendly to get set up. It lacks any widgets (buttons, menus, etc.) with the exception of a tiny, Vim-like status bar at the bottom. I can open a new browser window just by tapping the ‘w’ key, or I can open links in new windows by middle-clicking or by bringing up visual link tips by hitting ‘Fl’ and then typing the number of the link I want to follow. Best of all, it doesn’t even support tabs! The view of the developer, and correctly so, in my opinion, is that it should be up to the window manager to manage your open sites. Recapitulating window management in a browser is just wasteful and frustrating.

Unfortunately, out-of-the-box, Uzbl didn’t play nicely on my system with Gnome- Shell’s window management. I couldn’t do the Alt-[button-above-Tab] window switching since Gnome- Shell counted each Uzbl window as a separate application. In order to get it working properly, I had to create its "Applications" entry manually (not with Alacarte) by creating the file /usr/share/applications/uzbl-core.desktop, which contains:

[Desktop Entry]
Exec=uzbl-browser -g 'maximized'
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/usr/share/uzbl/examples/data/uzbl.png
Name[en_US]=Uzbl-core
Name=Uzbl-core
Icon=/usr/share/uzbl/examples/data/uzbl.png
Categories=Network;GTK;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true

You can see that I start the browser maximized, since that’s how I like to browse. Also important is that the Name field is the same as the name of the .desktop file (Uzbl-core), which is the the name of the Uzbl process as recognized by Gnome-Shell. You’ll notice that it’s not named "Uzbl-browser" like the executable command implies. This is because "uzbl-browser" is actually a long shell script that sets up and runs a configured "uzbl-core" instance. The MimeType section is important for letting Gnome know that this is a browser, allowing me to set it as my default for opening web pages, for example. Finally, the StartupNotify field is what Gnome-Shell uses to treat all open windows as one application.

Unfortunately, I still have to use Firefox sometimes for two reasons. One is that I’ve compiled Uzbl to use GTK 3, while Adobe Flash still depends on GTK 2. I find Gnash and Lightspark’s performance to be a bit underwhelming and I haven’t had success using nspluginwrapper to be able to use the GTK 2 plugin in GTK 3. The other reason is that not all Gnome programs play nicely with Uzbl. For example, if I set Uzbl as my default browser, I cannot open links from Evolution or Gwibber. In Liferea, on the other hand, I can manually specify the command to open links: uzbl-browser %s -g ‘maximized’. Also, Uzbl only uses the X clipboard (ie like when you highlight text with the mouse and then middle- click to paste), which can be a bit annoying to work with, but I’m 99% sure I can write a quick Python/GTK script to get around that and use the Gnome clipboard. I’ve just been lazy. Anyway, all that aside, I still use Uzbl for my heavy browisng sessions because it’s just so nice browsing this tabless way. Firfox only comes out when it absolutely has to.

CONCLUSIONS

Hopefully you’ve found this to be helpful and you’ve been able to find one or two things in my workflow that you can integrate into your own. For most tasks I’ve found myself to be quite pleased with how I work in Gnome-Shell and I tend to be very efficient. Nonetheless, nothing’s perfect. For my part, I think Gnome-Shell could still use some more keyboard configurability, particularly with window management. I do like that you can snap windows to the sides of the screen, but I wish there were a way to do it with the keyboard and not just with the mouse (you can use a shortcut to maximize vertically or horizontally, but the window doesn’t move). And actually, I think being able to snap to a 4x4 grid would be even greater, allowing, for example, two terminals stacked vertically. For most of my typical day-to-day stuff, this doesn’t get in the way. However, when I’m programming I tend to have more windows open on a single workspace, so having some keyboard window management would be great. Luckily, Gnome-Shell keeps improving with each release, so hopefully we can look forward to such features in the near future.

Creative Commons License
My Gnome-Shell Workflow After 6 Months by Brandon Invergo is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.