[FAIT] Changement aléatoire du bus ID de l'usb
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:
------------------------------------------
--------------------------------------------
-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
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.
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
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.