%
Puffy image/svg+xml Puffy 2019-06-14 Stéphane HUC OpenBSD Team Inkscape Puffy OpenBSD https://www.openbsd.org/art4.html English "Puffy", it's a symbol of OpenBSD

Gestion de l'icône de volume dans la barre de notifications sous OpenBSD

Une astuce pour gérer le volume audio sous OpenBSD

Détails relatifs à l'article

Article publié, le
et modifié le
2 minutes de lecture

Cet article contient 239 mots.

Identifiant de l'article : tag:doc.huc.fr.eu.org,2016-12-10:/fr/sys/openbsd/tip-tray-volume


Source brute de l'article :
Commit version : 9bf3d7b


Cet article est aussi disponible sur le protocole Gemini :
gemini://gmi.it-log.fr.eu.org/fr/sys/openbsd/tip-tray-volume.gmi


Description

Petit script pour avoir une icône dans la barre de notifications et régler le volume sonore. Il est destiné aux environnements minimalistes comme fluxbox, et ne dépend donc de rien en particulier sauf python et gi.

Il est tout vilain, n’hésitez pas à l’améliorer ;)

#!/usr/local/bin/python3
import os
import sys
from gi import require_version
require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

name="Volume"

def get_lvl():
    cmd = "mixerctl -n outputs.master"
    result = os.popen(cmd)
    result = result.readline().split(",")[0]
    lvl= int(int(result)/255*100)
    return lvl

def get_mute():
    cmd = "mixerctl -n outputs.master.mute"
    result = os.popen(cmd)
    result = result.readline().strip()
    return(result)

class Menu:

    def destroy(self, widget, data=None):
        Gtk.main_quit()

    def set_icon(self):
        if get_mute() == "on":
            self.tray.set_from_icon_name("stock_volume-mute")
        else:
            lvl = get_lvl()
            if lvl == 0:
                self.tray.set_from_icon_name("stock_volume-0")
            elif lvl < 20:
                self.tray.set_from_icon_name("stock_volume-min")
            elif lvl < 70:
                self.tray.set_from_icon_name("stock_volume-med")
            elif lvl > 70:
                self.tray.set_from_icon_name("stock_volume-max")



    def __init__(self):
        get_mute()
        self.tray = Gtk.StatusIcon()
        self.set_icon()
        self.tray.connect('popup-menu', self.on_right_click)
        self.tray.connect('activate', self.on_left_click)
        self.tray.connect('scroll_event', self.on_scroll)
        self.tray.set_tooltip_text('Volume : {}%'.format(get_lvl()))

    def on_scroll(self, widget, event):
        if event.direction == Gdk.ScrollDirection.DOWN:
            os.system("mixerctl outputs.master=-10")
        elif event.direction == Gdk.ScrollDirection.UP:
            os.system("mixerctl outputs.master=+10")
        self.set_icon()

    def on_left_click(self, event):
        os.system("mixerctl outputs.master.mute=toggle")
        self.set_icon()

    def on_right_click(self, icon, button, time):
        # Quit-menu item
        self.menu = Gtk.Menu()
        box = Gtk.Box()
        box.set_spacing(10)

        img = Gtk.Image()
        img.set_from_stock(Gtk.STOCK_CANCEL, Gtk.IconSize.MENU)
        label = Gtk.Label("Quit")
        box.add(img)
        box.add(label)
        quit = Gtk.MenuItem()
        quit.add(box)
        quit.connect("activate", Gtk.main_quit)
        self.menu.append(quit)

        self.menu.show_all()

        self.menu.popup(None, None, None, self.tray, button, time)

    def main(self):
        Gtk.main()

if __name__ == "__main__":
     app = Menu()
     app.main()

Historique

J’ai écrit historiquement cette documentation de manière collaborative sur le wiki de la communauté “OpenBSD Pour Tous”.



Enjoy-ID!
Enjoy-IT!