Un complemento un tanto vergonzoso, pero como no parecía haber ninguna solución existente, y dado que la tarea parecía relativamente sencilla, escribí un demonio Python simple para solucionar el problema. Utiliza la API python-xlib para capturar las pulsaciones de teclas en todo el sistema y luego ejecuta comandos de shell personalizados. Asume una configuración básica de Debian / Ubuntu, pero probablemente funcionaría en la mayoría de los sistemas Linux con algunos ajustes.
En mi caso, las teclas de subir / bajar volumen se asignan al código 122/123, por lo que los comandos correspondientes para bajar o subir el volumen solo cuando el escritorio está bloqueado son:
gnome-screensaver-command -q | grep "is active" && bash -c '/usr/bin/pactl -- set-sink-volume `pacmd list-sinks | grep -P -o "(?<=\* index: )[0-9]+"` -10%'
gnome-screensaver-command -q | grep "is active" && bash -c '/usr/bin/pactl -- set-sink-volume `pacmd list-sinks | grep -P -o "(?<=\* index: )[0-9]+"` +10%'
Es cierto que eso es un poco detallado. El segundo grep es encontrar la interfaz de sonido activa en sistemas que pueden tener varios (por ejemplo, mi computadora portátil tiene una interfaz Master y Headphone, lo que permite controlar estos comandos).
Editar: Esto ya no funciona a partir de Ubuntu 16. Todas las funciones X parecen deshabilitarse, incluso desde el terminal, una vez que la pantalla se bloquea.