]> code.delx.au - mediapc-tools/blobdiff - mediawrap
fix-gnome-volume
[mediapc-tools] / mediawrap
index 3b516cc7e5df1224d42442d9b81ba6d963424972..42aab9a5149e3634cb383eac17a2b0e1b357f363 100755 (executable)
--- a/mediawrap
+++ b/mediawrap
@@ -1,43 +1,44 @@
 #!/bin/bash
 
-PIDFILE="$HOME/.mediawrap.pid"
+LOCKFILE="$HOME/.mediawrap.lock"
 PULSESTATE="$HOME/.pulseaudio.state"
-KEYPATH="/apps/gnome_settings_daemon/keybindings"
-
-# Wait for any other wrapped software to finish
-for i in $(seq 6); do
-       if [ ! -r "$PIDFILE" ]; then
-               break
-       fi
-       if [ "$(ps -o cmd= -p "$(cat "$PIDFILE")" | wc -l)" -eq 0 ]; then
-               break
-       fi
-       sleep 0.5
-done
-if [ -r "$PIDFILE" ]; then
-       exit 1
-fi
-echo $$ > "$PIDFILE"
-
-# Disable volume keys
-if [ "$1" = "--disable-volume-keys" ]; then
-       disable_volume_keys=1
-       shift
-       gconftool --set --type string "$KEYPATH/volume_up" ''
-       gconftool --set --type string "$KEYPATH/volume_down" ''
-       gconftool --set --type string "$KEYPATH/volume_mute" ''
+
+(
+if ! flock -w 10 -x 200; then
+    echo "Failed to get a lock!"
+    exit 1
 fi
+echo "got lock"
 
 # Unmute everything and turn volume to full
 if [ "$1" = "--max-volume" ]; then
-       max_volume=1
-       shift
-       pacmd 'dump' | grep 'set-sink' > "$PULSESTATE"
-       cat "$PULSESTATE" | grep 'set-sink-mute' | awk '{print $2;}' | \
-               while read device; do
-                       pacmd "set-sink-volume $device 0x10000" > /dev/null
-                       pacmd "set-sink-mute $device no" > /dev/null
-               done
+    echo "max volume"
+    max_volume=1
+    shift
+    pacmd 'dump' | grep 'set-sink' > "$PULSESTATE"
+    cat "$PULSESTATE" | grep 'set-sink-mute' | awk '{print $2;}' | \
+        while read device; do
+            pacmd "set-sink-volume $device 0x10000" > /dev/null
+            pacmd "set-sink-mute $device no" > /dev/null
+        done
+fi
+
+# Switch volume keys to F8/F9/F10 with xmodmap
+if [ "$1" = "--pause-gnome-volume" ]; then
+    echo "disable gnome volume"
+    pause_gnome_volume=1
+    shift
+    gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute ''
+    gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down ''
+    gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up ''
+fi
+
+# Stop XFCE4 volume control
+if [ "$1" = "--pause-xfce4-volumed" ]; then
+    echo "killall xfce4-volumed-pulse"
+    pause_xfce4_volumed=1
+    shift
+    killall xfce4-volumed-pulse
 fi
 
 # Run the program
@@ -46,16 +47,23 @@ fi
 
 # Restore volume levels and mute status
 if [ -n "$max_volume" ]; then
-       cat "$PULSESTATE" | pacmd > /dev/null
+    cat "$PULSESTATE" | pacmd > /dev/null
+fi
+
+# Restore volume keys
+if [ -n "$pause_gnome_volume" ]; then
+    gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute 'XF86AudioMute'
+    gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down 'XF86AudioLowerVolume'
+    gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up 'XF86AudioRaiseVolume'
 fi
 
-# Enable volume keys
-if [ -n "$disable_volume_keys" ]; then
-       gconftool --set --type string "$KEYPATH/volume_up" 'XF86AudioRaiseVolume'
-       gconftool --set --type string "$KEYPATH/volume_down" 'XF86AudioLowerVolume'
-       gconftool --set --type string "$KEYPATH/volume_mute" 'XF86AudioMute'
+# Restore volume keys
+if [ -n "$pause_xfce4_volumed" ]; then
+    xfce4-volumed-pulse
 fi
 
+) 200>"$LOCKFILE"
+
 # Cleanup so other programs can start
-rm -f "$PIDFILE"
+rm -f "$LOCKFILE"