From 420ceb49b53a8fa9d8ba8443e42e50cd7bd7cea9 Mon Sep 17 00:00:00 2001 From: Philip Wittamore Date: Sun, 12 Jul 2026 11:08:50 +0200 Subject: update --- .../2025/DWM-Dunst-and-Thinkpad-audio-keys.html | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100755 articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html (limited to 'articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html') diff --git a/articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html b/articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html new file mode 100755 index 0000000..ee184b8 --- /dev/null +++ b/articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html @@ -0,0 +1,113 @@ + + + + + + + DWM Dunst and Thinkpad audio keys + + +
+

Bloggings

+ Back + +
+ +
+
+

DWM Dunst and Thinkpad audio keys

+

2025-04-24

+

How I got them working, microphone mute led included

+

DWM isn't a desktop environment, so there are a few things to add, like notifications and +audio keys.

+

I installed dunst and acpid. Dunst is managed by systemd, if you edit ~/.config/dunst/dunstrc +restart dunst with systemctl --user restart dunst.service

+

Dunst web page

+

Acpid Arch page

+ + +

dwm/config.h

+

The audio keys are registered in dwm/config.h +

+...
+{ 0, XF86XK_AudioMicMute, spawn, SHCMD("~/.local/bin/dwm-audio mictoggle") },
+{ 0, XF86XK_AudioMute, spawn, SHCMD("~/.local/bin/dwm-audio voltoggle") },
+{ 0, XF86XK_AudioLowerVolume, spawn, SHCMD("~/.local/bin/dwm-audio volquieter") },
+{ 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("~/.local/bin/dwm-audio vollouder") },
+...
+
+ +

~/.local/bin/dwm-audio

+

The audio keys run a bash script which sets volume, speaker mute, and microphone mute.

+
+#!/bin/bash
+# Manage Thinkpad Audio keys
+
+msgTag="Audio"
+
+# Microphone
+if [[ "$@" == "mictoggle" ]]; then
+    pamixer --default-source -t
+    micmute="$(pamixer --default-source --get-mute)"
+    if [[ "$micmute" == "true" ]]; then
+        # Mic muted notification
+        dunstify -t 1000 -a "Microphone" -u low -i audio-input-microphone \
+        -h string:x-dunst-stack-tag:$msgTag "Microphone muted"
+    else
+        # Mic unmuted notification
+        dunstify -t 1000 -a "Microphone" -u low -i audio-input-microphone \
+        -h string:x-dunst-stack-tag:$msgTag "Microphone unmuted"
+    fi
+    exit 0
+fi
+
+# Speakers
+if [[ "$@" == "voltoggle" ]]; then
+	pamixer --toggle-mute
+elif [[ "$@" == "vollouder" ]]; then
+	pamixer -i 10
+elif [[ "$@" == "volquieter" ]]; then
+    pamixer -d 10
+fi
+
+volume="$(pamixer --get-volume-human)"
+mute="$(pamixer --get-mute)"
+if [[ $volume == 0 || "$mute" == "true" ]]; then
+    # Sound muted notification
+    dunstify -t 1000 -a "changeVolume" -u low -i audio-speakers \
+    -h string:x-dunst-stack-tag:$msgTag "Volume muted" 
+else
+    # Volume notification
+    dunstify -t 1000 -a "changeVolume" -u low -i audio-speakers \
+    -h string:x-dunst-stack-tag:$msgTag -h int:value:"$volume" "Volume: ${volume}"
+fi
+
+ +

Microphone mute led

+

I'm running Arch Linux on a Thinkpad X220, so I need to make the mic/mute button's led +lights up when muted. This can't be done with normal user permissions, so I installed acpid. +On Arch linux all acpi events are passed to /etc/acpi/handler.sh, so I added another +function to this file. +

+
+...
+button/micmute)
+  if [[ "$(cat /sys/devices/platform/thinkpad_acpi/leds/platform\:\:micmute/brightness)" == "1" ]]; then
+    echo "0" > /sys/devices/platform/thinkpad_acpi/leds/platform\:\:micmute/brightness
+  else
+    echo "1" > /sys/devices/platform/thinkpad_acpi/leds/platform\:\:micmute/brightness
+  fi
+;;
+...
+
+ +
+
+ + + -- cgit v1.3.1