Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/12/2011, à 16:56

thereelneo

[Resolu]Changer les periphériques "en un clic" ?

Bonjour,

J'aimerais écrire un script pour éteindre/allumer un périphérique phonon.
J'explique un peu le pourquoi: j'ai un écran avec haut parleurs connecté en HDMI à ma tour, cependant parfois je veux utiliser mon casque pour le son (appel skype par exemple).
Actuellement pour faire cela, je dois aller dans les réglages système > multimédia, éteindre le périphérique Barts HDMI et allumer le périphérique analogique (et inversement pour revenir aux HPs).
Je suppose que c'est faisable en une ou deux commandes, mais pas moyen de trouver lesquelles, est-ce que quelqu'un aurait une idée ?

Merci d'avance pour toute aide !

Dernière modification par thereelneo (Le 26/12/2011, à 14:35)

Hors ligne

#2 Le 23/12/2011, à 18:07

Manunu

Re : [Resolu]Changer les periphériques "en un clic" ?

Salut,

J'ai une fois réussi à changer ce genre de réglage (passer d'un microphone à un autre) mais en passant par pulseaudio. J'avais utilisé pacmd, mais pas avec un script. Sinon, essayes peut-être du côté de dbus.

Hors ligne

#3 Le 24/12/2011, à 00:37

Manunu

Re : [Resolu]Changer les periphériques "en un clic" ?

En cherchant un peu plus loin, la commande pactl devrait fonctionner. J'ai réussi à passer, des baffles de mon portable, à la sortie casque. Fait man pactl pour comprendre la syntaxe. J'ai d'abord identifier mon matériel avec pactl list, où j'ai chercher le bon sink (c'est la sortie) - tu en as sûrement plusieurs - et tu notes son numéro. C'est genre Sink #0. Puis tu notes le port. Chez moi c'est analog-output-speaker et analog-output-headphones.
Et puis pour passer de l'un à l'autre, tu tapes les commandes:

pactl set-sink-port 0 analog-output-speaker
pactl set-sink-port 0 analog-output-headphones

Hors ligne

#4 Le 24/12/2011, à 17:36

thereelneo

Re : [Resolu]Changer les periphériques "en un clic" ?

Merci de ton aide, ça à l'air d'être la bonne technique, mon matériel étant différent, il faut juste que je cherche un peu la dedans.
Je met résolu dès que j'arrive à tout faire fonctionner.

Edit:
Après recherche le problème est différent: dans ton cas il s'agissait de changer le port du "Sink" analogique, alors que moi je dois changer de l'utilisation du sink "analogique" au sink "numérique" et réciproquement.
Quoiqu'il en soit, je pense que la commande pactl est la solution, peut être avec suspend-sink .... Je n'ai pas le temps de travailler plus la dessus aujourd'hui, mais je suis toujours preneur si quelqu'un à une idée...

Dernière modification par thereelneo (Le 24/12/2011, à 17:43)

Hors ligne

#5 Le 26/12/2011, à 00:13

thereelneo

Re : [Resolu]Changer les periphériques "en un clic" ?

Le problème est résolu grâce à la commande

pactl move-sink-input

Merci à Manunu pour son aide.

En gros il fait trouver tous les "Sink Input" et les rediriger vers le "Sink" qui ou elle ne sont pas actuellement.

Je donne ici les scripts que j'ai fait (merci à mon père pour son aide sur awk), cependant ces scripts sont écrits pour ma configuration et n'ont jamais été testé ailleurs, si vous voulez les essayer sur vos ordinateurs c'est à vos risque et périls ....

Pour l'extraction des données utile voici le fichier sound.awk:

#
# Initialisation
#
BEGIN {
  s1=""
  s2=""
  ON=0
  i=1
}

#
#   Extractions des Sink disponibles
#
/^Sink #/ {
    if ( s1=="" ) s1=$2; else s2=$2
}

#
#   Lecture des numero de flux sonores
#
/^Sink Input/ {
  data[i++]=$3
  ON=1
}

#
#   Lecture du flux courant
#
/Sink: /{
    if( ON==1 ) s3=$2; ON=0
}

END {
    #
    #   Affichage au format:
    #   Sink1
    #   Sink2
    #   Sink courant
    #   Sink Inputs
    #
    printf("%s\n%s\n%s\n", s1, s2, s3);
    for ( j=1; j<i; j++ ) printf("%s\n",data[j])
    }

Et enfin le script a utiliser qui lance le fichier précédent (a condition que les deux fichiers soient dans le même dossier et que le script soit lancé depuis ce dossier)

#! /bin/bash

#
#   Ce script suppose qu'il existe deux sortie sonores, et redirige toutes
#   les flux sonores sur la sortie actuellement non utilisee 
#

#
#   Lecture de la configuration son et exctraction des
#   valeurs utiles
#
sh -c "pactl list | awk -f sound.awk | sed -e 's/#//' " > $$

#
# Lecture du fichier ligne par ligne
#
cpt=0
while read cour
do
    #
    #   Suppression des '#'
    #
    cour=`echo $cour | sed -e 's/#//'`
    cpt=$(( $cpt + 1 ))
    if [ $cpt -le 3 ]; then
        #
        # S[1] et S[2] sont les sink disponibles
        # S[3] est celui utilise actuellement
        #
        S[$cpt]=$cour
        #echo ${S[$cpt]}
        if [ $cpt = 3 ]; then
            #
            # S[3] devient le Sink a utiliser
            #
            if [ ${S[3]} = ${S[1]} ]; then
                S[3]=${S[2]}
            else
                S[3]=${S[1]}
            fi
        fi
    else
        #
        # On lit desormais les Sink Input, on les redirige
        # vers le sink choisit precedement
        #
        pactl move-sink-input $cour ${S[3]}
    fi
done <$$
rm $$

Hors ligne

#6 Le 26/12/2011, à 00:15

Manunu

Re : [Resolu]Changer les periphériques "en un clic" ?

Super et merci pour le script !

Hors ligne