Autorandr 但適用於音頻設備?
我的 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 儲存庫
paswitch
:https ://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 預設將其連接到其舊源而不是新的預設源,除非其持久性功能已關閉。