[ncmpcpp] visualisation FIFO sur le réseau (contourné)

Applications, problèmes de configuration réseau
Répondre
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

[ncmpcpp] visualisation FIFO sur le réseau (contourné)

Message par z3bra »

Bonjour,

Étant un peu noob en piping, je fais appel à vos connaissances pour résoudre mon dernier casse-tête en date:
J'ai deux machines sur le réseau:
Un serveur sur lequel tourne MPD (serveur musical)
Un laptop avec le client ncmpcpp pour manipuler MPD.

La connexion entre les deux se passe très bien, mais la seule chose qui me manque, c'est la visualisation das ncmpcpp !
Lorsqu'mpd et ncmpcpp sont sur la même machine, un pipe est partagé entre les deux pour qu'ncmpcpp puisse afficher un visuel de la sortie audio. Ça fonctionne à merveille chez moi.

Code : Tout sélectionner

# mpd.conf
...
audio_output {
    type "fifo"
    name "FIFO Visual"
    path "/tmp/mpd.fifo"
}

Code : Tout sélectionner

# ncmpccp/config
...
visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "FIFO Visual"
Maintenant, si les deux soft sont sur des machines séparée, impossible pour ncmpcpp d'accéder au pipe ! (J'ai essayé via un montage NFS, non-concluant, j'ai vite compris pourquoi ça ne peut pas marcher ^^)

En cherchant par-ci par-là et grâce au chan IRC, j'ai trouvée cette solution, mais qui reste bancale:
z3bra@client$ netcat -lk 1234 > /tmp/mpd.fifo & ncmpcpp
z3bra@serveur$ netcat client_ip 1234 < /tmp/mpd.fifo
Ça semble fonctionner pas trop mal...

Seulement, si je ferme le lecteur coté client, netcat s'arrête coté serveur, et j'ai plus qu'à recommencer si je veux mon visu...
Et franchement, c'est pas super pratique !

Donc si vous avez des idées, elles sont les bienvenues. Merci d'avance :)
Dernière modification par z3bra le jeu. 29 nov. 2012, 18:16, modifié 1 fois.
archlinux - 2bwm [ blog | git ]
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par benjarobin »

Ce n'est pas possible de faire du broadcast coté serveur via netcat (Aucune idée même pas cherché :-) ) ? Ainsi netcat n'est pas lié à l'IP du client
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par oktoberfest »

Salut,

un pipe nommé ne marche que pour deux processus sur le même pc. Dans ton cas il faut regarder du côté des communications tcp (à priori mpd sait faire, à voir comment en pratique).
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par z3bra »

@benjarobin: Si surement, mais pour l'instant c'est pas ma priorité. je vais déja le faire fonctionner pour un pc, et je verrais par la suite

@oktberfest: Oui je sais, c'est pour ça que j'ai trouvé une solution avec netcat. Pour mpd, j'ai pas réussi à le faire fonctionner en tcp...
archlinux - 2bwm [ blog | git ]
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par benjarobin »

Ma réponse allait dans le sens ou s'il y a broadcast UDP alors pas de connexion et donc pas de problème de déconnexion. Mais en effet creuser du coté de mpd me semble la meilleur voie
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par oktoberfest »

Côté serveur, tu peux mettre ton netcat dans une boucle infinie, un truc du genre :

Code : Tout sélectionner

$ do while [ 1 ]; do netcat client_ip 1234 < /tmp/mpd.fifo; done
Comme ça dès que le client coupe la connexion, le netcat côté serveur est relancé.
Ca reste pas terrible mais c'est une piste.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par z3bra »

Bon, j'ai trouvé comment utiliser le réseau avec mpd.
Il m'a fallu le recompiler avec l'option --enable-pipe-output.

J'ai donc, dans ma config mpd:

Code : Tout sélectionner

audio_output {
    type        "pipe"
    name        "network pipe"
    command     "nc -u hostname 1234"
    format      "44100:16:2"
}
Coté client, je lance toujours la commande nc -u -lk 1234 > /tmp/mpd.fifo.
La connection se passe bien... la première fois. Dès que je ferme ncmpcpp, le serveur me renvoie "broken pipe", alors que coté client, netstat me renvoie la connection comme "ESTABLISHED". J'ai donc un problème à ce niveau là. Puisque le client ne peut écouter qu'une seule connection à la fois, et que cette dernière ne se ferme pas, impossible pour mpd de se reconnecter au client. (je sais pas si je suis très clair...)
archlinux - 2bwm [ blog | git ]
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par oktoberfest »

De ce que j'ai vu de mes essais hier soir (en tcp du moins), netcat s'arrête d'un côté si le netcap de l'autre côté s'arrête aussi. C'est pour ça que je t'ai proposé la solution de la boucle infinie qui relance netcap.

En udp mes tests n'étaient pas probant alors qu'en tcp tout allait bien.

Je trouverais plus logique de lancer netcap en écoute côté mpd plutôt que côté ncmpcpp.
Si tu fais un truc du genre côté mpd :

Code : Tout sélectionner

$ cat /usr/local/bin/mpd_netcap.sh
#!/bin/bash

while [ 1 ]
do
  nc -lk 1234
done

Code : Tout sélectionner

audio_output {
    type        "pipe"
    name        "network pipe"
    command     "/usr/local/bin/mpd_netcap.sh"
    format      "44100:16:2"
}
et côté ncmpcpp

Code : Tout sélectionner

netcat <serveur mpd> 1234 > /tmp/mpd.fifo & ncmpcpp
Est-ce que ça fonctionne mieux ?
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par z3bra »

Pas besoin de la boucle while, mpd se charge de relancer la commande en boucle d'après ce que je vois dans les log...
En revanche, je comprends pas pourquoi tu veux que l'écoute se fasse côté mpd... Il s'agit bien d'ENVOYER des données depuis mpd (audio_output) en pipant les données vers une commande.

Ta commande chercherait donc à envoyer des données par le biais d'un port en écoute ? Où il y a quelquechose que je ne saisis pas ?
(Je vais tout de même essayer hein ^^)
archlinux - 2bwm [ blog | git ]
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par oktoberfest »

Le sens de connexion n'a rien à voir avec les sens d'envoi des données. Une fois la connexion établie, la communication est birectionnelle avec les sockets. D'un point de vue conceptuel, il parait logique que le netcat côté serveur soit en écoute (il attend un client).
Si tu fais tes tests en tcp est-ce que ça marche mieux ? Quand ça plante, peux-tu poster le résultat d'un netstat côté mpd, qu'on voit bien l'état des sockets ? D'après ce que tu dis, quand tu arrêtes netcat côté client, cela relance netcat côté serveur. As-tu pu vérifier qu'il y a bien un nouveau processus netcat lancé côté serveur ?
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par z3bra »

Alors, ça fonctionne plutot pas mal apparement :) merci beaucoup !
Lorsque je ferme ncmpcpp, netcat se ferme côté client (pour broken pipe), mais si je relance netcat, ncmpcpp se reconnecte sans problème au serveur.
Je peux donc me faire un alias, un service systemd ou un cron pour ça, je n'ai que l'embarras du choix...

En revanche, ça pose un tout autre problème, à savoir que si je désactive la sortie "network pipe" du serveur mpd, il m'est impossible de me reconnecter ! Je dois envoyer SIGKILL aux process mpd et netcat avant de relancer mpd et ainsi, réactiver la sortie pour que ça fonctionne à nouveau...
archlinux - 2bwm [ blog | git ]
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par z3bra »

Ah ! J'ai trouvé !!
En fait, ce qui faisait tout planter lors de la désactivation, c'est le fait que le processus netcat reste lancé sans qu'mpd ne lui pipe de commande (car sortie désactivée)
Donc, pour que netcat se termine lorsque la sortie mpd est désactivée, il suffit de retirer l'option -k de netcat, et celui-ci se terminera chaque fois que la sortie sera désactivée.
À l'inverse, netcat sera relancé à l'activation de la sortie mpd. Génial non ? ^^

Reste pour moi à éclaircir un dernier point, selon vous, le plus "propre" pour se connecter à mpd, c'est que le netcat côté client soit dans un cron, un alias, ou un service systemd ?
Sachant que du côté client:
  • le processus netcat se termine lorsque ncmpcpp est fermé
  • ncmpcpp n'a pas besoin que netcat soit forcément lancé pour fonctionner (même si la sortie coté serveur et activée)
  • un script peut être intéréssant pour vérifier si le serveur écoute bien sur le port définit (nc -z <server> <port> il me semble)
archlinux - 2bwm [ blog | git ]
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par oktoberfest »

Pour le démarrage de ncmpcpp, tout dépend de l'usage que tu veux en faire :
- cron : cela va démarrer ncmpcpp à horaire fixe
- alias : démarrage à la demande (à ta demande pour être précis)
- systemd : démarrage au démarrage de l'os

Sinon tu utilises quelle version de netcat (quel package) ? Moi j'ai installé gnu-netcat et je n'ai pas d'option -k...
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [ncmpcpp] visualisation FIFO sur le réseau

Message par z3bra »

@oktoberfest: J'ai le pkg openbsd-netcat des deux cotés.

Bon, en fait, après avoir testé chez moi, ça marche PAS DU TOUT !
LE fait qu'il y ait la sortie netcat d'activée prends le pas sur la sortie ALSA et donc j'ai bien la visualisation, mais plus le son. J'ai trouvé un tweak, en lançant le netcat -l coté client, ça marche UN PEU mieux, mais à peine, c'est à dire que j'ai la visualisation et le son en intermitence, genre 1 seconde de chacun... Pas top pour écouter la musique.

En dernier recours, j'ai trouvé le moyen de pas altérer le son en ayant la visualisation: J'ai virée la sortie "pipe" et activée la sortie FIFO.
Coté serveur, je lançe netcat client 1234 < /tmp/mpd.fifo
Coté client, j'écoute avec netcat -l 1234 > /tmp/mpd.fifo

Dans ce cas là, le son est nickel, et je peut visualiser le spectre. Cependant, il y a un fort retard sur la visualisation, ce qui est plutôt dommage. De plus, si ferme ncmpcpp, le netcat coté serveur se termine, et il me faut le relancer manuellement. Un script de type "démon" pourrait gérer le redémarrage de netcat dans ces cas là, mais c'est pas très propre.

Enfin bon, je pense finallement pas pouvoir obtenir de bons résultats sur cette manip', et ai donc décidé d'utiliser ncmpcpp directement sur le serveur pour utiliser la sortie FIFO, et d'utiliser mpc coté client histoire d'utiliser des commandes simples sur mes media keys.

JE définit le topic en (contourné) car pour le moment, je suis à court d'idée. Néanmoins, je continuerais de temps à autre à chercher des tweaks, et posterais mes idées (si j'en trouve) ;)

Merci pour votre aide !
archlinux - 2bwm [ blog | git ]
Répondre