Chargement...
 
Skip to main content

Historique: usb_bus_id_instable

Aperçu de cette version: 12


usb_bus_id_instable est un script adaptant rtirq en fonction du bus id de l'interface audio USB .

Table des matières





Description


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 de sorties (imprimantes), des périph de stockages, 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 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é. 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 cpuphage 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, la 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 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:

-Hurler après nunux, balancer moults 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

-Lire le paragraphe suivant...



Utilisation


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. J'ai décrit une procédure utilisant rc.local parce qu'elle est compatible au moins avec systemd, upstart et sysvinit, donc de quoi couvrir la majorité des cas).



Action


Tout d'abord, on crée un fichier (en root ou via sudo) au bon endroit :
Copy to clipboard
sudo touch /etc/init.d/rtirq-adaptable


(vous êtes libre du nom, ça va de soi)

On édite le fichier :
Copy to clipboard
sudo leafpad /etc/init.d/rtirq-adaptable


et on y intègre ceci tel quel :
Copy to clipboard
#!/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


On sauve et on ferme puis on rend ce fichier exécutable :
Copy to clipboard
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) :
Copy to clipboard
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") :
Copy to clipboard
#!/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 sauvez, 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 d'RTIRQ avec les modifs adéquates.

Note pour les distributions Slackware ou affiliées :

Le script de lancement local se trouve en :
Copy to clipboard
/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 :
Copy to clipboard
cat /etc/rc.d/rc.local


Copy to clipboard
#!/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à.

Historique

Avancé
Information Version
Wed 13 Dec 2017 14:42 olinuxx intégration faite 18
Afficher
Mon 11 Dec 2017 17:10 sardonicus 17
Afficher
Mon 11 Dec 2017 14:06 olinuxx 16
Afficher
Mon 11 Dec 2017 14:04 olinuxx + un peu d'amélioration de l'écrit + mise en page + liens internes + codes + coquilles + 15
Afficher
Fri 08 Dec 2017 16:47 olinuxx bandeau d'intégration 14
Afficher
Wed 06 Dec 2017 11:52 sardonicus 13
Afficher
Wed 06 Dec 2017 11:51 sardonicus Intégration de la variante de procédure pour slackware; loki mood. 12
Afficher
Tue 05 Dec 2017 16:35 olinuxx titre paragraphe + non-rétractable 11
Afficher
Tue 05 Dec 2017 16:34 olinuxx + titre de la page + suppression de la balise HTML + suppression de trucs non-nécessaires + ponctuations + mise en page / cohérence wiki + anglicismes 10
Afficher
Tue 05 Dec 2017 07:48 sardonicus 9
Afficher
Tue 05 Dec 2017 07:42 sardonicus 8
Afficher
Mon 04 Dec 2017 22:47 sardonicus 7
Afficher
Mon 04 Dec 2017 22:47 sardonicus 6
Afficher
Mon 04 Dec 2017 22:45 sardonicus 5
Afficher
Mon 04 Dec 2017 22:44 sardonicus 4
Afficher
Mon 04 Dec 2017 22:39 sardonicus 3
Afficher
Mon 04 Dec 2017 22:30 sardonicus 2
Afficher
Mon 04 Dec 2017 22:27 sardonicus 1
Afficher