From 5e8fa266d7435c89a9b78fd520fea66926723909 Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Sun, 25 Oct 2026 19:41:22 +0100 Subject: [PATCH] Control media players with playerctl from media keys and headphones Run playerctld as a dbus unit with Restart=on-failure, start it through that unit on D-Bus activation, tie mpris-proxy to it, and bind the XF86 media keys to playerctl in xmonad. --- .../user/mpris-proxy.service.d/mpris-proxy-after-mpd.conf | 2 -- .config/systemd/user/mpris-proxy.service.d/override.conf | 4 ++++ .config/systemd/user/playerctld.service.d/override.conf | 5 +++++ .config/xmonad/xmonad.hs | 5 +++++ .../services/org.mpris.MediaPlayer2.playerctld.service | 4 ++++ 5 files changed, 18 insertions(+), 2 deletions(-) delete mode 100644 .config/systemd/user/mpris-proxy.service.d/mpris-proxy-after-mpd.conf create mode 100644 .config/systemd/user/mpris-proxy.service.d/override.conf create mode 100644 .config/systemd/user/playerctld.service.d/override.conf create mode 100644 .local/share/dbus-1/services/org.mpris.MediaPlayer2.playerctld.service diff --git a/.config/systemd/user/mpris-proxy.service.d/mpris-proxy-after-mpd.conf b/.config/systemd/user/mpris-proxy.service.d/mpris-proxy-after-mpd.conf deleted file mode 100644 index 9c4335e..0000000 --- a/.config/systemd/user/mpris-proxy.service.d/mpris-proxy-after-mpd.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Unit] -After=mpd-mpris.service diff --git a/.config/systemd/user/mpris-proxy.service.d/override.conf b/.config/systemd/user/mpris-proxy.service.d/override.conf new file mode 100644 index 0000000..88c5c99 --- /dev/null +++ b/.config/systemd/user/mpris-proxy.service.d/override.conf @@ -0,0 +1,4 @@ +[Unit] +Wants=playerctld.service +After=playerctld.service mpDris2.service +PartOf=playerctld.service diff --git a/.config/systemd/user/playerctld.service.d/override.conf b/.config/systemd/user/playerctld.service.d/override.conf new file mode 100644 index 0000000..28b9120 --- /dev/null +++ b/.config/systemd/user/playerctld.service.d/override.conf @@ -0,0 +1,5 @@ +[Service] +Type=dbus +ExecStart= +ExecStart=/usr/bin/playerctld +Restart=on-failure diff --git a/.config/xmonad/xmonad.hs b/.config/xmonad/xmonad.hs index df48f03..f725a6b 100644 --- a/.config/xmonad/xmonad.hs +++ b/.config/xmonad/xmonad.hs @@ -137,6 +137,11 @@ myConfig = `additionalKeys` [ ((0, xF86XK_AudioMute), spawn "pactl set-sink-mute $(pactl get-default-sink) toggle"), ((0, xF86XK_AudioLowerVolume), spawn "pactl set-sink-volume $(pactl get-default-sink) -10%"), ((0, xF86XK_AudioRaiseVolume), spawn "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 10%+"), + ((0, xF86XK_AudioPlay), spawn "playerctl play-pause"), + ((0, xF86XK_AudioPause), spawn "playerctl pause"), + ((0, xF86XK_AudioStop), spawn "playerctl stop"), + ((0, xF86XK_AudioNext), spawn "playerctl next"), + ((0, xF86XK_AudioPrev), spawn "playerctl previous"), ((0, xF86XK_Calculator), spawn "qalculate-gtk"), ((0, xF86XK_HomePage), spawn myBrowser), ((0, xF86XK_Mail), namedScratchpadAction myScratchpads "Mail"), diff --git a/.local/share/dbus-1/services/org.mpris.MediaPlayer2.playerctld.service b/.local/share/dbus-1/services/org.mpris.MediaPlayer2.playerctld.service new file mode 100644 index 0000000..e843801 --- /dev/null +++ b/.local/share/dbus-1/services/org.mpris.MediaPlayer2.playerctld.service @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=org.mpris.MediaPlayer2.playerctld +Exec=/usr/bin/playerctld +SystemdService=playerctld.service