Poulpe o/
Ça faisais un moment que j'utilisais Mumble pour tout un tas de réus audios dans tout un tas d'assos, et c'était cool. Sauf que, apparemment, de plus en plus de gens pensent que c'est préférable d'utiliser un outil de visioconférence dans le navigateur web (et sans activer de caméras) plutôt qu'un client dédié d'un protocole fait pour ça. Sur le principe, je ne suis pas fan, mais bon, ça reste un outil libre, qui apparemment serait plus pratique pour les gens qui n'y connaissent rien parce que rien à installer et configuration minimale, tout ça, alors bon, voilà.
Sauf qu'il y a un truc qui m'embête pas mal au niveau pratique : mon client Mumble, il est capable d'écouter le clavier même quand sa fenêtre n'a pas le focus, ce qui fait que, quand en plein milieu d'une réunion on me demande mon avis alors que j'étais en train de faire quelque chose dans une autre fenêtre/sur un autre bureau (du type prendre des notes dans le pad ou faire une réussite pour m'occuper les mains en restant attentif (oui, je fais partie de cette catégorie de gens qui sont plus attentifs à ce qui se dit en faisant autre chose)), je peux juste appuyer sur ma touche « appuyer pour parler », et les gens m'entendent directement, alors qu'avec un client Web, il faut d'abord redonner le focus au bon onglet de la bonne fenêtre, puis appuyer sur le bouton pour se démuter, ce qui est sacrément moins pratique.
Et puis, on m'a fait remarquer récemment qu'il existait, en tout cas dans BigBlueButton (pas encore regardé pour Jitsi, ça pourrait éventuellement valoir le coup aussi) un raccourcis clavier pour se muter/démuter. Sauf que, bien sûr, comme c'est une fenêtre de navigateur qui gère ça, ce raccourcis clavier ne marche que si celle-ci a le focus, donc ça n'arrange rien. Mais il se trouve que Xorg peut tout à fait envoyer des événements claviers à une fenêtre même si celle-ci n'a présentement pas le focus. Et donc je me suis dit que ça pouvait valoir le coup de bricoler quelque chose. Que voici, donc :
#! /usr/bin/python3
# coding: Utf-8
import time
import ewmh
import Xlib.XK
import Xlib.display
from Xlib.protocol import event
disp = Xlib.display.Display()
root = disp.screen().root
ewmh = ewmh.EWMH(disp)
root.xinput_select_events([(Xlib.ext.xinput.AllDevices,
Xlib.ext.xinput.KeyPressMask|Xlib.ext.xinput.KeyReleaseMask)])
while True:
time.sleep(0.01)
while disp.pending_events() > 0:
ev = disp.next_event()
if ev.type == Xlib.X.LASTEvent:
if ev.data["detail"] == 105:
for win in ewmh.getClientList():
name = ewmh.getWmName(win)
if name is not None and b"BigBlueButton" in name:
for evtype in event.KeyPress, event.KeyRelease:
win.send_event(evtype(root=root, window=win,
state=Xlib.X.Mod1Mask, child=Xlib.X.NONE,
detail=disp.keysym_to_keycode(Xlib.XK.XK_m),
root_x=0, root_y=0, event_x=0, event_y=0,
same_screen=0, time=Xlib.X.CurrentTime),
propagate=True)
disp.flush()
Ça nécessite les paquets python3-xlib et python3-ewmh (tout serait faisable uniquement avec la Xlib, mais EWMH est fait pour te simplifier la vie sur certaines opérations liées aux fenêtres, et vue la Xlib, ce n'est pas franchement du luxe). Ça nécessite aussi que l'onglet qui gère BigBlueButton soit l'onglet actuellement actif dans le navigateur qui le fait tourner, mais ça, de toute façon, en ce qui me concerne j'utilise un navigateur juste pour ça histoire que ça n'interfère pas avec ma navigation par ailleurs.
(Tiens, d'ailleurs, à ce sujet, y a quoi comme navigateurs dans les dépôts qui gèrent bien ce genre d'applis web moches ? Pour l'instant j'utilise qutebrowser pour ça, mais ce n'est pas forcément le plus adapté. J'utilise Firefox et Falkon pour de la vraie navigation par ailleurs, donc il m'en faudrait un autre que ces deux-ci. Bref)
Donc, à partir du moment où ce script est en train de tourner, chaque appui/relâchement de la touche contrôle de droite (qui est ma touche appuyer-pour-parler dans Mumble, on ne change pas les petites habitudes) va envoyer à BigBlueButton la combinaison Alt+M, qui est celle qui permet de muter/démuter. Donc il n'y a qu'à lancer BBB, se mettre en mute par défaut, et ça fait une touche appuyer-pour-parler tout à fait fonctionnelle, même quand on est en train de faire autre chose \o/ (Et pour les gens qui préfèrent, il suffit de démuter BBB par défaut, et ça fait une touche appuyer-pour-se-taire).
Edit : après vérification Jitsi a également un raccourcis clavier pour muter/démuter, qui se trouve être la touche M tout court. Sauf que Alt+M marche bien aussi, donc il suffit de remplacer le test « b"BigBlueButton" in name » par « b"Jitsi Meet" in name» (ou d'ajouter un truc plus souple qui accepte les deux), sans rien changer au reste du code, et ça marche pour Jitsi aussi. Donc tout va bien pour les deux. Je pense que je vais peut-être d'ailleurs modifier un peu le script pour que ce soit lui qui lance mon navigateur dédié et se termine automatiquement à la fermeture de celui-ci, mais ça, comme ça dépendra dudit navigateur, forcément, ce sera moins générique, comme script. Je pourrai partager ici quand même si jamais ça branche quelqu'un, mais bon, demandez
Tout retour sur ce truc fait en vitesse est évidemment bienvenu, positif comme négatif comme suggestif.
Dernière modification par Elzen (16-12-2020 19:44:11)