42 lines
1.3 KiB
Python
Executable File
42 lines
1.3 KiB
Python
Executable File
import subprocess
|
|
import sys
|
|
import os
|
|
import signal
|
|
|
|
class VolumeMonitor:
|
|
def __init__(self):
|
|
# отдаём текущую громкость при старте
|
|
self.push_update()
|
|
|
|
def get_vol(self):
|
|
# достаём цифры из pactl
|
|
try:
|
|
raw = subprocess.check_output(["pactl", "get-sink-volume", "@DEFAULT_SINK@"], stderr=subprocess.DEVNULL).decode()
|
|
if "/" in raw:
|
|
# забираем канал и чистим от процентов
|
|
return raw.split("/")[1].strip().replace("%", "")
|
|
except:
|
|
return "0"
|
|
return "0"
|
|
|
|
def push_update(self):
|
|
# отдаём данные в stdout для eww
|
|
vol = self.get_vol()
|
|
sys.stdout.write(f"{vol}\n")
|
|
sys.stdout.flush()
|
|
|
|
def run(self):
|
|
# подписываемся на события аудио-сервера
|
|
proc = subprocess.Popen(["pactl", "subscribe"], stdout=subprocess.PIPE, text=True)
|
|
|
|
try:
|
|
for line in proc.stdout:
|
|
# если изменился основной выход
|
|
if "sink" in line:
|
|
self.push_update()
|
|
except KeyboardInterrupt:
|
|
proc.terminate()
|
|
sys.exit(0)
|
|
|
|
if __name__ == "__main__":
|
|
VolumeMonitor().run() |