Openbox

Openbox - 一個按鍵用 & 分隔多個命令

  • September 6, 2020

我正在嘗試配置 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 中執行命令元素的內容,而是嘗試直接執行它。

文件中<command>

一個字元串,它是要執行的命令,以及要傳遞給它的任何參數。“~”波浪號字元將擴展至您的主目錄,但除非將它們傳遞給 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>

引用自:https://unix.stackexchange.com/questions/307611