Ubuntu – Keyboard shortcuts don’t work on Ubuntu 18.04 with Unity

compizkeyboardkeyboard-layoutshortcut-keysunity

I have installed Ubuntu 18.04 with Unity using the mini ISO. So I don't have GNOME installed with Unity. My problem is that keyboard shortcuts (e.g., launching Terminal or switching between keyboard layouts) don't work. Searching online, some have suggested to add sleep 2 before launching compiz in /usr/lib/systemd/user/unity7.service. This worked once but after I rebooted it didn't work anymore. Others have suggested to toggle Commands in CompizConfig Settings Manager. This works but I have to redo it every time I log out. Is there any permanent solution to this? This is really irritating.

Update:
Apparently, this is a bug according to this link.

Best Answer

Edit / tldr:

This ppa fixes this bug:

sudo add-apt-repository ppa:unity7maintainers/unity7-desktop
sudo apt-get update
reboot

The following script toggles the commands plugin automatically:

#!/bin/bash
export DISPLAY=:0
activeplugins=$(dconf read /org/compiz/profiles/unity/plugins/core/active-plugins)
found=$(echo "$activeplugins" | grep commands)
echo "$found"
if [ -z "$found" ] ; then
    activeplugins=$(echo "$activeplugins" | sed -r "s/animation', /animation', 'commands', /")
else
    activeplugins=$(echo "$activeplugins" | sed -r "s/'commands', //" | sed -r "s/, 'commands'//")
fi
echo "$activeplugins"
dconf write /org/compiz/profiles/unity/plugins/core/active-plugins "$activeplugins"

You can add this script to your startup applications to execute it automatically at login. However if you lock your screen then unlock it, your custom keyboard shortcuts won't work again.

To fix this you must listen for lock/unlock events as described here and add this script into the unlock section of that script, eg after echo "Screen unlocked"

Also note that the order of the active plugins is important: I inserted the 'commands' plugin after 'animation' which was enabled for me. If 'animation' is not enabled for you, then it must be inserted after the first active plugin when 'commands' is in its usual position.

Related Question