Il y a deux façons de répondre à cette question.
- Soit vous essayez de faire fonctionner Jack avec pulseaudio... le reste de cette question vous expliquera comment faire.
- Ou... n'essayez pas d'utiliser à la fois pulseaudio et jack, remplacez-les simplement par du fil de fer : pipewire est censé être "le nouveau pulseaudio" (il devrait remplacer pulseaudio à certains endroits je pense, et est déjà beaucoup moins bogué que pulseaudio et supporte plus d'options Bluetooth). Pipewire émule pulseaudio et jack en même temps, et peut être utilisé de manière transparente avec pulseaudio/qjackctl/... pour connecter des applications pulseaudio et jack ensemble (en fait, pipewire ne fait pas beaucoup de différence entre les applications pulseaudio et jack... la plupart du temps, je ne suis même pas sûr si l'application que j'utilise tourne avec jack ou pulseaudio). Si vous voulez vraiment vous faire mal et utiliser pulseaudio + jack... le reste de cette question est pour vous.
Il y a quelque temps, j'ai écrit une commande, et quelqu'un m'a signalé qu'après avoir essayé toutes les solutions ici, il n'avait pas de chance. Mais cette solution a fonctionné pour lui, donc je vais la poster ici au cas où quelqu'un d'autre pourrait être aidé. NB : Je ne prétends pas que cette solution est la plus élégante, mais elle a fait le travail assez bien pour moi :
- Je peux démarrer/arrêter jack en cliquant simplement sur le bouton start/stop et le passage est automatique entre pulseaudio et pavucontrol.
- il connecte automatiquement tous les logiciels de lecture actuels à jack (c'est pourquoi il y a cet affreux grep, faites-moi savoir si vous avez une meilleure solution)
- il s'assure également que l'application pulseaudio peut aussi utiliser les microphones
Cette solution peut être légèrement améliorée en déchargeant correctement les modules en quittant Jack, peut-être en utilisant l'horrible grep proposé. ici mais je n'ai pas vraiment trouvé de bénéfice pour moi.
Notez également que je donne des instructions assez détaillées sur la façon de déboguer de tels problèmes.
Ma solution (voir la théorie ci-dessous pour comprendre pourquoi elle fonctionne/échoue et déboguer tout problème potentiel)
Installez :
$ sudo apt install jack2 pavucontrol qjackctl pulseaudio-module-jack.
Lancez qjackctl :
$ qjackctl
![enter image description here]()
Cliquez sur Setup
et vérifiez que l'interface de sortie est la bonne (si vous avez une sortie HDMI par exemple, cette vérification peut être importante). Dans mon cas, je vais simplement utiliser la valeur par défaut et je reviendrai ici si j'ai des problèmes plus tard. ![enter image description here]()
Ensuite, dans l'onglet avancé, j'ai remplacé le Préfixe du serveur jackd
avec pasuspender -- jackd
. Ceci est censé dire à pulseaudio de laisser temporairement Jack gérer la carte son. Je ne suis pas sûr que ce soit vraiment nécessaire, mais je pense que ça ne peut pas faire de mal : ![enter image description here]()
Ensuite, dans l'onglet "Options", mettez dans le champ Execute script after Startup
le code suivant :
pactl load-module module-jack-sink && pactl load-module module-jack-source && pactl set-default-sink jack_out && pacmd set-default-source jack_in && pacmd list-sink-inputs | grep index | sed 's/ *index: *//g' | xargs -I{} pacmd move-sink-input "{}" jack_out
Le but de cette commande est de créer une nouvelle sortie (sink) vers pulseaudio qui pointe vers jack, d'activer ce nouveau sink par défaut (toutes les applications nouvellement ouvertes écriront vers jack), et il modifie également la sortie de toutes les applications existantes pour s'assurer qu'elles pointent vers jack.
Ensuite, pour s'assurer que pulseaudio redémarre lorsque jack est fermé, j'ai également ajouté dans le champ Execute script after Shutdown
:
pacmd suspend false
![enter image description here]()
C'est ça ! Maintenant, il ne vous reste plus qu'à sauvegarder en cliquant sur Apply
et de cliquer sur Start
pour commencer le cric :
Vous devriez voir quelque chose comme cela si cela fonctionne (et bien sûr aucune erreur) : ![enter image description here]()
Un peu de théorie pour comprendre pourquoi ça marche ou pourquoi ça ne marche pas.
Donc, en gros, vous ne pouvez pas lire le son parce qu'un seul programme peut lire le son en même temps sur la même carte son. Ainsi, lorsque Jack joue, pulseaudio est bloqué. Maintenant, il s'avère également que la plupart des applications de bureau peuvent parler à pulseaudio mais pas à Jack. Donc quand Jack est en marche, vous n'avez plus de son. L'astuce est de router le trafic pulseaudio vers Jack avec quelque chose comme ça :
application -> pulseaudio -> Jack -> sound card
Notez que tous les liens doivent être correctement configurés. Nous allons voir maintenant comment ils sont configurés et comment vérifier s'ils sont correctement configurés.
Donc pour créer le lien pulseaudio -> Jack
nous allons charger un module qui crée un nouveau puits pulseaudio (c'est à dire un périphérique de sortie virtuel) appelé Jack sink
De cette façon, toutes les applications qui écrivent dans ce puits seront redirigées sur Jack. Vous pouvez avoir plusieurs puits déjà existants, comme un pour l'audio interne, et si vous avez un casque bluetooth, vous pouvez avoir un puits pour lui aussi. Pour vérifier sur quel sink une application est en train de jouer, installez et exécutez pavucontrol
( pavucontrol
est de toute façon super utile pour tout ce qui concerne le son, puisque vous pouvez tout contrôler à partir de lui). Vous pouvez voir la liste des puits dans un onglet nommé comme suit Input devices
(désolé si la traduction est mauvaise), dans mon cas j'ai actuellement 2 éviers (le jack n'est pas encore chargé) : ![enter image description here]()
Si vous n'avez qu'un seul puits, vous ne verrez peut-être rien d'intéressant, mais si vous avez plusieurs puits, vous pouvez vérifier dans le premier onglet quelle application joue sur quel puits (ici vous voyez que firefox joue sur mon casque bluetooth), et vous pouvez le changer si nécessaire :
![enter image description here]()
Donc si vous avez des problèmes, vous pouvez :
- lien
pulseaudio -> jack
: vérifiez que vous avez un évier correspondant à jack (si ce n'est pas le cas, essayez d'exécuter manuellement la commande pactl load-module module-jack-sink
qui était censé être exécuté automatiquement. Si cela échoue, vérifiez que vous avez installé le fichier pulseaudio-module-jack
et éventuellement redémarrer pulseaudio en le tuant simplement killall pulseaudio
. Pas d'inquiétude, pas besoin de redémarrer pulseaudio, il respawn automatiquement). Assurez-vous également que le volume n'est pas à 0%, et que le canal n'est pas coupé :
- lien
application -> pulseaudio
: vérifiez que vos applications écrivent sur cet évier. Si ce n'est pas le cas, vous pouvez changer manuellement le sink (mais le script de démarrage était censé changer le sink automatiquement) de cette façon :
- lien
jack -> sound card
: Si vous avez encore des problèmes (cette partie peut aussi concerner un problème que vous avez avec les logiciels qui écrivent directement sur le jack comme zynaddsubfx
), consultez le Graph
une partie de Jack :
![enter image description here]()
Vous devriez commencer par regrouper tous les nœuds, mais vous pouvez les déplacer pour les rendre plus visibles. Ensuite, assurez-vous que toutes les applications que vous voulez écouter sont connectées à system
(dans mon cas zynaddsubfx
n'a pas été connecté automatiquement). NB : si vous avez une ancienne version de QJackctl, alors vous pouvez avoir des onglets à la place de ceci. Mais c'est la même chose : vous aurez des entrées/sorties vertes dans l'onglet "Jack" que vous pouvez connecter manuellement, les violettes seront dans l'onglet "Alsa", et les rouges dans l'onglet "MIDI"... mais en fait tous les périphériques MIDI externes que vous branchez apparaîtront dans l'onglet Alsa : la raison est qu'il y a deux sortes de "MIDI" : l'ancien Alsa Midi (les ports sont globaux au système), et le plus récent Jack Midi (chaque application peut avoir ses propres entrées/sorties midi).
![enter image description here]()
-
Problèmes avec le MIDI : En théorie, pour obtenir du midi, il suffit de connecter les entrées violettes aux entrées violettes (ou dans l'onglet Alsa dans l'ancienne version, oui je sais c'est étrange que vous devez aller dans l'onglet Alsa et non Midi pour obtenir du Midi( !!!) mais c'est à cause de la différence entre Alsa MIDI vs le Jack Midi plus récent mais moins utilisé). Cependant, il s'avère que pour certaines raisons étranges, zynaddsubfx
a des valeurs par défaut étranges et apparaîtra comme "Midi/rouge" au lieu de "Alsa/vert", rendant impossible la connexion à un périphérique midi externe. Plus précisément, si vous exécutez zynaddsubfx
à partir de la ligne de commande sans aucune option ou avec :
zynaddsubfx -I alsa -O jack
(ce qui signifie l'entrée de Alsa MIDI, la sortie à jack) il ne devrait pas être un problème, vous serez en mesure de connecter les dispositifs MIDI :
![enter image description here]()
Cependant, si vous l'exécutez de manière graphique, l'entrée Jack par défaut exécute automatiquement zynaddsubfx -I jack -O jack
à la place... Et il y aura le problème que le zynaddsubfx
sera créée dans l'onglet rouge/MIDI, tandis que le dispositif MIDI externe réel se trouve dans l'onglet violet/Alsa. Cela signifie donc que vous ne serez pas en mesure d'affecter votre clavier MIDI externe à l'entrée suivante zynaddsubfx
:
![enter image description here]()
La solution consiste donc à exécuter zynaddsubfx
en utilisant la ligne de commande sans options, ou avec zynaddsubfx -I alsa -O midi
et tout devrait fonctionner !