Usb

Autorandr 但適用於音頻設備?

  • August 16, 2018

我的 ThinkPad T450s 執行 Manjaro。作為一名 Scrum Master,我經常在有兩個外部顯示器的辦公桌、沒有顯示器的會議室和有一個外部顯示器的會議室之間移動。我已經安裝autorandr,以便筆記型電腦根據可用硬體自動設置我的工作區。我非常喜歡!

但我也喜歡類似的音頻解決方案。在我的辦公桌前,我希望“輸入的備份設備是我的藍牙 Jabra 耳機,輸出是我的“同時輸出到所有設備”的偽設備,但在會議室中,我通常會連接 USB(Jabra 或Logitech)會議室免提設備——然後我需要進入音量控制面板並設置預設設備。

如果我可以讓整個事情自動化,以便新連接的設備會被自動選擇為備份輸入/輸出,那就太好了!

警告:要贏得賞金,答案必須描述一個在插入/拔出硬體時*自動工作的解決方案。*每當執行時觸發腳本執行是可以接受的autorandr(但autorandr它本身沒有這樣的滑流能力)。

音量控制面板

**編輯:**受@telcoM 回答的啟發,我現在可以包含我的系統辨識的源和接收器列表(除了我目前未連接到的會議室中的源和接收器):

$ pactl list | grep -B 2 'ame:' | grep -A 2 'Sink #'
Sink #0
   State: SUSPENDED
   Name: alsa_output.pci-0000_00_1b.0.analog-stereo
--
Sink #1
   State: SUSPENDED
   Name: combined
--
Sink #43
   State: SUSPENDED
   Name: alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
--
Sink #93
   State: SUSPENDED
   Name: alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1

並且

$ pactl list | grep -B 2 'ame:' | grep -A 2 'Source #'
Source #0
   State: SUSPENDED
   Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
--
Source #1
   State: SUSPENDED
   Name: alsa_input.pci-0000_00_1b.0.analog-stereo
--
Source #2
   State: SUSPENDED
   Name: combined.monitor
--
Source #46
   State: SUSPENDED
   Name: alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono.monitor
--
Source #47
   State: SUSPENDED
   Name: alsa_input.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
--
Source #97
   State: SUSPENDED
   Name: alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1.monitor

**哦哦!**我找到了正確的命令來獲取輸入和輸出的名稱!這主要是從this answer到另一個問題,但真正歸功於telcoM指向我pactl

$ pactl list short sources
0   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
1   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
2   combined.monitor    module-combine-sink.c   s16le 2ch 44100Hz   RUNNING
144 alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono.monitor    module-alsa-card.c  s16le 1ch 16000Hz   RUNNING
145 alsa_input.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono module-alsa-card.c  s16le 1ch 16000Hz   RUNNING
152 alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1.monitor module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

$ pactl list short sinks
0   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
1   combined    module-combine-sink.c   s16le 2ch 44100Hz   RUNNING
136 alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono    module-alsa-card.c  s16le 1ch 16000Hz   RUNNING
143 alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1 module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

這允許我設置來源:

$ pactl set-default-source alsa_input.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
$ pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo

還有水槽:

$ pactl set-default-sink alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
$ pactl set-default-sink combined

這些命令,然後,我可以放入“鉤子腳本autorandr來觸發。我只需要在影片線之前連接 USB 音頻設備,一切都會很棒!

預設情況下,Pulseaudio 會記住每個播放源與哪個輸出設備相關聯,輸入設備和錄音軟體也是如此。這是 vanilla Pulseaudio 設備關聯的主要來源。

僅當例如回放源沒有先前關聯的記錄或先前關聯的設備不再可用時,才使用回退設備。

至少 KDE 有一個多媒體設置對話框,您可以使用它來設置音頻輸入/輸出設備的優先順序,分別為每種類型的音頻輸入/輸出(例如,通信與音頻或影片播放/錄製)。這似乎修改了 Pulseaudio 的行為。

此部落格和提到的paswitch實用程序可能對您有用:

https://www.tablix.org/~avian/blog/archives/2012/06/switching_pulseaudio_output_device/

Git 儲存庫paswitchhttps ://www.tablix.org/~avian/git/paswitch.git

我之前有一個用於此目的的腳本,但paswitch更好的是,除了切換預設/備用輸出之外,它還將活動和先前記住的源切換到新輸出。不幸的是,它只處理輸出端。

要切換已經開始使用特定麥克風的活動客戶端,您需要執行以下操作:

pacmd set-default-source "$SOURCEID"
if ! pacmd list-source-outputs | head -1 | grep -q "^0 source output"
then
   # active input clients, switch them to new mic
   for idx in $(pacmd list-source-outputs | awk '/index:/{print $2;}')
   do
       # sources include monitor sources that cannot be moved
       pacmd move-source-output $idx $SOURCEID >/dev/null
   done
fi

這首先將預設麥克風更改為 中指定的麥克風$SOURCEID,然後將所有活動的應用程序移至此新麥克風。

但是,如果應用程序在使用不同的音頻源設備之前執行,並且該源在系統上仍然可用,則 Pulseaudio 預設將其連接到其舊源而不是新的預設源,除非其持久性功能已關閉。

引用自:https://unix.stackexchange.com/questions/460996