Analog Stereo çıkış ve HDMI ses çıkışı arasında geçiş yapmak için kısayol


18

HDMI ses çıkışına (monitörün) geçmek ve sistem ses jakından normal ses çıkışına geri dönmek için (monitörlerimde ses çıkışı olmadığı için kulaklıklar için) kendimi her zaman ses tercihlerini açarken ve doğru kanalı seçtiğimde buluyorum. Panelde bir açma / kapatma düğmesi oluşturabilir veya geçişi sık sık yaptığımdan beri geçiş yapmak için bazı kısayol tuşları atayabilir miyim?

: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

resim açıklamasını buraya girin


1
+1 Tek bir tuşa basarak doğru HDMI ekran çıkış moduna ve ses moduna geçebilirsem harika olurdu.
Kit Menke

Daha iyi olan şey, bu HDMI / Display Port ses kanalını algıladığında otomatik olarak değiştirmesidir. Yanaşma budur. Bir süre önce belirli donanım kimliklerine (MAC) göre yapılandırmayı değiştirecek bazı yerleştirme kodunu hatırlıyorum. Buna ne dendiğini bilen var mı?
Elijah Lynn

Yanıtlar:


10

Pulseaudio ile komut satırından çıkış havuzunu seçebiliyoruz:

pacmd set-default-sink "SINKNAME"

Bu komut bir başlatıcıda, komut dosyasında kullanılabilir ve hatta farklı lavabolar arasında hızlı geçiş için bir klavye kısayoluna atanabilir. Lütfen "SINKNAME" yerine istediğiniz lavabonun adını veya numarasını girin. İlişkili sayıları ve adları ile bilinen lavaboların bir listesi komut tarafından verilir:

pacmd list-sinks

Not: Çıkış havuzunu komut satırı arabirimi aracılığıyla değiştirmek yalnızca akış hedef cihazı okuması devre dışı bırakıldığında etkili olabilir. Bu, ilgili satırı şu şekilde düzenleyerek yapılabilir /etc/pulse/default.pa:

load-module module-stream-restore restore_device=false

Alternatif biz iç ses cihazına ve çalıştırarak hdmi-cihaza aynı anda ses çıkışı pulseaudio çalıştırabilir paprefs sanal çıkış aygıtı ekleme seçeneği ile:

paprefs


2
pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.analog-stereo"ve pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.hdmi-stereo"yalnızca Ses Tercihleri'nde ilgili profili seçtikten sonra çalışır. HDMI ayarlıysam ve analog stereo için pacmd komutunu çalıştırırsam, eror alıyorum Sink alsa_output.pci-0000_00_1b.0.analog-stereo does not exist.Ama Ses Tercihleri ​​GUI'sinden profili manuel olarak seçersem ve aynı komutu çalıştırırsam, hatayı almıyorum. Bu yüzden geçişe yardımcı olmuyor.
iJeeves

@ iJeeves: güncelleme için düzenlemeye bakın.
Takkat

Benzer bir sorun. Komutu çalıştırırsam, görsel olarak GUI'de değiştirir, ancak ses yeniden yönlendirmez. Çalışması için GUI'de manuel olarak değiştirmem gerekiyor. Herhangi bir fikir?
Elijah Lynn

1
@ElijahLynn: Akışı da taşımanız gerekebilir: askubuntu.com/questions/71863/…
Takkat

@Takkat: Henüz denemedim ama tam olarak yaşadığım sorun gibi görünüyor. Çok teşekkürler!
Elijah Lynn

7

Bu çok can sıkıcı buldum ve çıktı geçiş yapmak için bir senaryo yazdı:

#!/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

ve daha sonra kullanmak için klavyemde kullanılmayan bir tuşu bağladım (bkz. Özel komutlar klavye kısayollarına nasıl bağlanır? )


18 ay içinde oturum
açmamış olsanız da

Yalnızca bir kartın iki profili değil, iki kart arasında geçiş yapmam gerekirse bunu nasıl yapabilirim?
Oebele

2

Yine Başka Bir Evye Değiştirici Komut Dosyası

Ubuntu 16.04'te test edildi


Ancak bu, yalnızca istediğiniz uygulamanın sesini değiştirmenizi sağlar.

KULLANIM: Lavabosunu değiştirmek istediğiniz uygulamaya odaklanın ve bu komut dosyasını çalıştırın. Bu kadar!!!

Bu komut dosyası odakta olan uygulamayı algılar, ondan çalınan tüm sesleri bulur ve bunları bir sonraki kullanılabilir lavaboya geçirir.

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

Komut dosyasını açıklama

Uygulamanın PID'sini odakta bulmamız gerekiyor

Ama önce xid'e ihtiyacımız var

xprop -root _NET_ACTIVE_WINDOW 

Sonra $xiduygulama pid almak için buraya yerleştirin

xprop -id $xid _NET_WM_PID

Şimdi bu PID ile ilgili lavabo girişlerini bulmamız gerekiyor

İlk önce pacmd list-sink-inputsher satıra bir lavabo girişi listelemek için komutun çıktısını doğrusallaştıralım , aynı satırda indeksini, batmasını ve pid'ini gösterelim

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

hadi adım adım analiz edelim:

grep -E 'index:|sink:|process.idSadece içeren satırları tutmak index:, sink:ya daprocess.id

tr '\n' ' ' tüm hatlara katılır

tr -d '"'tüm "karakterleri kaldırır . Teklifi tırnak işaretleri olmadan almak için gerekli

sed -e 's/index:/\n/g'tüm index:tekrarlamaları yeni bir satır karakteriyle değiştirir\n

tail -n +2 boş olduğu için ilk satırı kaldırır

Ve sonuç şöyle bir şeydir:

  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

Bunun ne anlama geldiğini anlamak için bir satırı analiz edelim:

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

182lavabo-giriş indeksi, 0lavabo indeksi ve 13752sonunda ait uygulamanın pid'i

Sonra her satırda tekrarlıyoruz

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

Ve son olarak yalnızca odaklanan uygulamanın pidine uyan lavabo girişinin pid'ini filtreleyin

  if [ $sink_input_pid = $app_pid ]; then

Veri ayıklanıyor

İle awkbiz unsurları alabilirsiniz ihtiyacımız

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

Lavabo dönüşünün 0'dan ne zaman yeniden başlaması gerektiğini bilmek için çok sayıda lavabo alın.

sink_list_size=${#sink_list_array[@]}

Bir sonraki lavaboyu bulmak için, lavaboların listesini tekrar etmeliyiz, hangisinin current_sink_index ile eşleştiğini ve bir sonraki lavabonun dizinini bilmeliyiz.

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

Ve son olarak, next_sink_index'te oynamak için lavabo girişini taşıyoruz

pacmd move-sink-input $sink_input_index $next_sink_index

Ubuntu 16.04 ile ilgili not:

Kısayol tuşunu yapılandırırken, ubuntu'nun kısayol yöneticisiyle çalışmasını sağlayamadım. Bu yüzden compizconfig-settings-manager uygulamasını kurmak zorundaydım

sudo apt-get install compizconfig-settings-manager

Yeni kullanıcı olarak harika ilk cevap için +1. Orijinal soru Ubuntu 11.04 için olduğu için hangi sürümün test edildiğini belirtmelisiniz.
WinEunuuchs2Unix

@ WinEunuuchs2Unix Vay! teşekkür ederim :). Ubuntu'nun versiyonunu başlığın altına ekledim.
Madacol


1

Ekran görüntüsünde yalnızca bir ses kartı olduğundan, bu ses kartının çıkışının değiştirilmesi gerektiğini düşünüyorum.

Örneğin: Bir adet entegre ses kartı olan bir Dizüstü Bilgisayarım var, ancak yerleştirildiğinde dijital çıkışa (SPDIF) sahip.

Yani yapmak istediğim, pulseaudio'da aktif çıkışı veya "Profile" ı değiştirmek.

Tam olarak bunu yapan komutları buldum:

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

İstediğim çıkış ayarı için doğru adları almak için ne yaptım - burada, dijital çıkış, ancak analog (mikro) giriş -:

pacmd list | grep output

1

Ben de bu soruna bir çözüm bulmaya çalışıyorum. Ubuntu 11.04'ten itibaren bu doğrudan mümkün görünmüyor, bu kılavuzu sadece hem HDMI hem de Analog'u ayrı çıkışlar olarak eklemek için buldum, bu yüzden pacmd şimdi 3 lavabo gösteriyor. Daha sonra yukarıdaki komutları kullanarak lavabolar arasında geçiş yapmak mümkündür. ( ayrıca bakınız )

Ama görünüşe göre Ubuntu 11.11, jak algılama sistemine sahip bir PulseAudio alacak. Aşağıdaki web sitesine göre, David Henningsson udev aracılığıyla bir algılama kodladı, böylece darbe ses otomatik olarak aynı ses kartının farklı profilleri arasında geçiş yapmak da dahil olmak üzere son eklenen çıkışa geçer (sizin ve kurulumumda olduğu gibi). ( buraya bakın )

Önümüzdeki Cuma son sürümünü denediğimde bunun işe yarayacağını umuyorum.


1

Önceki cevapların çoğuna dayanarak, çalma havuzunu kullanılabilirler arasında dönüşümlü olarak ayarlayan bir komut dosyası yazdım.

Kullanmanın en iyi yolu, çalıştırmak için bir klavye kısayolu oluşturmaktır, bu nedenle bu tuş kombinasyonuna her bastığınızda ses bir sonraki kullanılabilir lavaboya yönlendirilir.

Kod burada mevcuttur: https://gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c


0

Benim durumumda listede olmayan analog seçenekler. Pavucontrol'ü kurun: sudo apt install pavucontrol

Uygulamayı başlatarak sorun çözülebilir:

  1. Aşağıdakileri girerek uygulamayı terminal yoluyla başlatın: pavucontrol(enter)
  2. 'Yapılandırma' sekmesine gidin.
  3. Intern Sound'da Analog stereo çıkış profilini seçin

resim açıklamasını buraya girin

Şimdi burada ses ve farklı profiller seçebilirim (Linux Mint altında):

resim açıklamasını buraya girin


0

Ses Değiştirici Göstergesi'ne (PPA eklemeyi gerektiren) bir alternatif, bir komut (veya komut dosyası) oluşturmak ve bir kısayolla çağırmaktır:

Benim durumumda hdmi-stereo-extra1+inputprofil, yani bir satırda olurdu:

[[ $(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"

Bir kullanabilirsiniz özel bir kısayol ( gnome-control-center keyboardile yürütmek için) bash -c(diğer kısayol ile herhangi bir çelişki olması durumunda sizi uyarır):

ekran görüntüsü

ekran görüntüsü

Kullanırım:

  • Super + Alt + o: Çıkışı kulaklıklar ve HDMI arasında değiştirin.
  • Super + Alt + Up: Sesi yükselt
  • Super + Alt + Down: Vol Aşağı

Ayrıca bir de ekleyebilirsiniz aliasadresinden Müşteri .bashrc.

Ubuntu 16.04 ve 18.04'te test edildi


Bir komut dosyasındaki davranışın üstünde değilseniz, @ user829996 yanıtına göre bazı değişiklikler yaptım:

#!/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

Panelde bir geçiş düğmesi oluşturmanın herhangi bir yolu var mı

Ses çıkışını değiştirmenizi sağlayan bir gösterge uygulaması yazdım .


Ubuntu'ya Sor hoş geldiniz! Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
Warren Hill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.