How to set a shortcut for "Always on Top" for window?

In 12.04 (Unity), I would like to assign a shortcut to the "always on top option" for a window. Probably something like Ctrl+Shift+Home to turn on and Ctrl+Shift+End to turn off, or whatever. Is there an option to do this somewhere in the Compiz Settings Manager?

This (old) post claimed that

For compiz, Enable Extra WM Actions. Check the properties, and insert ALT+A to Key field for Toggle Always-On-Top action.

But I couldn't find that.

1

6 Answers

It should work on every Ubuntu OS since version 9.04 without installing anything, modifying of creating any shortcuts.

Try Alt + Space, T

  • Alt + Space as the first shortcut brings up the right-click mouse menu

  • T selects the "Always On Top" function.

8

Since no one has mentioned this yet, I'll just leave a solution that worked for me on Ubuntu 12.04.

You could setup a regular keyboard shortcut and use wmctrl to toggle the "Always on Top" option.

Go to System Settings > Keyboard > Shortcuts > Custom Shortcuts. Hit the + and give your shortcut a name. Then enter the following command.

wmctrl -r :ACTIVE: -b toggle,above

If you don't have it already, you can install wmctrl from the repos using

sudo apt-get install wmctrl

You should have something that looks similar to this.

Screenshot showing a custom keyboard shortcut setup screen

Hit apply and you should be good to go!

This solution came from a discussion on Ubuntu forums.

3

Unity instead of GNOME (Ubuntu before 17.04)

If not install CCSM and extra compiz plugins via:

sudo apt-get install compizconfig-settings-manager compiz-plugins-extra

Be aware please. CCSM can kill Unity3D on some systems.

If you have not had compiz-plugins-extra already installed, you need to restart Compiz to load them (even though they display in CCSM just fine before the restart) with Alt+F2 and

compiz --replace

You can see Extra WM Actions under Windows Management section on CCSM as explained in the post you found. You can set the desired action there easily.

3

I tried to use the wmctrl command toggle, but it didn't work on my Ubuntu set up. The toggle would toggle on, but not toggle off. (I think it might be because I'm using the gnome desktop environment, on which wmctrl is slightly broken AFAIK).

Anyway, after a lot of research and working out how to write proper code in bash, I created a single command that uses the wmctrl commands within a layer of logic to toggle the 'always on top' state effectively on the current GNOME desktop. I posted this answer on Ask Unix/Linux, but thought I'd post it here too in case anyone had the same issue.

Here is the command:

bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'

It checks the active window state property "_NET_WM_STATE" using xprops, and if it contains the text "ABOVE" that means the 'always on top' option is active. Then it just runs the wmctrl command with the parameter add or remove as appropriate.


Command breakdown (each command is inserted into the next, replacing the placeholder):

  • Get active window id:

     xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
  • Get the window state from xprop using the id:

     xprop -id $(■) _NET_WM_STATE
  • Check if the state contains "ABOVE", indicating that the window is set to "always on top":

     [[ $(■) =~ "ABOVE" ]]
  • Return "remove" if true, otherwise return "add":

     ■ && echo "remove" || echo "add"
  • run wmctrl command using the returned value as a parameter:

     wmctrl -r :ACTIVE: -b $(■),above
  • Send the whole thing to bash so that you can use command substitution ${ ... }, bash boolean evaluation [[ ... ]] and the regex match operator =~:

     bash -c '■'

This last step in particular took me a very long time to figure out. Until I realised that the keyboard shortcuts weren't running in bash by default, I had no idea why the commands were working in the console as I was testing them but silently failing when run directly as a keyboard shortcut. It drove me up the wall for ages!

Note: because you need quotes around the command you're sending to bash, I had to be careful when writing the command that I never went more than one more level deep (using double quotes). Any further nesting of strings in quotes would have required lots of confusing backslashes to escape the quotes.

Further detailed notes: how to create the keyboard shortcut (thanks @rajesh_chaurasiya)

  1. Install wmctrl using sudo apt-get install wmctrl if you haven't already

  2. Go to system settings > keyboard shortcuts. Click the + button to add a custom shortcut.

  3. Choose a name such as 'Toggle always on top' ( it can be anything you like ).

  4. In the command field add the full command from the top of this answer.

  5. Record a keybinding to complete the shortcut.

4

Another, better I think, solution is to add Alt+A as a shortcut to toggle the "Always on Top" property of a window. This can be done via gconf-editor. Just follow the simple instructions given in this video.

EDIT : Copied from the video

  1. if you are using 12.04 && 12.10 you have to install gconf-editor

    sudo apt-get install gconf-editor

  2. Type gconf-editor in terminal.

  3. Click on apps

  4. Go to metacity

  5. window_keybindings

  6. right click inside the right box and click on new key

  7. Choose string from the dropdown list.

  8. Add the word toggle_above

  9. Write any command you want. i.e : A and press OK

Done :-)

3

It may be too late but if anyone search for it again and come here, there is, as for me, a more simple solution:

On Ubuntu and on many other distributions using GTK (they mostly share the setting panel), you can go to Setting -> keyboard > shortcut. In the "list" of shortcut, you will find the entry unassigned to keep a windows on top. Not sure of the name in English but in French it's "Activer/Désactiver la mise au premier plan de la fenêtre".

In English, it is "Rise window above other windows".

screenshot

Set it and that's it :)

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like