[Openbox - Astuce] Notifications de volume

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Kiljaeden
archer
Messages : 107
Inscription : sam. 19 sept. 2009, 12:31
Localisation : France

[Openbox - Astuce] Notifications de volume

Message par Kiljaeden »

Salut !
Sous Ubuntu, quand on change le volume au clavier, (en général, c'est Fn-Haut ou Bas), on a le droit à une notification via notify-osd. C'est assez joli à mon goût. Donc j'ai cherché à retrouver ce comportement sous Openbox, et ma méthode doit fonctionner avec d'autres WM.
C'est un script python. L'idée, c'est de lancer une sorte de démon (pyvolumedaemon) qui tourne en tâche de fond (il faut le mettre dans le autostart.sh). Il surveille les modification du fichier ~/.volume. Dès que celui-ci est modifié, il change le volume et affiche la notification correspondante à ce qui est indiqué dans le fichier.
Ensuite, à chaque fois qu'on veut changer le volume, on lance une commande qui se charge d'écrire ce qu'il faut dans ~/.volume : pyvolume up|down|toggle. C'est la commande qu'il faut mettre dans le rc.xml à l'appui sur les touches qui nous intéressent.
J'ai recollé des bouts de scripts trouvés sur le net, dont un bout (celui qui balance la notification) sur le site de Cannonical. J'ai choisi de faire une tache de fond, car si on relance un processus pour chaque notification, les notifications s'accumulent et ne remplacent pas les précédentes.
Voilà donc les scripts :
pyvolumedaemon :

Code : Tout sélectionner

#!/usr/bin/python2

import sys
import time
import os
import pynotify
import commands
import pyinotify

def pushNotification (icon, value):
	n = pynotify.Notification ("Volume", "", icon);
	n.set_hint_int32 ("value", value);
	n.set_hint_string ("x-canonical-private-synchronous", "");
	n.show ()

def changer_volume(action):
	volref = int(commands.getoutput('amixer sset Master 0%- | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1'))
	if (action == 'toggle'):
		os.system('amixer -q set Master toggle')
	elif (action == 'plus'):
		os.system('amixer -q set Master 5%+ unmute')
	elif (action == 'moins'):
		os.system('amixer -q set Master 5%- unmute')

	off = commands.getoutput("amixer get Master | grep off")
	if off == "":
		vol = int(commands.getoutput('amixer sset Master unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1'))
		if vol == 0:
			etat = 'notification-audio-volume-off'
		elif vol < 34:
			etat = 'notification-audio-volume-low'
		elif vol > 66:
			etat = 'notification-audio-volume-high'
		else:
			etat = 'notification-audio-volume-medium'
	else:
		etat = 'notification-audio-volume-muted'
		vol = volref
	if (action != 'toggle'):
		if (vol == volref):
			if (vol == 100):
				vol = 101
			elif (vol == 0):
				vol = -1
	#print vol

	if not pynotify.init ("icon-value"):
		sys.exit (1)

	pushNotification (etat, vol);

wm = pyinotify.WatchManager()  # Watch Manager
mask = pyinotify.IN_MODIFY # watched events

class HandleEvents(pyinotify.ProcessEvent):
	def process_IN_MODIFY(self, event):
		f = open('/home/clement/.volume', 'r')
		contenu = f.readline()
		#print contenu, ' contenu'
		if (contenu != ''):	
			contenu = contenu[0]	
			#print contenu, ' contenu[0]'
			if (contenu == 'p'):
				changer_volume('plus')
				os.system('echo "" > /home/clement/.volume')
			elif (contenu == 't'):
				changer_volume('toggle')
				os.system('echo "" > /home/clement/.volume')
			elif (contenu == 'm'):
				changer_volume('moins')
				os.system('echo "" > /home/clement/.volume')
		f.close()

p = HandleEvents()
notifier = pyinotify.Notifier(wm, p)
wdd = wm.add_watch('/home/clement/.volume', mask, rec=True)

notifier.loop()
pyvolume :

Code : Tout sélectionner

#!/bin/bash

command=$1

if [ "$command" = "" ]; then
    echo "usage: $0 {up|down|toggle}"
    exit 0;
fi


if [ "$command" = "up" ]; then
	echo "p" > /home/clement/.volume
fi

if [ "$command" = "down" ]; then
	echo "m" > /home/clement/.volume
fi

if [ "$command" = "toggle" ]; then
	echo "t" > /home/clement/.volume
fi

exit 1
Il faut sûrement les adapter, car je les ai mis pour mon nom d'utilisateur. Il convient de remplacer /home/clement/ par /home/votreutilisateur. Ça marche peut être en mettant ~/ mais j'ai pas essayé.
Il faut les rendre exécutables et les mettre dans /usr/bin ou un dossier de ce genre.

Alors, qu'en dites vous ? Si vous avez des suggestions d'améliorations, je suis preneur !
Arch Linux x86_64 sur Dell Latitude 6490
Avatar de l’utilisateur
wido
Chu Ko Nu
Messages : 497
Inscription : mar. 21 oct. 2008, 20:59

Re: [Openbox - Astuce] Notifications de volume

Message par wido »

pas encore testé mais j'ai l'idée :)
Image
Avatar de l’utilisateur
yeste64
Daikyu
Messages : 69
Inscription : jeu. 02 déc. 2010, 17:36

Re: [Openbox - Astuce] Notifications de volume

Message par yeste64 »

Ne marche pas chez moi.. J'ai bien mis pyvolume et pyvolumedaemon dans /usr/bin/ et leur ai ensuite appliqué un chmod 777. Dans obkey, j'ai ensuite changé les commandes pour les raccourcis claviers du son [qui été avant exécuté à l'aide d'aumix] telles quelles : pyvolume up, down, et toggle. J'ai ensuite bien ajouté pyvolumedaemon dans mon rc.conf. Mais non, je n'ai rien..
Répondre