Scorciatoia per alternare l'uscita stereo analogica e l'uscita audio HDMI


18

Per passare all'uscita audio HDMI (del monitor) e tornare alla normale uscita audio dal jack audio del sistema (per le cuffie, poiché il mio monitor non ha l'uscita audio), mi ritrovo ad aprire le preferenze audio e selezionare il canale giusto ogni volta. Esiste un modo per creare un pulsante di attivazione / disattivazione nel pannello o assegnare un tasto di scelta rapida per attivare / disattivare poiché eseguo il passaggio così spesso.

:aplay -l 
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

inserisci qui la descrizione dell'immagine


1
+1 Sarebbe fantastico se potessi passare alla corretta modalità di uscita del display HDMI e alla modalità audio in un solo tasto.
Kit Menke,

Cosa sarebbe ancora meglio se, quando rileva questo canale audio HDMI / Display Port, lo commuta automaticamente. Ecco a cosa serve l'attracco. Mi sembra di ricordare qualche codice di aggancio qualche tempo fa che cambierà la configurazione in base a determinati ID hardware (MAC). Qualcuno sa come si chiama di nuovo?
Elijah Lynn,

Risposte:


10

Con pulseaudio siamo in grado di selezionare il sink di output dalla riga di comando:

pacmd set-default-sink "SINKNAME"

Questo comando può essere utilizzato in un programma di avvio, in uno script o anche assegnato a una scorciatoia da tastiera per passare rapidamente da un lavandino all'altro. Sostituire "SINKNAME" con il nome o il numero del lavandino desiderato. Un elenco di sink noti con i loro numeri e nomi associati è dato dal comando:

pacmd list-sinks

Nota: la modifica del sink di output tramite l'interfaccia della riga di comando può avere effetto solo se la lettura del dispositivo di destinazione del flusso è disabilitata. Questo può essere fatto modificando la riga corrispondente in /etc/pulse/default.pa:

load-module module-stream-restore restore_device=false

In alternativa, potremmo eseguire pulseaudio per trasmettere contemporaneamente l'audio al dispositivo audio interno e al dispositivo hdmi eseguendo paprefs con l'opzione per aggiungere un dispositivo di uscita virtuale:

paprefs


2
pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.analog-stereo"e pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.hdmi-stereo"funziona solo dopo aver selezionato il profilo corrispondente in Preferenze audio. Se ho HDMI impostato ed eseguo il comando pacmd per stereo analogico, sto ottenendo l'errore Sink alsa_output.pci-0000_00_1b.0.analog-stereo does not exist.Ma se seleziono manualmente il profilo dalla GUI delle preferenze audio ed eseguo lo stesso comando, non ricevo l'errore. Quindi non aiuta a cambiare.
iJeeves,

@iJeeves: vedi modifica per l'aggiornamento.
Takkat,

Problema simile. Se eseguo il comando, lo visualizzerò visivamente nella GUI ma il suono non verrà reindirizzato. Devo attivarlo manualmente nella GUI affinché funzioni. Qualche idea?
Elijah Lynn,

1
@ElijahLynn: potresti anche dover spostare il flusso: askubuntu.com/questions/71863/…
Takkat,

@Takkat: Non l'ho ancora provato, ma sembra essere il problema esatto che stavo riscontrando. Grazie mille!
Elijah Lynn,

7

L'ho trovato molto fastidioso e ho scritto uno script per attivare l'output:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else 
        pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"        
fi

e quindi associato un tasto inutilizzato sulla mia tastiera per eseguirlo (vedi Come associare comandi personalizzati alle scorciatoie da tastiera? )


Anche se non hai effettuato l'accesso per 18 mesi, volevo solo farti sapere che questa è la risposta migliore IMO +1
WinEunuuchs2Unix

Come posso fare questo se devo passare tra due carte, non solo due profili di una carta?
Oebele,

2

Ancora un altro script Switcher lavello

testato su Ubuntu 16.04


Ma questo ti consente di cambiare solo l'audio dell'applicazione desiderata.

UTILIZZO: focalizzare l'applicazione che si desidera modificare il suo sink ed eseguire questo script. Questo è tutto!!!

Questo script rileva l'applicazione attiva, trova tutti gli audio in riproduzione e passa al successivo sink disponibile.

https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3

Spiegare la sceneggiatura

Dobbiamo trovare il PID dell'applicazione in primo piano

Ma prima abbiamo bisogno dello xid

xprop -root _NET_ACTIVE_WINDOW 

Quindi inserirlo qui $xidper ottenere il pid dell'applicazione

xprop -id $xid _NET_WM_PID

Ora dobbiamo trovare gli input del sink relativi a quel PID

Innanzitutto linearizziamo l'output del comando pacmd list-sink-inputsper elencare un input di sink per riga, mostrando il suo indice, sink e pid sulla stessa riga

pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2

analizziamolo passo dopo passo:

grep -E 'index:|sink:|process.idmantieni solo le righe che contengono index:, sink:oprocess.id

tr '\n' ' ' unisce tutte le linee

tr -d '"'rimuove tutti i "personaggi. Necessario per ottenere il pid senza virgolette

sed -e 's/index:/\n/g'sostituisce tutte le index:occorrenze con un nuovo carattere di riga\n

tail -n +2 rimuove la prima riga perché è vuota

E il risultato è qualcosa del genere:

  180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
  181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
  182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

Analizziamo una riga per capire cosa significa:

  # 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

182è l'indice di input del sink, 0è l'indice di sink e 13752alla fine è il pid dell'applicazione di appartenenza

Quindi ripetiamo ogni riga

... | while IFS= read -r line || [ -n "$line" ]; do
  sink_input_pid=$(echo $line | awk '{print $NF}')

E infine filtra solo il pid dell'input del sink che corrisponde al pid dell'app focalizzata

  if [ $sink_input_pid = $app_pid ]; then

Estrazione dei dati

Con awkpossiamo ottenere gli elementi di cui abbiamo bisogno

sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')

Ottieni il numero di lavandini, per sapere quando la rotazione dei lavandini dovrebbe ricominciare da 0.

sink_list_size=${#sink_list_array[@]}

Per trovare il prossimo sink, dobbiamo scorrere l'elenco dei sink, per sapere quale corrisponde a current_sink_index e per conoscere l'indice del sink successivo.

i=0
for sink in "${sink_list_array[@]}"; do
  i=$((($i+1)%sink_list_size))  # i++ mod(#sinks)
  if [ $sink = $current_sink_index ]; then
    next_sink_index=${sink_list_array[i]}
    break
  fi
done

E infine, spostiamo l'input sink per giocare in next_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Nota su Ubuntu 16.04:

Quando si configura il tasto di scelta rapida, non sono riuscito a farlo funzionare con il gestore dei collegamenti di Ubuntu. Quindi ho dovuto installare compizconfig-settings-manager

sudo apt-get install compizconfig-settings-manager

+1 per un'ottima prima risposta come nuovo utente. Poiché la domanda originale era per Ubuntu 11.04, dovresti sottolineare con quale versione è stata testata.
WinEunuuchs2Unix

@ WinEunuuchs2Unix Wow! grazie :). Ho aggiunto la versione di Ubuntu sotto il titolo.
Madacol,


1

Poiché nello screenshot è visibile solo una scheda audio, penso che l' uscita di questa scheda audio debba essere commutata.

Ad esempio: ho un Notebook con una scheda audio integrata, ma ha un'uscita digitale (SPDIF) quando è collegato.

Quindi quello che volevo fare è cambiare l'uscita attiva o "Profilo" in pulseaudio.

Ho trovato i comandi che fanno esattamente questo:

pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo

Quello che ho fatto per ottenere i nomi corretti per la mia impostazione di uscita desiderata - qui, uscita digitale, ma ingresso analogico (micro) - è stato:

pacmd list | grep output

1

Ho cercato di trovare una soluzione anche a questo problema. A partire da Ubuntu 11.04 questo non sembra essere possibile direttamente, ho solo trovato questa guida per aggiungere sia HDMI che Analog come uscite separate, quindi pacmd ora mostra 3 sink. Quindi è possibile passare da un lavandino all'altro usando i comandi sopra. ( vedi anche )

Ma a quanto pare Ubuntu 11.11 otterrà un PulseAudio con sistema di rilevamento jack. Secondo il sito Web di seguito, David Henningsson ha codificato un rilevamento tramite udev, quindi l'audio a impulsi viene automaticamente commutato sull'ultima uscita aggiunta, incluso il passaggio tra diversi profili della stessa scheda audio (come nel caso della tua e della mia configurazione). (vedi qui )

Quindi spero che funzioni, quando proverò la versione finale venerdì prossimo.


1

Basato su molte delle risposte precedenti, ho scritto uno script che imposta il sink di riproduzione alternando tra quelli disponibili.

Il modo migliore per usarlo è creare una scorciatoia da tastiera per eseguirlo, quindi ogni volta che si preme quella combinazione di tasti l'audio viene reindirizzato al successivo sink disponibile.

Il codice è disponibile qui: https://gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c


0

Nel mio caso le opzioni analogiche non erano nell'elenco. Installa pavucontrol: sudo apt install pavucontrol

Potrebbe risolvere il problema, avviando l'applicazione:

  1. Avvia l'app tramite terminale, inserendo: pavucontrol(invio)
  2. Vai alla scheda "Configurazione".
  3. Selezionare il profilo di uscita stereo analogico su Intern Sound

inserisci qui la descrizione dell'immagine

Ora potrei qui suonare e selezionare diversi profili (sotto Linux Mint):

inserisci qui la descrizione dell'immagine


0

Un'alternativa a Sound Switcher Indicator (che richiede l'aggiunta di un PPA) è quella di creare un comando (o uno script) e chiamarlo con un collegamento:

Nel mio caso era il hdmi-stereo-extra1+inputprofilo, quindi in una riga sarebbe:

[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
     pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
     pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

È possibile utilizzare un collegamento personalizzato ( gnome-control-center keyboard) per eseguirlo con bash -c(avviserà l'utente in caso di conflitto con altri collegamenti):

immagine dello schermo

immagine dello schermo

Io uso:

  • Super + Alt + o: Attiva / disattiva l'uscita tra cuffie e HDMI.
  • Super + Alt + Up: Vol Up
  • Super + Alt + Down: Vol Down

Inoltre puoi aggiungerne uno aliasal tuo .bashrc.

Testato su Ubuntu 16.04 e 18.04


Se non si desidera superare il comportamento di uno script, ho apportato alcune modifiche in base alla risposta @ user829996:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
    pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile

0

Esiste un modo per creare un pulsante di attivazione / disattivazione nel pannello

Ho scritto un applet indicatore che consente di cambiare l'uscita audio.


Benvenuto in Ask Ubuntu! Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Warren Hill,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.