Cập nhật ánh xạ khóa sửa đổi thông qua công cụ lệnh mặc định


16

Tôi đang cố gắng tự động hóa thiết lập ban đầu của macbook, bao gồm cài đặt phần mềm và thay đổi cấu hình OS X theo nhu cầu của tôi.

Tôi đã cố gắng cập nhật các phím bổ trợ với mặc định, mã như sau:

# 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; } )'

Vấn đề dường như ngay cả khi mẫu được thay đổi, Tùy chọn hệ thống không bắt được bản cập nhật, thậm chí không khởi động lại máy tính.

Có cách nào để thực hiện thao tác này trong Snow Leopard không?

Cảm ơn.


sử dụng defaults -currentHost write -g key 'value'thay thế. Vẫn không làm việc mặc dù.
Daniel Beck

1
Anh chàng này cố gắng một cái gì đó tương tự và cũng thất bại. Kịch bản GUI AppleScript sẽ là một lựa chọn khả thi cho bạn?
Daniel Beck

Câu trả lời:


12

Điều quan trọng đối với defaultslệnh sử dụng "ID bàn phím" chính xác trong phím, có vẻ như là:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Ví dụ: bàn phím trong cho MacBook Air của tôi sử dụng: com.apple.keyboard.modifiermapping.1452-579-0 , trong khi bàn phím ngoài trên iMac của tôi sử dụngcom.apple.keyboard.modifiermapping.1118-219-0

Làm thế nào để có được "ID bàn phím" chính xác? Trên dòng lệnh bạn có thể sử dụng:

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

để có danh sách các thiết bị USB của bạn với các thông số liên quan:

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

Tôi đoán là tham số thứ ba (phần "-0") là "bộ đếm", trong trường hợp bạn có nhiều hơn một bàn phím cùng loại.

Vì vậy, để tắt phím CapsLock trên bàn phím ngoài, giờ tôi có thể sử dụng:

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>'

Và, để hoàn thiện, đây là danh sách các mã khóa có thể sử dụng ( từ Gợi ý Mac OS X ):

  • Không - Cạn1
  • Mũ khóa - 0
  • Ca (Trái) - 1
  • Kiểm soát (Trái) - 2
  • Tùy chọn (Trái) - 3
  • Lệnh (Trái) - 4
  • Bàn phím 0 - 5
  • Trợ giúp - 6
  • Ca (Phải) - 9
  • Kiểm soát (Phải) - 10
  • Tùy chọn (Phải) - 11
  • Lệnh (Phải) - 12

Cập nhật: nhờ Lauri Ranta đây là một lệnh hoạt động cho bàn phím Bluetooth & USB:

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

cung cấp cho bạn đầu ra hơi khác nhau:

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

Đừng không sử dụng phiên bản ngắn hơn của giá trị mặc định '{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'mà bạn có thể tìm thấy trên một số trang web, ít nhất đối với tôi "-1" và "0" trong giá trị của dict này sau đó được hiểu là chuỗi, không số nguyên. Điều đó dẫn đến một trạng thái lạ khi Tùy chọn hiển thị các phím sửa đổi đã thay đổi, nhưng bàn phím không thực sự hoạt động theo cách đó.
Orangenhain

1
ioreg -n IOHIDKeyboard -rcũng sẽ bao gồm bàn phím Bluetooth.
Lri

Tôi đã làm điều này nhưng nó dường như không có hiệu quả. Tôi có cần phải khởi động lại một cái gì đó để nó hoạt động không?
SimonW

1
@SimonW Tôi có kinh nghiệm tương tự. Tôi thấy rằng chỉ cần đăng xuất và đăng nhập lại sẽ khiến cài đặt có hiệu lực.
Ryan Long

Điều đó không vui chút nào :(
SimonW

1

Tôi cũng vậy, đã không thể có được defaults write(hoặc cập nhật các file plist) ảnh hưởng đến tôi HIDKeyboardModifierMappingSrcHIDKeyboardModifierMappingDst cài đặt dưới Snow Leopard .

Tôi đang cố gắng "điền trước" tài khoản Khách của mình để hỗ trợ bàn phím PS2-USB của mình (có vẻ như đã có Tùy chọn và Lệnh bị tráo đổi.) Các đề xuất của các trang khác để "đăng xuất và đăng nhập lại" không giúp ích; "Đăng xuất" tài khoản Khách sẽ xóa tất cả các thay đổi của tôi.

(Tôi đã cập nhật thành công các tệp plist "com.apple.dock" và "com.apple.menuextra.clock" của mình để tùy chỉnh dock và đồng hồ 24 giờ, điều này làm cho nó thậm chí còn bực bội hơn khi Bộ điều chỉnh bàn phím giành chiến thắng ' t làm việc ...)

Tôi đã thử sử dụng "dtruss -asf" để so sánh "System Preferences.app" đang làm gì (có vẻ như hoạt động) với những gì "mặc định" đang làm. Gần nhất tôi có thể hình, tôi thấy các tin nhắn dọc theo dòng:

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

Nếu bất cứ ai tìm ra giải pháp hoạt động theo Snow Leopard, tôi sẽ rất vui khi nghe nó ...


1

Vấn đề tôi gặp phải là mỗi lần tôi cắm bàn phím vào, nó sẽ nhận được một ID khác nhau trong ioreg. Tất cả những gì tôi cần làm là trao đổi lệnh và các phím apple.

Tôi đã quyết định giải quyết vấn đề này trong trường hợp của mình là "sai cách" khi sử dụng AppleScript và GUI Sở thích hệ thống. Đó là một hack xấu xí, nhưng nó hoạt động! Số dặm của bạn có thể thay đổi.

--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
  • Bạn đã chạy diffđể xác minh bạn đang tạo tệp này chính xác như giao diện người dùng chưa?
  • Chạy fs_usagehoặc lsofđể tìm hiểu những gì khác đang được thực hiện khi bạn sử dụng giao diện người dùng.

fs_usagekhông hiển thị bất cứ điều gì thú vị AFAICT và tôi đã xác minh (với lệnh đã sửa đổi của tôi trong nhận xét cho câu hỏi) rằng kết quả hiển thị như mong đợi.
Daniel Beck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.