Page 1 sur 1

[Openbox - Astuce] Notifications de volume

Publié : lun. 25 oct. 2010, 14:36
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 !

Re: [Openbox - Astuce] Notifications de volume

Publié : lun. 25 oct. 2010, 20:37
par wido
pas encore testé mais j'ai l'idée :)

Re: [Openbox - Astuce] Notifications de volume

Publié : mer. 15 déc. 2010, 20:33
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..