Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

Solution concernant l'instabilité des bus ID USB
usb_bus_id_instable est un script adaptant rtirq en fonction du bus id de l'interface audio USB .





Description de la problématique


Dans le monde informatique moderne, l'USB c'est la (parfois mauvaise) réponse à tout. Sur l'USB, on branche ses interfaces homme/machine (clavier, souris, wacom, surface de contrôle...), des périphériques de sortie (imprimantes), des périphériques de stockage, des téléphones... Certains, pour ne pas dire la plupart, restent branchés en permanence.

Dans une approche MAO, on veut une gestion du temps réel au cordeau, ce qui implique une hiérarchisation de l'importance des périphériques ; dans ce but on utilise rtirq-init via son fichier de configuration (dans la famille debian, c'est /etc/default/rtirq) et on donne un niveau de priorité aux différents périphériques. Jusque là tout va bien, si l'on a une carte audio PCI à base de ice1712, il suffit de mettre RTIRQ_NAME_LIST="rtc ice1712" et le tour est joué : votre système d'exploitation sait que le périphérique ice1712 est importantissime.

Si, par contre, votre interface est sur port USB, les choses se compliquent puisque vous devrez déclarer non pas l'interface mais le port. Simple : RTIRQ_NAME_LIST="rtc usb". Sauf qu'avec cette syntaxe, votre interface audio a certes une haute priorité, mais vos claviers, souris, imprimantes, gorcongulator, et ce truc inutile à l'effigie de Jackie Quartz offert par tante Janine (et qu'il est interdit de balancer, sauf à vouloir déclencher une guerre familiale digne d'inspirer le prochain Shakespeare) se retrouvent tous avec le même niveau de priorité élevée.

Résultat : en pleine prise ultime et merveilleuse, l'imprimante se met en veille et en informe le système, le chat bouge la souris, le gorcongulator gorcongule (c'est son rôle, après tout) et tante Janine se rappelle à votre bon souvenir avec une mise en mouvement aussi absurde que CPU-phage de son truc débile, là. Au revoir la merveilleuse prise vocale à forte poussée, tellement forte d'ailleurs qu'on ne peut s'en permettre qu'une, gorge et voisins déclarant forfait.

Heureusement, une solution est dans la doc : il suffit de préciser le port usb concerné comme ceci :
RTIRQ_NAME_LIST="rtc usb2"
(en vérifiant évidemment le numéro de port avec la commande "lsusb" et en ne mettant rien d'autre sur ce port)

Et le tour est joué... jusqu'à ce que d'un coup ça déconne, moins qu'avant mais ça rame grave en audio... Parce que le port USB de votre interface a changé de bus ID entre deux redémarrages et n'est donc plus en priorité élevée. Et là, il vous reste deux options :
  1. hurler après nunux, balancer moult coups de lattes dans la tour, faire une manif pro-Trump au congrès du Libre et faire un versement permanent de 1,5 fois votre salaire à goowinpple
  2. lire le paragraphe suivant...



Solution choisie ici


Il s'agit donc de créer un petit script qui sera exécuté à chaque démarrage, récupérera le bus ID de l'interface USB audio, modifiera le fichier de configuration de rtirq-init avant de le relancer. La procédure qui suit est opérationnelle sur une Debian Stretch, elle devrait être valable sur toutes les distros issues de Debian type LibraZiK, Ubuntu et ses dérivées, devuan, etc... (si votre distro debianesque est vraiment exotique, je pars du principe que vous êtes suffisamment pointu pour savoir adapter ce qui suit). Pour d'autres familles de distro, il vous faudra adapter (les différences peuvent venir de l'emplacement du fichier de configuration de rtirq-init ou de la manière de lancer un service. La procédure décrite ci-dessous utilise rc.local parce qu'elle est compatible au moins avec systemd, upstart et sysvinit, donc de quoi couvrir la majorité des cas).



Mise en place


  1. tout d'abord, on crée un fichier (en super utilisateur) au bon endroit :
    sudo touch /etc/init.d/rtirq-adaptable
    (vous êtes libre du nom de fichier du script, ça va de soi)
  2. on édite le fichier :
    sudo leafpad /etc/init.d/rtirq-adaptable
  3. et on y intègre ceci tel quel :
    #!/bin/bash
    
    usb=$( awk '{sub(/^[^1-9a-fA-F]*/,"",$1);printf("%s",$1)}' FS=/ /proc/asound/card?/usbbus )
    sed -i -e '/^RTIRQ_NAME_LIST=/s/usb[0-9a-fA-F]*/usb'${usb}'/' /etc/default/rtirq
    
    /etc/init.d/rtirq restart
  4. on sauve et on ferme puis on rend ce fichier exécutable :
    sudo chmod a+x /etc/init.d/rtirq-adaptable

Ensuite, vous avez le choix entre lancer le script à chaque démarrage en faisant un lien symbolique dans les différents runlevel ou bien (plus simple) :
sudo leafpad /etc/rc.local


Et vous modifiez le fichier comme suit (l'important, c'est l'avant dernière ligne, juste avant "exit 0", ce qui précède n'étant que des commentaires) :
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/etc/init.d/rtirq-adaptable
exit 0


Vous sauvegardez le fichier, vous refermez et vous êtes tranquilles à vie dès le prochain redémarrage.

Voilà.

Je viens d'expérimenter pendant un bon mois, plus de problème alors que mon "bus id" changeait quasi à chaque redémarrage et que je commençais chaque session par un lsusb éventuellement suivi d'un redémarrage du script RTIRQ avec les modificationss adéquates.


Note pour les distributions Slackware ou affiliées


Le script de lancement local se trouve en :
/etc/rc.d/rc.local

par suite, il faudra donc déposer le script rc.rtirq_adaptable dans le répertoire /etc/rc.d/ (ce n'est pas obligatoire mais c'est plus congruent) et ajouter au script de lancement les trois lignes idoines, par exemple ci-dessous les trois dernières lignes :
sudo leafpad /etc/rc.d/rc.local


#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.

if [ -x /etc/rc.d/rc.rtirq ]; then
  /etc/rc.d/rc.rtirq start
fi

if [ -x /etc/rc.d/rc.rtirq_adaptable ]; then
  /etc/rc.d/rc.rtirq_adaptable start
fi



  1. pour être effectif il faut donc rendre exécutable 'rc.rtirq_adaptable'
  2. la stance 'exit 0' est superflue.


Remerciements


Olinuxx, ça va de soi, pour le boulot en général et pour sa capacité à s'intéresser au moindre truc qui remue ici (c'est aussi rare qu'utile, les gens en éveil comme ça), Loki Harfagr pour ses qualités syntaxiques et l'intelligence de ses simplifications de script, sub26nico pour m'avoir souffler l'idée de venir parler de ça ici, le Gewurtz Traminer des caves de Turckheim, sans qui le monde serait de suite moins sympa et ma fille pour ne pas m'avoir interrompu avant les remerciements. Voilà.


Collaborateur(s) de cette page : olinuxx et sardonicus .
Page dernièrement modifiée le Mercredi 13 décembre 2017 14:42:59 par olinuxx.
Le contenu de cette page est licencié sous les termes licence.

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]


Mégaphone [Afficher / Cacher]

sub26nico, 18:14, jeu. 18 Jan 2018: Salut et bienvenue à Giksy :-)
sub26nico, 23:21, mer. 17 Jan 2018: Salut et bienvenue à lechim et shcmd :-)
sub26nico, 00:17, mer. 17 Jan 2018: Salut et bienvenue à nonorexic :-)
olinuxx, 08:33, mar. 16 Jan 2018: Bonjour et bienvenue à Woland :-)
sub26nico, 22:31, lun. 15 Jan 2018: Un synthétiseur qui a désormais une version Linux :[Lien]
olinuxx, 21:45, lun. 15 Jan 2018: Bonjour et bienvenue à CjfduBoulais :-)
sub26nico, 15:46, ven. 12 Jan 2018: Salut et bienvenue à jbtavernier :-)
sub26nico, 09:58, jeu. 11 Jan 2018: Salut et bienvenue à Fokeltok :-)
olinuxx, 19:38, mer. 10 Jan 2018: Bonjour et bienvenue à benjamin27101977 :-)
olinuxx, 14:04, mer. 10 Jan 2018: Bonjour et bienvenue à Shao :-)
olinuxx, 09:39, mer. 10 Jan 2018: Bonjour et bienvenue à rado55h :-)
bluedid29, 09:57, mar. 09 Jan 2018: Hello ! Je cherche des infos sur le Zoom H6, merci :-) Post ici [Lien]