OK, vou postar uma solução que encontrei, mas talvez outra pessoa tenha uma melhor. Após uma resposta apresentada aqui , posso ver todas as teclas pressionadas executando
xinput test <keyboad_id>
em um terminal. É então apenas um caso simples de enviar a saída desse comando para um programa que procura strings como "key release 24" (a saída quando 'q' é liberado no meu teclado) e que fará o que você quiser quando fizer isso. corresponde a essa string.
Por exemplo, podemos apertar a tecla 'q' e fazer um som como este:
xinput test <keyboard_id> | while read in ; do
[[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav
done
Podemos, obviamente, observar outras entradas também e executar outra coisa, se desejar.