1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[mac改造]macOSで通知音(アラート音量)だけをキーボードで増減する! Karabinerの“音量キーはfromにできない”罠と回避策(fn+F11/F12)

1
Posted at

はじめに

  • macOSの「通知音」の正体は Alert volume(警告音量) で、メインの出力音量とは独立に osascript -e 'set volume alert volume N'(N=0〜100)で操作できる。
  • これを Karabiner-Elements で ⌃(Control)+F11 / ⌃+F12 に割り当てれば、音楽・動画などのメイン音量はそのままで 通知音だけ を増減できる。素の F11/F12 は従来どおりメイン音量。
  • 落とし穴①: from の modifiers は mandatory にする。optional:["any"] だけだと 修飾なしの素の F11/F12 まで横取りして、通常の音量調整が壊れる。
  • 落とし穴②: F11/F12 が何を出すかはキーボード次第。EventViewer で確認し、consumer_key_code(メディアキー)しか出ないキーボードでは Karabiner で remap できない(Hammerspoon が要る)。

thumbnail.png

環境

  • MacBook Pro(Apple Silicon / M2 Max)
  • macOS 26.5(Tahoe)
  • Karabiner-Elements 16.0.0

やりたかったこと

通知音が大きすぎ/小さすぎるとき、メインの音量(音楽・動画)はそのままで、通知音だけをキーボードでサッと上げ下げしたい。標準の F11/F12(音量キー)はメイン音量を動かすので、Control を併用したときだけ通知音を変えたい。

Karabiner-Elements とは

Karabiner-Elements は macOS 用のキーボードカスタマイズツール(無料・オープンソース)。単純なキー入れ替え(Simple Modifications)に加え、「特定アプリのときだけ」「修飾キーとの組み合わせのときだけ」といった条件付きの高度な変換(Complex Modifications)を JSON で定義できる。OSの低レイヤ(仮想HIDキーボードドライバ)で動くため、ほぼ全てのキーを横取り・再割り当てできるのが特徴。本記事の「⌃+F11/F12 で通知音量を変える」も、この Complex Modifications の shell_command(キー入力をトリガにシェルコマンドを実行する機能)で実現している。

インストール

brew install --cask karabiner-elements

または公式サイトからダウンロード。初回起動時に システム機能拡張(ドライバ)の許可 と 「入力監視(Input Monitoring)」権限 の付与を求められるので、System Settings で許可する(これをしないとキー入力を検知できない)。

設定の実体は ~/.config/karabiner/karabiner.json。GUIから編集できるほか、~/.config/karabiner/assets/complex_modifications/*.json に置いたルールを GUI の「Complex Modifications」タブで有効化できる。本記事はこの仕組みを使う。

前提: 「通知音」の正体は Alert volume

macOSのサウンドには、出力音量(output volume)とは別に Alert volume(警告音量) があり、通知音・効果音はこちらに従う(出力音量に対して相対的に鳴る)。AppleScriptから独立して操作できる。

# 現在の音量設定(output / input / alert / mute)
osascript -e 'get volume settings'
# => output volume:31, input volume:44, alert volume:29, output muted:false

# 通知音量だけを 0〜100 で設定
osascript -e 'set volume alert volume 30'

つまり「set volume alert volume N を Control+F11/F12 に割り当てる」だけで目的は達成できる。ただしここに2つの落とし穴があった。

完成版の設定

📦 JSON一式・Claude Code 用プロンプトは GitHub でも公開しています → https://github.com/amu815/karabiner-notification-volume

~/.config/karabiner/assets/complex_modifications/alert-volume.json を作成する。

{
  "title": "通知音(アラート音量)を ⌃+F11/F12 で増減",
  "rules": [
    {
      "description": "⌃(Left Control)+F11/F12 で alert volume(通知音)を増減。素の F11/F12 は通常のメイン音量のまま。",
      "manipulators": [
        {
          "from": { "key_code": "f11", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } },
          "to": [{ "shell_command": "/usr/bin/osascript -e 'set v to (alert volume of (get volume settings)) - 10' -e 'if v < 0 then set v to 0' -e 'set volume alert volume v' -e 'beep'" }],
          "type": "basic"
        },
        {
          "from": { "key_code": "f12", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } },
          "to": [{ "shell_command": "/usr/bin/osascript -e 'set v to (alert volume of (get volume settings)) + 10' -e 'if v > 100 then set v to 100' -e 'set volume alert volume v' -e 'beep'" }],
          "type": "basic"
        }
      ]
    }
  ]
}

落とし穴①: 修飾キーは mandatory にする

最初、key_code: f12 を optional:["any"](=修飾キー何でも可)で捕まえていた。すると 修飾なしの素の F12 まで一致してしまい、通常のメイン音量調整が効かなくなった。

// NG: 素の F12 まで横取りしてメイン音量が壊れる
"from": { "key_code": "f12", "modifiers": { "optional": ["any"] } }

// OK: Control を必須にする。素の F12 はスルーされ macOS の音量調整に流れる
"from": { "key_code": "f12", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } }

mandatory を付ければ、Control を押していないときは Karabiner が一致せず、F12 はそのまま macOS のメイン音量調整に流れる。

落とし穴②: F11/F12 が出すコードはキーボード次第

この設定が成立するのは、お使いのキーボードの F 行が “本物の key_code: f11/f12” を出している場合。Karabiner 付属の EventViewer で F12 を押して確認できる。

同じ Mac でも内蔵キーボードと外付けで挙動が違うことがある(Keychron 等は Mac/Win トグルや fn-lock で F 行の挙動が変わる)。まず EventViewer で自分の環境を確認するのが確実。

切り分けに使ったコマンド(耳に頼らず数値で確認)

osascript -e 'set volume output volume 30'   # メインの基準
osascript -e 'set volume alert volume 20'    # 通知音の基準
# (ここでキーを押す)
osascript -e 'get volume settings'
  • 素の F12 → output volume が上がる(メイン音量は従来どおり)
  • ⌃ + F12 → alert volume が上がる(通知音だけ独立して変わる)

両方が期待どおり動けば完成。

有効化

# JSON妥当性チェック
python3 -m json.tool ~/.config/karabiner/assets/complex_modifications/alert-volume.json

Karabiner-Elements を開く → Complex Modifications → Add rule → 「通知音(アラート音量)を ⌃+F11/F12 で増減」を Enable。

CLI派は、karabiner.json の selected: true のプロファイルの complex_modifications.rules 先頭に上記 rule をマージ(既存ルールは保持)して保存し、以下でリロードしてもよい。

CLI="/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli"
"$CLI" --select-profile "$("$CLI" --show-current-profile-name)"

付録: Claude Code に設定させるプロンプト

手で設定する代わりに、以下を Claude Code にそのまま貼れば、別のMacでも一発で再現できる。上記の落とし穴(mandatory修飾/キーボード差)を最初から織り込んである。

macOSで「通知音(alert volume)」だけを ⌃(左Control)+F11 / ⌃+F12 で下げ/上げできるように、
Karabiner-Elements を設定してください。メインの出力音量とは独立に効くようにします。
素の F11/F12 は従来どおりメイン音量のまま残すこと。

## 前提と落とし穴(先に押さえること)
- 通知音の実体は macOS の Alert volume で、出力音量とは独立。
  操作は osascript -e 'set volume alert volume N'(N=0〜100)。
- まず Karabiner の EventViewer で「F12 を押すと何が出るか」を確認:
  - key_code: f12 が出る → このプロンプトの方式(key_code + mandatory修飾)でOK。
  - consumer_key_code: volume_increment が出る → Karabiner はメディアキーを from に
    できない既知制約(issue #1059 / #1951、Tahoe は #4371)。Karabiner では不可なので、
    その旨を伝えて Hammerspoon 方式(systemDefined eventtap)を提案して中止する。
- 【重要】from の modifiers は必ず mandatory:["left_control"] にする。
  optional:["any"] だけにすると、修飾なしの素の F11/F12 まで横取りしてしまい、
  通常のメイン音量調整が壊れる。
- shell_command の osascript は フルパス /usr/bin/osascript で書くこと。

## やること
1. 次のファイルを作成(既存ルールには一切触れない・追加するだけ):
   ~/.config/karabiner/assets/complex_modifications/alert-volume.json

{
  "title": "通知音(アラート音量)を ⌃+F11/F12 で増減",
  "rules": [
    {
      "description": "⌃(Left Control)+F11/F12 で alert volume(通知音)を増減。素の F11/F12 は通常のメイン音量のまま。",
      "manipulators": [
        {
          "from": { "key_code": "f11", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } },
          "to": [{ "shell_command": "/usr/bin/osascript -e 'set v to (alert volume of (get volume settings)) - 10' -e 'if v < 0 then set v to 0' -e 'set volume alert volume v' -e 'beep'" }],
          "type": "basic"
        },
        {
          "from": { "key_code": "f12", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } },
          "to": [{ "shell_command": "/usr/bin/osascript -e 'set v to (alert volume of (get volume settings)) + 10' -e 'if v > 100 then set v to 100' -e 'set volume alert volume v' -e 'beep'" }],
          "type": "basic"
        }
      ]
    }
  ]
}

2. python3 -m json.tool で JSON 妥当性を確認。
3. 有効化: ユーザーに「Karabiner-Elements → Complex Modifications → Add rule →
   『通知音(アラート音量)を ⌃+F11/F12 で増減』を Enable」と案内する。
4. 動作確認(耳でなく数値で。あなたはキーを押せないのでユーザーに押してもらう):
   - osascript -e 'set volume output volume 30' と 'set volume alert volume 20' で基準化
   - 「素の F12 を2回」→ output が上がる(メイン音量は従来どおり)
   - 「左Control を押しながら F12 を2回」→ alert が上がる(通知音だけ)
   - osascript -e 'get volume settings' で両方を確認
5. 補足: 左Control を使う。別の修飾キーが良ければ mandatory の値を変える。

注意点

  • 左 Control を使う。別の修飾キーにしたいときは mandatory の値を変えるだけ。
  • shell_command の osascript は環境差を避けるため フルパス /usr/bin/osascript で記述。
  • 刻みは ±10。+ 10 / - 10 で調整。末尾の -e 'beep' は変更後の音量で1回鳴らすフィードバック(不要なら削除)。
  • 通知音が鳴らない場合は、System Settings → 通知 → 各アプリで「サウンドを再生」がオンか確認。

まとめ

  • 通知音 = Alert volume。osascript -e 'set volume alert volume N' で出力音量と独立に操作できる。
  • Karabiner で ⌃+F11/F12 に割り当てる。キーは key_code: f11/f12 + mandatory:["left_control"] で捕まえる。
  • optional:["any"] だけはNG(素の F11/F12 まで奪ってメイン音量が壊れる)。
  • F 行が consumer_key_code(メディアキー)しか出さないキーボードでは Karabiner では不可。EventViewer で確認し、その場合は Hammerspoon へ。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?