Chargement...
 
Skip to main content

1 - Le matériel et les pilotes ALSA, FFADO, ...


[FAIT] Changement aléatoire du bus ID de l'usb

France
Bonjour, je recopie ici un truc que j'ai posté par ailleurs sur un autre site. Si quelqu'un veut le bouger dans les astuces (section adéquate), y apporter une modif ou si vous pigez pas, mal ou n'arrivez pas à le faire tourner, je le laisse aussi ici parce que ça permet d'en causer plus facilement.

_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

Avec linux, beaucoup de gens râlent à propos de l'usb qui est très capricieux. Alors oui. Mais non. Il se trouve que je viens d'être confronté au problème et qu'il est possible que j'ai une solution viable.

1) le souci: L'usb est fiable, en fait. Par contre, ce qui l'est moins, fonction du bios voire du chipset usb utilisé, c'est le numéro ID des bus usb. Si vous avez fait un lsusb pour connaître le numéro ID du bus sur lequel vous branchez toujours votre interface audio (admettons le bus 3), vous avez vraisemblablement dû mettre "usb3" dans votre rtirq, comme on vous le dit partout à longueur de net; c'est mieux que de mettre "usb" tout court parce que ça ne donne la haute priorité qu'à ce bus là sur lequel vous ne branchez rien d'autre et du coup ça évite de donner une priorité 80 à votre combo clavier souris ainsi qu'à cette superoouaibcam que vous avec branché il y a 18 mois et qui n'a jamais servi. Jusque là tout est ok sauf que des fois l'interface se comporte comme si elle n'était pas en haute priorité. La raison? L'affectation du bus ID n'est pas fixe (chez moi il alterne selon les démarrages entre le 1 et le 3). pour le vérifier, faites un lsusb à chaque démarrage et vérifiez que le bus ID du port usb de votre interface a toujours le même numéro.

2) si ce n'est pas le cas, voici un script maison qu'il vous faudra adapter:


------------------------------------------
Copy to clipboard
#!/bin/bash usb=$(lsusb | grep EGO | cut -c7) ((a = 1)) ((b = 3)) if (("$usb"=="$a")) then rm /etc/default/rtirq & cp /etc/default/rtirq1 /etc/default/rtirq elif (("$usb"=="$b")) then rm /etc/default/rtirq & cp /etc/default/rtirq3 /etc/default/rtirq fi /etc/init.d/rtirq restart

--------------------------------------------

-Première ligne, on touche pas.
-deuxième ligne, une variable (nommé "usb") dont la valeur sera le 7° caractère de la ligne contenant la suite de caractères EGO quand on fait un lsusb. C'est cette suite de caractère qu'il faut adapter. Vous faites un lsusb manuel dans une console, dans les lignes qui s'affichent vous cherchez celle de votre interface et vous choisissez dans cette ligne une suite de caractères qui ne se trouve pas dans les autres lignes et vous remplacez mon EGO par cette suite de caractères TELLE QU'ELLE APPARAIT dans le lsusb.

-a et b sont deux valeurs de comparaison (en l'occurrence les différentes ID que prend le bus usb). Si chez vous le bus est des fois ID2 des fois ID 4, vous remplacez 1 par 2 et 3 par 4 et s'il y a une troisième valeur vous faites ((c==X)) où X représente la troisième ID.

-à partid du if, on compare la variable (donc la valeur effective du bus ID) avec a et b. (écentuellement c). si la variable est égale à a alors on remplace /etc/default/irq par un fichier rtirq1 que l'on renomme rtirq; si la variable est égale à b on remplace par un fichier rtirq3 qu'on renomme rtirq (et pour c on rajoute

Copy to clipboard
elif (("$usb"=="$c")) then rm /etc/default/rtirq & cp /etc/default/rtirqX /etc/default/rtirq


avant le fi qui termine le cycle d'instructions).

La dernière ligne relance la lecture du rtirq.


En parallèle, il vous faut aussi créer deux copies de votre rtirq, dans /etc/default/rtirq1 vous aurez la ligne RTIRQ_NAME_LIST="rtc usb1" et dans /etc/default/rtirq3 vous aurez la ligne RTIRQ_NAME_LIST="rtc usb3". Si vous êtes sous debian, vous enregistrez mon script /etc/init.d/sardonicus_saved_my_life, vous le rendez exécutable (chmod a+x) et vous faites un lien symbolique vers un runlevel avec un numéro très élevé ou bien, plus simple, vous éditez /etc/rc.local et vous ajoutez "/etc/init.d/sardonicus_saved_my_life" (sans les guillemets) avant le "exit 0". Pour les autres distros, faites une recherche sur la manière de lancer un script pendant la phase de boot mais arrangez vous pour qu'il n'intervienne pas AVANT le script rtirq d'origine!!! Redémarrez votre machine, ou mieux puisqu'on n'est pas sous windows, lancez le script et hop ça marche, cette fois ci en manuel mais dès le prochain reboot ce sera transparent et automatique.
Pour une méthode générale ces modifs devraient faire l'affaire :
Copy to clipboard
usb=$( awk '{sub(/^[^1-9a-fA-F]*/,"",$1);printf("%s",$1)}' FS=/ /proc/asound/card?/usbbus ) sed -e -i '/^RTIRQ_NAME_LIST=/s/usb[0-9a-fA-F]*/usb'${usb}'/' /etc/default/rtirq

(je reposte parce que mon précédent n'apparaît pas)

Pour une méthode générale :

Copy to clipboard
usb=$( awk '{sub(/^[^1-9a-fA-F]*/,"",$1);printf("%s",$1)}' FS=/ /proc/asound/card?/usbbus ) sed -e -i '/^RTIRQ_NAME_LIST=/s/usb[0-9a-fA-F]*/usb'${usb}'/' /etc/default/rtirq

France
olinuxx écrit:
Y'a pas moyen de remplacer les "((a = 1)), ((b = 2)),..." par une énumération automatique ?


Ca doit pouvoir se faire mais ça fait retourner sur ma dernière version du script alors que celle de loki est vraiment chouette de sobriété.
France
@loki: Tu repasses en héxa, c'est ça?
ça marche aussi pour du numérique base 10 et j'ai par précaution ajouté la possibilité que
les bus soient numérotés en hexa, je n'ai pas vérifié dans le source du noyau si c'est le cas
mais c'est assez probable 😊
France
Ici j'ai un message d'erreur:

Copy to clipboard
sed: -e expression n°1, caractère 1: commande inconnue: `-'

France
Correction qui fonctionne:

Copy to clipboard
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


Inversion -i -e.
oups, oui désolé, j'avais fait mes tests en output console sans le -i et
je l'ai ajouté "à la main" en postant ici, malheureusement en oubliant que
le -e doit forcément "coller" à l'expression !
Comme quoi les tests partiels induisent toujours des blagues 😀)
France
Bah, si c'est le taquet des c...ries que tu fais en script, ç fait pas bien mal!!! 😊 Comme ça, il est super bien, ZE script!
France
Bon, Oli, qu'est-ce qui, d'après toi, manque pour passer en trucs et astuces? Un howto, peut-être? Je peux me charger de la partie debianesque (qui doit donc coller pour ta distro, t'auras juste à contrôler). Si Loki peut me préciser les variantes vis-à-vis d'une slack, j'intègre dans le pavé, et si d'autres veulent donner les détails inhérents à des distros hors debian (donc entre autres Ubuntu (upstart...), mint, red hat...).
France
@sardonicus : si tu veux en faire un truc et astuce, fais lui une page (voir le lien "Créer une page" en haut lorsque tu es connecté). Je t'aiderai (mise en page cohérente avec le reste du site, intégration dans la doc, ...).
Pour ce qui est des "spécificités Slackware" 😉

1. le paquet "rtirq" sera construit à partir de Slackbuilds.org

2. le fichier cible par défaut sera :
Copy to clipboard
/etc/rtirq.conf

il est évidemment possible pour l'utilisateur de l'avoir déplacé dans
Copy to clipboard
/etc/default/
ou
Copy to clipboard
/etc/sysconfig

s'il l'a fait c'est qu'il saura quoi faire dans ce cas 😉

3. Lire le fichier
Copy to clipboard
/usr/doc/rtirq-*/README
pour savoir quoi faire pour l'autostart et dans lilo (ou elilo)
France
Oki, je fais un rédactionnel dans la semaine si mes papooses me laissent un peu de temps et je vous le lâche pour corrections avant qu'on mette ça dans une page toute faite exprès pour... Encore merci à vous deux et à sub26nico aussi. Moi, ça m'ôte une bonne épine du pied, et avec les corrections ultimes, ça marchera pour tout le monde. Parfait!
France
sardonicus écrit:
à sub26nico aussi

Bah de rien, à part faire une vanne sur un autre site, j'ai pas fait grand chose.
Et c'est plutôt une bonne chose car si vous aviez besoin de moi pour coder, on serait mal 😡

Merci à toi pour l'astuce et la (future) rédaction de l'article!
France
Ben tu m'aurais pas reparlé de LMAO, j'y pensais pas et je laissais le truc dans son coincoin... Donc si, merci.
France
Des nouvelles ici sardonicus ?
France
Non, désolé. Je suis un peu overbooké en ce moment donc j'ai du mal à dégager une ou deux heures pour faire ça proprement. J'oublie pas, ne t'inquiète pas.
France
OK, pas de soucis. Pour info, il ne s'agit pas d'inquiétude, ni même de vouloir te mettre en pression, mais c'est simplement que je fais des passages de maintenance de certaines sections de forum régulièrement histoire de faire remonter un peu certains fils de discussion. Donc ne sois pas surpris si je réanime ce sujet d'ici quelques semaines/mois 😊

En attendant, bonne zik !
France
Oli, j'ai pondu un truc, je peux te l'envoyer pour contrôle?
France
Mets le directement dans une nouvelle page wiki (voir "Créer une page" dans le bandeau orange en haut des pages du site quand tu es connecté), on corrigera directement dedans si besoin.
Page: 2/3  [Suivant]
1  2  3