Openbox -& を使用して、1 つのキーストロークで複数のコマンドを区切ります。

Openbox -& を使用して、1 つのキーストロークで複数のコマンドを区切ります。

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要素の内容を実行するのではなく、直接実行しようとするためです。

~から出荷書類ビーチ<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>

おすすめ記事