Openbox
Openbox - 一個按鍵用 & 分隔多個命令
我正在嘗試配置 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 中不起作用。誰能幫我?
您需要將命令放入 shell 腳本,使該腳本可執行,然後將此腳本用作命令。
<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 沒有在 shell 中執行命令元素的內容,而是嘗試直接執行它。
一個字元串,它是要執行的命令,以及要傳遞給它的任何參數。“~”波浪號字元將擴展至您的主目錄,但除非將它們傳遞給 sh 命令,否則命令中不得使用其他 shell 擴展或腳本語法。此外,& 字元必須寫為 & 才能正確解析。是不推薦使用的名稱。
另一個好處是您可以重寫腳本以降低音量
#!/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>