web-dev-qa-db-ja.com

条件付きで機能を代替するショートカットを設定するにはどうすればよいですか?

システムサウンドをアナログ出力とHDMI出力に切り替えることができるように、独自のホットキーを設定したいと思います。これどうやってするの?

この動作は、メディアを交互に再生および一時停止するplayショートカット(org.gnome.settings-daemon.plugins.media-keysから)で確認できます。

私は答えを見つけることができました ここ サウンド出力を設定するコマンドはpactl set-card-profile 0 output:[card-profile]であること

4
artu-hnrq

DK Bose および vanadium が示唆するトピックを読み、bashスクリプトおよび Linux PulseAudioサウンドサーバー について学習するためにさらに調査を行った1つの解決策を思い付きました:

次のスクリプトをファイル(できれば_/usr/local/bin/_で保存 here )に保存し、実行可能としてマークし(_chmod +x_を実行して)、割り当てます。キーボードショートカットに(オプションで説明されているように here )。

_#!/bin/bash
sound_output=$(pacmd list-cards | grep "active")

if [[ $sound_output = *"analog-stereo"* ]]; then
  sound_output=hdmi-stereo
else
  sound_output=analog-stereo
fi

pactl set-card-profile 0 output:"$sound_output"
echo -e "PulseAudio sound server output set to $sound_output"
_

説明:

  • _#!/bin/bash_は、このスクリプトのインタープリターがbashであることを保証し、[[]]などの拡張構文を有効にします。
  • 引用 ここ のように、構文$( )は「コマンド置換」です。これはコマンドを実行し、その出力を使用してラインアクションを構成します。このように、_pacmd list-cards | grep "active"_の戻り値を_sound_output_変数に保存します。
  • 説明したように、 ここ のように、条件で_*_を使用すると、部分文字列チェックになります。
  • 答えは here ですが、_pactl set-card-profile 0 output: [card-profile]_は、必要に応じてサウンドサーバーの出力を切り替えるコマンドです。
1
artu-hnrq