40

I'm running a pretty-much brand-new Ubuntu 17.10 installation on a Thinkpad T470s.

Whenever I'm hitting one of the media keys (play/pause, skip, etc) on any one of my keyboards or bluetooth-headset I'm seeing this icon:

popup on media key indicating no action allowed

flash on the monitor but none of my media players react.

The keys are recognized in showkey:

~$ sudo showkey -k
press any key (program terminates 10s after last keypress)...
keycode 163 press
keycode 163 release
keycode 165 press
keycode 165 release
keycode 164 press
keycode 164 release

But they don't show up in xev.

4
  • I have a similar issue. Except that it was working before I reinstalled the new Kubuntu 17.10.1
    – insidesin
    Jan 22, 2018 at 23:43
  • Does pulseaudio in your terminal give any scary message? Does adding swh-plugins help?
    – covener
    Feb 16, 2018 at 2:26
  • This symbol means that the desktop environment recognises the media key but no application registered itself as a media command user. Which media player(s) do/did you have running (at the time)? You can also take a look at the keyboard shortcut mappings of GNOME in gnome-control-center keyboard shortcuts. Feb 21, 2018 at 14:06
  • I wanted to control kodi with a mx3 air mouse. In gnome-control-center I disbaled the media keys for play/play pause/next/previous and now I can use them in kodi. But the fast foward and fast backward do not work, here the icon above comes and I cannot see where I can disable them in the gnome-control-center.
    – user372194
    Apr 26, 2018 at 6:51

8 Answers 8

40

This whole issue looks like an "it's not a bug, it's a FEATURE" present from Gnome.

In short: when you press a media button it generates a keycode which is then translated into a command. Let's say you press a Play/Pause button. It generates a keycode 162 and a command XF86AudioPlay.

Now almost every media application that may be waiting for this event (be it VLC, totem, kodi, spotify etc.) expect to receive pure XF86AudioPlay command. And what Gnome does? It intercepts this command and translate it into it's own command "play". Because of this neither xev nor xbindkeys show this event properly - they never receive a command they can understand.

When you press a media button Gnome receives the command and checks if there is any app that its recognized as capable of receiving this command. If there is (let's say totem, rhytmbox, maybe VLC) it sends "play" that should work. If there is no app recognised as capable of receiving this command Gnome will show the sign that is attached to first post and won't send any command anywhere.

The solution is simple - make Gnome unable to intercept media key events. Install dconf-editor , go to org.gnome.settings-daemon.plugins.media-keys and change any button that should work from XF86SomeExample (e.g., XF86AudioPlay) to none (''). This way any app should receive key command directly.

4
  • 2
    This works great. If you disable Play/Pause in Gnome Settings-Keyboard-Media Keys, Kodi can use it. But for fast forward and fast backward, still the "not-works" symbol from above appears but I do not know what to disable. Fast FF/BW ist not mentioned in the media keys.
    – user372194
    Apr 22, 2018 at 21:04
  • This was the secret sauce I needed. This, plus a combination of playerctl and xbindkeys and now my keyboard can control all my players, not just Rhythmbox.
    – Adrian
    Dec 24, 2018 at 15:51
  • 2
    I also restarted after making these changes (logging in and out is likely enough) to make them work
    – Salami
    Jan 4, 2019 at 2:30
  • 2
    This still works for Ubuntu 18.04 and at least for me there was no need to restart or even logout
    – N1mr0d
    May 3, 2019 at 22:59
37

If the keyboard media keys do not work from your Ubuntu desktop, you can use D-Bus support to send the proper commands to Spotify. Validate the following commands from the console:

Play/Pause

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

Next

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next

Previous

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous

Enable Media Key Shortcut

To tie these to the keyboard, go to Settings > Keyboard > Shortcuts > Custom Shortcuts, then “Add” with +. Use one of the command above, then hit the key that you want to tie to the new command.

enter image description here

Source

https://fabianlee.org/2016/05/25/ubuntu-enabling-media-keys-for-spotify/

6
  • Excellent, this is exactly what I was looking for. Many thanks! Nov 3, 2018 at 16:23
  • This worked for me in Ubuntu 14.04, except I use Compiz so I had to use the CompizConfig Settings Manager "Commands" applet to assign the shortcuts. Dec 15, 2018 at 22:49
  • This works on Ubuntu 18.04, linux kernel version 4.15.0-51-generic, with Spotify version 1.1.5.153.gf614956d. Thanks!
    – Gormador
    Jun 13, 2019 at 13:23
  • This worked for me if I also did what darkdude's answer suggested.
    – totymedli
    Nov 28, 2019 at 3:43
  • 1
    You can make this work with players other than Spotify, just change spotify to vlc, rhythmbox, etc in the command.
    – totymedli
    Nov 28, 2019 at 3:44
21

For some this may be a browser-related issue for instance (Google Chrome) "holds" the media keys. Even without browser media, the keys are allocated to Chrome.

Solution:

  1. Paste chrome://flags/#hardware-media-key-handling at Chrome;
  2. Select "Disabled" for "Hardware Media Key Handling" - it's the first option;
  3. Chrome should ask to "relaunch", accept and proceed to enjoy apps!
3
  • 3
    This worked for me, without changing any other configuration and out-of-the-box. Thanks!
    – Havok
    Aug 10, 2020 at 23:12
  • 3
    I suspected that this was the issue, but didn't know how to release the "hold". Is there any way actually to automatically change the media keys handler to the latest media app that is running? because having media keys for youtube or other chrome apps is also useful.
    – Kostanos
    Sep 16, 2020 at 12:52
  • 1
    This was the case for me. For a moment, I regret changing the values in dconf editor. Good thing, I backed up the values somewhere and were able to place them back(incase 'default' don't work out). Would be better if chrome could take control only when a tab is playing something.
    – Jacobski
    Nov 7, 2021 at 23:58
10

I found that, with Ubuntu 18.04 LTS as of 2019/2/1, all I needed to do was:

  • install dconf-editor
  • navigate to org/gnome/settings-daemon/plugins/media-keys
  • for each key not working:
    • uncheck "Use default value"
    • hit apply
    • re-check "Use default value"
    • hit apply again

Media keys in question should now work immediately.

Using no value, as per darkdude recommended, didn't work for me.

2
  • When I opened dconf-editor, I found the defaults already unchecked for play/pause, previous track, and next. Checking the defaults for these three keys fixed my problem.
    – dericke
    Apr 21, 2019 at 19:11
  • 2
    I don't really understand why toggling "Use default value" worked, but It worked for me as well +1 Jun 27, 2019 at 13:48
4

combination of last two answers works for me. I have Ubuntu 18.04 the keyboard test work

~$ sudo showkey -k
press any key (program terminates 10s after last keypress)...
keycode 163 press
keycode 163 release
keycode 165 press
keycode 165 release
keycode 164 press
keycode 164 release

but when I go to Activities -> Keyboard and try to do anything with Play / Next / Previous it not work at all. When I deactivated default key association (invoke dialog for key association, press backspace and click save) and create brand new one it works, very helpful was answer from @foamboarder

now it looks like this screenshot from shortcut setup all works fine now even after wake up the computer from sleep mode

1
  • 1
    +1 because this eventually worked for me, but you should have included the commands you used in the custom keyboard shortcuts: dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause and ...Previous and ...Next
    – bitinerant
    Feb 28, 2019 at 8:38
1

TLDR: A bug fixed in Eoan (19.10) should address these issues.

There was a bug in gnome-settings-daemon that was corrected in version 3.32.1. Ubuntu 19+ uses this version or higher, so anyone running 18 or below is affected, unless they patch GSD.

Follow the steps in this comment: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/issues/45#note_444348

The diff can be obtained here: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/commit/cea632bf682760e80654df19cfef6206efca868a.diff

I patched 3.28.1 (latest in 18.04.4 LTS, as of this message) and media keys are working much better.

If you feel confident enough to patch, I would suggest it! Or upgrade to eoan.

Once running a fixed version, you shouldn't need to muck around with reassigning media keys and this will return to being a "Feature."

1
  • This is the only answer that explains why GNOME wasn't working for MPRIS players in the first place. Thanks!
    – Tom Hebb
    Dec 3, 2020 at 18:48
1

Using the above answer by Václav Rak worked for me on Ubuntu 18.04, in particular

... deactivated default key association (invoke dialog for key association, press backspace and click save) and create brand new one.

I use Rhythmbox. Here are the commands I was putting for each Custom Shorcut for Rhythmbox:

For Previous:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous

For Next:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next

For Play/Stop:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

Hope this helps someone one day

2
  • 2
    I installed playerctl and it can find and control most of the media players I use automatically.
    – Adrian
    Dec 24, 2018 at 15:53
  • 1
    rhythmbox-client --play-pause, rhythmbox-client --next, rhythmbox-client --previous
    – Ctrl-C
    Oct 30, 2019 at 12:49
0

The key-codes seem not to be mapped accordingly. You can manually map keys as described in the ubuntu documentation: https://help.ubuntu.com/stable/ubuntu-help/keyboard-shortcuts-set.html

  1. Open the Activities overview and start typing Keyboard.
  2. Click on Keyboard to open the panel.
  3. Select the Shortcuts tab.
  4. Select a category in the left pane, and the row for the desired action on the right. The current shortcut definition will change to New accelerator…
  5. Hold down the desired key combination, or press Backspace to clear.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .