Openbox를 구성하려고 합니다.rc.xml파일을 클릭 한 번으로 내 사운드 카드를 작동시킬 수 있습니다. 시스템에 사운드 카드가 여러 개 있어서 동시에 여러 개의 수신기를 작동해야 하므로 여러 명령을 로 구분하여 사용합니다.&이와 같이:
<keybind key="XF86AudioRaiseVolumen">
<action name="Execute">
<command>pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.multichannel-output +5% & pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo +5% & pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.analog-surround-40 +5%</command>
</action>
</keybind>
어떤 이유로 rc.xml에서는 작동하지 않습니다. 누가 날 도울 수 있죠?
답변1
명령을 쉘 스크립트에 넣고 스크립트를 실행 가능하게 만든 다음 스크립트를 명령으로 사용해야 합니다.
<command>/usr/local/bin/volume_up</command>
콘텐츠/usr/local/bin/volume_up
#!/bin/sh
pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.multichannel-output +5% &
pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo +5% &
pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.analog-surround-40 +5%
그리고 실행 가능하게 만드세요
chmod +x /usr/local/bin/volume_up
그 이유는 Openbox가 쉘에서 command 요소의 내용을 실행하는 대신 직접 실행하려고 하기 때문입니다.
실행할 명령과 이에 전달될 인수인 문자열입니다. "~" 물결표 문자는 홈 디렉토리로 확장되지만 sh 명령에 전달되지 않는 한 다른 쉘 확장이나 스크립트 구문을 명령에 사용할 수 없습니다. 또한 올바른 구문 분석을 위해 & 문자를 &로 작성해야 합니다. 예, 더 이상 사용되지 않는 이름입니다.
또 다른 이점은 볼륨을 낮추기 위해 스크립트를 다시 작성할 수 있다는 것입니다.
#!/bin/sh
change_volume() {
pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.multichannel-output "$1"
pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo "$1"
pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.analog-surround-40 "$1"
}
main() {
case "$1" in
up)
change_volume +5%
;;
down)
change_volume -5%
;;
*)
printf "volume <command>\n"
printf " up \n"
printf " down\n"
esac
}
main "$@"
아래에 저장되어 /usr/local/bin/volume
이렇게 사용됩니다.
<command>/usr/local/bin/volume up</command>
<command>/usr/local/bin/volume down</command>
답변2
순서와 이 모든 것이 거의 동시에 실행된다는 사실에 신경 쓰지 않는다면 다음을 수행할 수 있습니다.
<keybind key="XF86AudioRaiseVolumen">
<action name="Execute">
<command>pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.multichannel-output +5%</command>
</action>
<action name="Execute">
<command>pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo +5%</command>
</action>
<action name="Execute">
<command>pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.analog-surround-40 +5%</command>
</action>
</keybind>
답변3
모든 구성 요소의 볼륨을 늘리거나 줄이는 바인딩을 만들었으므로 원하는 구성 요소가 영향을 받는지 확인할 수 있고, 무언가를 비활성화하려면 음소거하면 됩니다.
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<command>bash -c "pactl list | grep -oP 'Sink #\K([0-9]+)' | while read -r i ; do pactl -- set-sink-volume $i +3% ; done"</command>
</action>
</keybind>
<!-- decrease volume -->
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<command>bash -c "pactl list | grep -oP 'Sink #\K([0-9]+)' | while read -r i ; do pactl -- set-sink-volume $i -3% ; done"</command>
</action>
</keybind>
답변4
귀하의 사용 사례에 대해 이것이 더 깨끗하고 짧을 것이라고 생각합니다.
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<command>sh -c "pactl list sinks | grep 'Sink #' | cut -d'#' -f2 | xargs -I@ pactl -- set-sink-volume @ -2000"</command>
</action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<command>sh -c "pactl list sinks | grep 'Sink #' | cut -d'#' -f2 | xargs -I@ pactl -- set-sink-volume @ +2000"</command>
</action>
</keybind>
모든 싱크와 각각의 증가/감소된 볼륨이 나열됩니다. 예를 들어 잭이나 Bluetooth 스피커가 연결되어 있으면 둘 이상이 있을 것입니다. 이것이 바로 제가 사용하고 있는 설정입니다.