pw-top의 정적(스냅샷)을 얻는 방법은 무엇입니까?

pw-top의 정적(스냅샷)을 얻는 방법은 무엇입니까?

만들고 싶은 스크립트에 대한 파이프라인의 pw-top에서 정적 출력을 가져와야 합니다. 배관 설비 목록만 있으면 됩니다.

예를 들어, 나는 달리고 pw-top | grep output나서 뭔가를 하고 싶다. 기본적으로 파이프 장치 및 해당 ID 목록을 얻고 싶습니다.

내가 원하는 출력 유형(스피커 및 헤드폰에만 해당):

<device name> <id>
<device name> <id>
<device name> <id>

나는 다음을 시도했다:

[aggam@aggam-archlinux ~]$ pactl list cards | grep -E 'port.type|Name|Card'
Card #39
    Name: alsa_card.pci-0000_01_00.1
                port.type = "hdmi"
                port.type = "hdmi"
                port.type = "hdmi"
                port.type = "hdmi"
                port.type = "hdmi"
                port.type = "hdmi"
Card #40
    Name: alsa_card.usb-0c76_USB_PnP_Audio_Device-00
                port.type = "mic"
Card #41
    Name: alsa_card.pci-0000_00_1f.3
                port.type = "mic"
                port.type = "mic"
                port.type = "line"
                port.type = "line"
                port.type = "headphones"
                port.type = "spdif"

하지만

  1. 일부는 스피커와 마이크로 표시됩니까? 헤드폰인거 같은데...
  2. 이것은 펄스오디오 장치이고 문제를 피하고 싶기 때문에 파이프와이어 장치 ID를 원합니다.

편집 2: 내 비밀번호:

S   ID  QUANT   RATE    WAIT    BUSY   W/Q   B/Q  ERR FORMAT           NAME
S   28      0      0    ---     ---   ---   ---     0                  Dummy-Driver
S   29      0      0    ---     ---   ---   ---     0                  Freewheel-Driver
S   36      0      0    ---     ---   ---   ---     0                  Midi-Bridge
S   42      0      0    ---     ---   ---   ---     0                  alsa_output.pci-0000_01_00.1.hdmi-stereo-extra3
S   43      0      0    ---     ---   ---   ---     0                  alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback
S   44      0      0    ---     ---   ---   ---     0                  alsa_output.pci-0000_00_1f.3.analog-stereo
S   45      0      0    ---     ---   ---   ---     0                  alsa_input.pci-0000_00_1f.3.analog-stereo
S   71      0      0    ---     ---   ---   ---     0                  alsa_output.usb-KURZWEIL_MPS-Piano-00.analog-stereo
S   69      0      0    ---     ---   ---   ---     0                  alsa_input.usb-KURZWEIL_MPS-Piano-00.analog-stereo
I   67      0      0   0.0us   0.0us  0.00  0.00    0    F32LE 2 48000 Firefox

피아노의 출력은 71입니다. 출력은 pactl list short sinks다음과 같습니다.

42  alsa_output.pci-0000_01_00.1.hdmi-stereo-extra3 PipeWire    s32le 2ch 48000Hz   SUSPENDED
44  alsa_output.pci-0000_00_1f.3.analog-stereo  PipeWire    s32le 2ch 48000Hz   SUSPENDED
401 alsa_output.usb-KURZWEIL_MPS-Piano-00.analog-stereo PipeWire    s16le 2ch 48000Hz   SUSPENDED

피아노가 갑자기 401로 바뀌니 주의하세요...

답변1

나는 그것을 생각했다! 쉘 명령을 사용하는 대신 전체 Python 스크립트를 만들었습니다. 이 스크립트는 모든 장치를 가져오고 사전을 생성한 다음 dmenu/bemenu를 사용하여 원하는 장치를 선택할 수 있도록 합니다.

스크립트는 여기에서 찾을 수 있습니다.내 github에이지만 코드의 이 부분은 다음과 같습니다.

sp = subprocess.run(['wpctl', 'status'], stdout=subprocess.PIPE).stdout.decode('utf-8')\
        .split("Sinks")[1].split('├─')[0]
newsp = []

for line in sp.split('\n'):
    if '.' in line:
        newsp.append(line.replace(' ', '')[1:])

devices = {}  # name: id
for line in newsp:
    line = line.split('.')
    devices[line[1].split('[vol')[0]] = line[0].replace('*', '')

관련 정보