Commit 24f2167c05001ccb990532f6ba47b04c66b14538 Parent: d5f3ad7666c6bcb1db84d651bbcf7429ec798677 Author: mcol <mcol@posteo.net> Date: 2020-01-10 22:07:27 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-01-10 22:07:27 +0000 add alsa volume level Notify plugin
amixer/amixer.py Added
@@ -0,0 +1,67 @@ +""" +Qtile plugin to control an ALSA device volume level. + +Example usage: + + import qtools.amixer + vol = qtools.amixer.Volume() + keys.extend([EzKey(k, v) for k, v in { + '<XF86AudioMute>': vol.lazy_mute, + '<XF86AudioRaiseVolume>': vol.lazy_increase, + '<XF86AudioLowerVolume>': vol.lazy_decrease, + }.items()]) + +""" + + +import subprocess + +from libqtile.log_utils import logger +from qtools import Notifier + + +class Volume(Notifier): + defaults = [ + ('mixer', 'Master', 'ALSA mixer to control.'), + ('interval', 5, 'Percentage interval to change volume by.'), + ] + def __init__(self, **config): + Notifier.__init__(self, **config) + self.add_defaults(Volume.defaults) + + def increase(self, qtile=None): + volume = self._run(f'{self.interval}%+') + self.show(self.interval * round(volume/self.interval)) + + def decrease(self, qtile=None): + volume = self._run(f'{self.interval}%-') + self.show(self.interval * round(volume/self.interval)) + + def toggle(self, qtile=None): + volume = self._run('toggle') + self.show(self.interval * round(volume/self.interval)) + + def mute(self, qtile=None): + self._run('mute') + self.show('Muted') + + def unmute(self, qtile=None): + volume = self._run('unmute') + self.show(volume) + + def _run(self, setting): + try: + output = subprocess.run( + ['amixer', 'set', self.mixer, setting], + stdout=subprocess.PIPE, + ) + stdout = output.stdout.splitlines() + except subprocess.CalledProcessError as err: + logger.error(err.output.decode()) + return + + if len(stdout) == 5: + volume = int(stdout[4].decode().split()[3][1:-2]) + elif len(stdout) == 6: + volume = int(stdout[5].decode().split()[4][1:-2]) + return volume
amixer/__init__.py Added
@@ -0,0 +1 @@
+from .amixer import Volume