Tudo bem, correndo o risco de responder a minha própria pergunta, eu criei uma versão pykt de pvol do link na pergunta acima. Se nada mais, talvez alguém possa melhorar meu código. Eventualmente, eu pretendo me livrar das partes no script abaixo, que não são usadas ou tirar os scripts bash da equação e ter um script pyqt para lidar com todos os eventos de botão. No momento, o OSD atinge o tempo limite a partir do primeiro pressionamento do botão, em vez de permanecer ligado por um período fixo após o último pressionamento do botão.
Copie, cole e salve os arquivos (com os nomes em negrito), coloque-os no mesmo diretório, defina os bits executáveis e modifique as chamadas do sistema no script pyqt de acordo com onde quer que você as salve, ou coloque todos eles no diretório que está no seu caminho. Em seguida, mapeie os scripts de shell para comandos do Compiz, atalhos do Openbox ou algo semelhante, e altere o script pyqt se você não estiver usando os botões de volume do teclado multimídia.
Nota: O nome da classe Qvol era um título de trabalho, e eu não me preocupei em mudar isso. Observe também que o botão "mudo" não é manipulado - esse é apenas um protótipo para expressar uma possível avenida para atender aos recursos solicitados e não está atualmente associado a nenhum tipo de projeto hospedado ou modelo de desenvolvimento padrão. Qualquer tipo de desenvolvimento significativo derivado do código abaixo provavelmente deve pertencer ao Sourceforge, GitHub ou a um website do projeto. Dito isso, sinta-se à vontade para editar esta resposta ou sugerir um projeto existente que permita ser semelhante em função e design.
vol_step_down
#!/bin/bashpulseaudio--check#if[$?-ne0];thenif[$?-eq0];thenpactlset-sink-volume0---3dbelseamixer-c0setMasterplayback3-fiif[-z"$1" ] ; then
pqvol -s
fi
vol_step_up
#!/bin/bash
pulseaudio --check
#if [ $? -ne 0 ] ; then
if [ $? -eq 0 ] ; then
pactl set-sink-volume 0 -- +3db
else
amixer -c0 set Master playback 3+
fi
if [ -z "$1" ] ; then
pqvol -s
fi
pqvol
#!/usr/bin/env python2
# pvol -- Commandline audio volume utility
# with an optional GTK progressbar
# Copyright (C) 2009 Adrian C. <anrxc_sysphere_org>
# Modified by 2011 Reza Jelveh
# Ported to pyqt and renamed to pqvol 2013 by Adam R.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
import os.path
import optparse
import alsaaudio
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QTimer
appname = "Qvol"
#appicon = "/usr/share/icons/ubuntu-mono-light/status/24/audio-volume-high-panel.svg"
DEFAULT_STYLE = """
QProgressBar{
border: 2px solid grey;
border-radius: 5px;
background-color: transparent;
}
QProgressBar::chunk {
background-color: Gainsboro;
}
"""
class AlsaMixer():
def __init__(self, pcm=False, mute=False, arg=None):
self.mixer = alsaaudio.Mixer()
self.percent = self.mixer.getvolume()[0]
print self.percent
self.label = "dB" #% name
if arg:
self.percent = min(100, max(0, self.percent + int(arg)))
self.mixer.setvolume(self.percent)
if mute:
mutestate = self.mixer.getmute()[0]
if mutestate:
self.label = "Unmuted: "
else:
self.label = "Muted: "
self.mixer.setmute(mutestate^1)
# self.label = self.label + "%.0f%%" % self.percent
class Qvol(QtGui.QWidget):
def __init__(self):
super(Qvol, self).__init__()
# self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setWindowFlags(QtCore.Qt.Popup)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setWindowTitle("Qvol")
self.initUI()
def initUI(self):
self.pbar = QtGui.QProgressBar(self)
self.pbar.setGeometry(5, 5, 20, 470)
self.pbar.setOrientation(QtCore.Qt.Vertical)
self.pbar.setRange(0,100)
volume = AlsaMixer()
self.pbar.setValue(volume.percent)
self.pbar.setTextVisible(False)
self.setStyleSheet(DEFAULT_STYLE)
self.setGeometry(1260, 180, 30, 480)
self.setWindowTitle('QtGui.QProgressBar')
self.show()
QTimer.singleShot(2000, finished)
def keyPressEvent(self, event):
if event.key()==QtCore.Qt.Key_VolumeMute:
# QtGui.QWidget.paintEvent()
finished()
elif event.key()==QtCore.Qt.Key_VolumeDown:
launch_process ("vol_step_down silent")
volume=AlsaMixer()
self.pbar.setValue(volume.percent)
# finished()
elif event.key()==QtCore.Qt.Key_VolumeUp:
launch_process ("vol_step_up silent")
volume=AlsaMixer()
self.pbar.setValue(volume.percent)
# finished()
# else:
# QtGui.QWidget.keyPressEvent(self, event)
processes = set([])
def launch_process(process):
# Do something asynchronously
proc = QtCore.QProcess()
processes.add(proc)
proc.start(process)
proc.waitForFinished(-1)
def finished():
print "The process is done!"
# Quit the app
QtCore.QCoreApplication.instance().quit()
def main():
app = QtGui.QApplication(sys.argv)
ex = Qvol()
sys.exit(app.exec_())
if __name__ == '__main__':
main()