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.
16 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.
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,aboveIf you don't have it already, you can install wmctrl from the repos using
sudo apt-get install wmctrlYou should have something that looks similar to this.
Hit apply and you should be good to go!
This solution came from a discussion on Ubuntu forums.
3Unity 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-extraBe 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 --replaceYou 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.
3I 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
xpropusing the id:xprop -id $(■) _NET_WM_STATECheck 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
wmctrlcommand using the returned value as a parameter:wmctrl -r :ACTIVE: -b $(■),aboveSend the whole thing to
bashso 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)
Install wmctrl using
sudo apt-get install wmctrlif you haven't alreadyGo to system settings > keyboard shortcuts. Click the
+button to add a custom shortcut.Choose a name such as 'Toggle always on top' ( it can be anything you like ).
In the command field add the full command from the top of this answer.
Record a keybinding to complete the shortcut.
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
if you are using 12.04 && 12.10 you have to install gconf-editor
sudo apt-get install gconf-editorType
gconf-editorin terminal.Click on apps
Go to metacity
window_keybindings
right click inside the right box and click on
new keyChoose
stringfrom the dropdown list.Add the word
toggle_aboveWrite any command you want. i.e : A and press OK
Done :-)
3It 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".
Set it and that's it :)