我有两张声卡:一张 PCI 声卡和一张 USB 声卡。
我希望如果插入了 USB 卡,它将作为整个系统的默认设备,否则(如果未插入 USB 卡)将使用 PCI 卡。
我怎样才能做到这一点?
答案1
PulseAudio 将以这种方式透明地处理音频输出切换。只需插入 USB 设备,在系统的全局声音首选项或pavucontrol
所需应用程序的声音首选项中选择它,PulseAudio 就会按要求执行操作。
答案2
以下是我使用的 Python 脚本:
#!/usr/bin/env python
# This script monitors USB connections and when the audio device is connected
# makes it the default output device.
import dbus, gobject, os
from dbus.mainloop.glib import DBusGMainLoop
from subprocess import Popen, PIPE
PCI_DEVICE = 'alsa_output.pci-0000_00_1b.0.analog-stereo'
USB_DEVICE = 'alsa_output.usb-Logitech_Logitech_Z205-00-default.analog-stereo'
def set_default_sink(sink):
popen = Popen('pacmd', stdin = PIPE, stdout = PIPE)
popen.communicate('set-default-sink ' + sink)
def device_added(udi):
if udi.find('alsa') >= 0:
set_default_sink(USB_DEVICE)
def device_removed(udi):
if udi.find('alsa') >= 0:
set_default_sink(PCI_DEVICE)
DBusGMainLoop(set_as_default = True)
bus = dbus.SystemBus()
hal_manager = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
bus.add_signal_receiver(device_added, 'DeviceAdded',
'org.freedesktop.Hal.Manager', 'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
bus.add_signal_receiver(device_removed, 'DeviceRemoved',
'org.freedesktop.Hal.Manager', 'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
gobject.MainLoop().run()
接收器名称(PCI_DEVICE
用于内置扬声器和USB_DEVICE
USB 扬声器)特定于我的机器,因此您需要替换它们。您可以从中获取这些名称pacmd
-pulseaudio-utils
只需在提示符list-sinks
中输入pacmd
并找到您的设备名称(必须连接 USB 扬声器)。