28

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
    Did anyone here managed to make this work in Ubuntu 12.10 without using ccsm ? thanks – Suhaib Feb 7 '13 at 5:12
33

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.

| improve this answer | |
  • 1
    This is absolutely the best answer on the page. – dotancohen Jan 6 '16 at 8:03
  • Confirmed working on Unity 14.04. The fact that alt+space activates a pull-down menu helps especially for infrequently-used features. – Frank M May 20 '16 at 14:40
  • This should be the selected answer. Thank you! – Nam G VU Jul 21 '16 at 6:14
  • 1
    This was posted 2 years after the question, but now represents the best answer, so I am changing the accepted answer. – Ian Hincks Jul 17 '17 at 17:18
  • 4
    not working on 18.04, the T doesn't select the 'Always On Top' function anymore. – rvbarreto Oct 15 '19 at 16:56
15

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.

| improve this answer | |
  • @Suhaib That part is already in the answer. :) – Kasisnu May 4 '15 at 10:16
  • lol, sorry. Dont know how I missed it xD – Suhaib May 4 '15 at 15:07
7

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.

| improve this answer | |
  • Actually, restarting compiz is only needed so that it is aware of the new plugins. Afterwards, you can change the shortcuts on the fly (i.e. you do not need to restart Compiz after every change of a shortcut) – sup Jan 16 '13 at 11:45
  • Thank you for the info @sup. I just explained it using the given post. Actually I did not tried it myself. – heartsmagic Jan 17 '13 at 18:59
  • Well, I reworded it to make it even clearer:-). – sup Jan 19 '13 at 13:27
2

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 :-)

| improve this answer | |
  • it didn't work :-( – Suhaib Nov 18 '12 at 18:15
  • Yes, it does not work for 12.10 either. – sup Jan 16 '13 at 11:39
  • It should be dconf-editor in 14.04... but it doesn't work either. – Ed Villegas May 1 '14 at 18:23
0

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".

Set it and that's it :)

| improve this answer | |
0

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.

| improve this answer | |
  • This looks like a question and not really an answer. Anyway, on my Ubuntu 19.10 your command works. Probably, as you wrote yourself, something is slightly broken in your system. Next time I suggest to invest your time into finding the root cause, instead of elaborating clumsy solutions. – user1182474 Apr 12 at 10:18
  • @user1182474 I did invest time into finding a root cause, but came up with nothing. Aside from looking into the actual code for wmctrl myself, I don't see what else I could have done to fix it directly. And while long, I think my command cleanly automates using the add/remove 'above' (separate commands) approach workaround that was mentioned on other posts. don't understand your issue with it? – Geoff Davids Apr 25 at 18:37

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.