diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2015-07-10 05:44:34 +0200 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2015-07-10 05:44:34 +0200 |
commit | 0a625750329371fb4ee12c05c6a772452a2f906b (patch) | |
tree | 8a35b8e14cf84975fc27a219423a7713a0d88807 /bin/mixer-wrapper.py | |
parent | f91b64f847383c7aa1878d5d92e9ec63b7b2efb5 (diff) | |
download | dzen2-config-master.tar.gz dzen2-config-master.tar.xz dzen2-config-master.zip |
We want a long running amixer, becuase the volume of the left and right
channel differ after multiple changes in short time. But on pulseaudio
restart we also have to restart amixer or no volume change could be
performed anymore.
Diffstat (limited to '')
-rwxr-xr-x | bin/mixer-wrapper.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/bin/mixer-wrapper.py b/bin/mixer-wrapper.py new file mode 100755 index 0000000..1424f36 --- /dev/null +++ b/bin/mixer-wrapper.py @@ -0,0 +1,40 @@ +#!/usr/bin/python2 + +import os +import select +import sys +import subprocess +import termios +import pty +from itertools import chain + +def main(cmd=None): + (pipe_in, pipe_out) = pty.openpty() + pipe = os.fdopen(pipe_in) + + mixer = subprocess.Popen(sys.argv[1], stdin=subprocess.PIPE, + stdout=pipe_out, stderr=subprocess.STDOUT, + shell=True, bufsize=0, close_fds=True) + + input = iter(sys.stdin.readline, '') + if cmd is not None: + input = chain([cmd], input) + + for line in input: + mixer.stdin.write(b"%s\n" % line) + mixer.stdin.flush() + + termios.tcflush(pipe_in, termios.TCIFLUSH) + fds = select.select([pipe_in], [], [], 0.2)[0] + if len(fds) <= 0: + mixer.stdin.close() + mixer.wait() + if cmd is None or line != cmd: + return line + return None + + +if __name__ == '__main__': + cmd = None + while True: + cmd = main(cmd) |