defaultsコマンドツールを使用した修飾キーマッピングの更新


16

Macbookの初期セットアップを自動化しようとしています。これには、ソフトウェアのインストールや必要に応じたOS X構成の変更が含まれます。

デフォルトで修飾子キーを更新しようとしましたが、コードは次のとおりです。

# The apple keyboard id (1452-567-0) should probably be modified in case you use other different model 
COMPUTER_UUID=`ioreg -rd1 -c IOPlatformExpertDevice | grep -E '(UUID)' | awk '{print $3}' | tr -d \"`
defaults write ~/Library/Preferences/ByHost/.GlobalPreferences.$COMPUTER_UUID com.apple.keyboard.modifiermapping.1452-567-0 '( { HIDKeyboardModifierMappingDst = 2;   HIDKeyboardModifierMappingSrc = 0; } )'

問題は、パターンが変更されても、システム環境設定が更新をキャッチせず、コンピューターを再起動することすらできないようです。

Snow Leopardでこの操作を実行する方法はありますか?

ありがとう。


defaults -currentHost write -g key 'value'代わりに使用してください。それでも動作しません。
ダニエルベック

1
この男は同様のことを試み、また失敗しました。AppleScript GUIスクリプトはあなたにとって実行可能なオプションでしょうか?
ダニエルベック

回答:


12

defaultsコマンドがキーで正しい「キーボードID」を使用することが重要です。com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

たとえば、私のMacBook Airの内部キーボードはを使用していますがcom.apple.keyboard.modifiermapping.1452-579-0、私のiMacの外部キーボードはcom.apple.keyboard.modifiermapping.1118-219-0

正しい「キーボードID」を取得する方法は?コマンドラインでは次を使用できます。

ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct

関連するパラメーターでUSBデバイスのリストを取得するには:

  [...]
  +-o Natural® Ergonomic Keyboard 4000@fa140000  <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
        "idProduct" = 219
        "idVendor" = 1118

私の推測では、同じタイプのキーボードが複数ある場合、3番目のパラメーター(「-0」の部分)は「カウンター」です。

したがって、外部キーボードのCapsLockキーをオフにするには、次を使用します。

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1118-219-0 -array-add '<dict><key>HIDKeyboardModifierMappingDst</key><integer>-1</integer><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer></dict>'

また、完全を期すために、使用可能なキーコードのリストを以下に示します(Mac OS Xヒントから)。

  • なし— –1
  • Caps Lock — 0
  • Shift(左)— 1
  • コントロール(左)— 2
  • オプション(左)— 3
  • コマンド(左)— 4
  • キーパッド0 — 5
  • ヘルプ— 6
  • シフト(右)— 9
  • コントロール(右)— 10
  • オプション(右)— 11
  • コマンド(右)— 12

更新: Lauri Rantaのおかげで、BluetoothとUSBキーボードで動作するコマンドがあります:

ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product

これにより、出力がわずかに異なります。

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570

一部のWebサイトにあるデフォルト値の短いバージョンを使用しないでください。'{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'少なくとも私にとっては、dictの値の「-1」と「0」は整数ではなく文字列として解釈されます。これは、Preferencesが変更された修飾キーを表示するという奇妙な状態につながりますが、キーボードは実際にはそのように動作しません。
-Orangenhain

1
ioreg -n IOHIDKeyboard -rBluetoothキーボードも含まれます。
Lri

私はこれをしましたが、効果はないようです。動作させるには何かを再起動する必要がありますか?
SimonW 14

1
@SimonW同じことを経験しました。ログアウトして再度ログインするだけで設定が有効になることがわかりました。
ライアンロング14年

それは楽しいではありません:(
SimonW 14年

1

私も、Snow LeopardのHIDKeyboardModifierMappingSrcおよびHIDKeyboardModifierMappingDstの設定defaults writeに影響を与える(または.plistファイルを更新する)ことができませんでした

PS2からUSBキーボード(オプションとコマンドが交換されているようです)をサポートするために、Guestアカウントを「事前入力」しようとしています。「ログアウトしてログインし直す」という他のページの提案は役に立ちません。Guestアカウントから「ログアウト」すると、すべての変更が削除されます。

(私は持っています成功したキーボード修飾子が」勝ったこと、それがさらにイライラを作るおり、それぞれ、ドックと24時間時計をカスタマイズするために、私の「com.apple.dock」と「com.apple.menuextra.clock」のplistファイルを更新します仕事...)

"dtruss -asf"を使用して、 "System Preferences.app"が実行している(明らかに動作している)ことを "defaults"が実行していることと比較してみました。私が理解できる最も近い、私はの行に沿ってメッセージが表示されます:

   Foundation`+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]+0x151
   Foundation`NSKeyValueNotifyObserver+0x81
   Foundation`NSKeyValueDidChange+0x1ca
   Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:]+0x176

誰かがSnow Leopardで動作する解決策を見つけたなら、私はそれを聞いてうれしいです...


1

私が抱えている問題は、キーボードを接続するたびに、ioregで異なるIDを取得することです。必要なのは、コマンドとアップルキーを交換することだけです。

私の場合、AppleScriptとシステム環境設定GUIを使用して、これを「間違った方法」で解決することにしました。いハックですが、動作します!あなたのマイレージは異なる場合があります。

--The beginning of the name of the target keyboard (to type into the drop-down selection list)
set keyboardName to "natural"

--reboot system preferences to make GUI state more predictable
tell application "System Preferences"
    quit
    delay 1
    activate
    delay 1
    activate
end tell

tell application "System Events"

    --Bring up keyboard prefs
    key code 53 --escape
    keystroke "f" using command down
    delay 0.5
    key code 53 --escape
    keystroke "keyboard"
    delay 0.5
    key code 36 --return
    delay 1

    --Open modifier keys submenu
    repeat 4 times
        keystroke tab using shift down
        --delay 0.1
    end repeat
    --delay 0.1
    keystroke space
    delay 0.1

    --Select keyboard
    keystroke space
    keystroke keyboardName
    keystroke return
    delay 0.1

    --Select "option key" drop-down
    repeat 3 times
        keystroke tab
    end repeat

    delay 0.5

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 3 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return

    -- Select "command key" drop-down
    keystroke tab
    delay 0.1

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 2 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return
    delay 0.1

    --Commit changes! phew.
    keystroke return
end tell

0
  • diffUIとまったく同じようにこのファイルを作成していることを確認するために実行しましたか?
  • fs_usageまたはlsofを実行して、UIを使用するときに他に何が行われているかを調べます。

fs_usage興味深いAFAICTを何も表示しないので、(質問へのコメントに変更したコマンドを使用して)結果が予想どおりに表示されることを確認しました。
ダニエルベック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.