만들고 싶은 스크립트에 대한 파이프라인의 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"
하지만
- 일부는 스피커와 마이크로 표시됩니까? 헤드폰인거 같은데...
- 이것은 펄스오디오 장치이고 문제를 피하고 싶기 때문에 파이프와이어 장치 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('*', '')