Как стать автором
Обновить

Как переназначить кнопку dictation на macOS (без стороннего софта)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.8K

Если вам нужны конкретные инструкции по переназначению клавиш стандартными методами и код программы для прослушки нажатия клавиш, то все это лежит в разделе инструкций.

Немного предистории

Год назад я купил Mac с функциональными клавишами и столкнулся с кнопкой dictation, которая вызывает стандартную программу для диктовки текста. Перед покупкой я предположил что это кнопка с значком микрофона должна включать и выключать микрофон, каково же было мое разочарование, когда вместо функционала включения и выключения микрофона я получил запуск dictation. Меня это не устроило и я начал поиски.

Первой программой, которую я нагулил, была Karabiner-Elements. Но она показалась мне слишком громоздкой для такой небольшой задачи.

Далее я нашел Ukelele, которая позволяет создать свою раскладку клавиатуру. Уже лучше, более нативно, но это все еще не то что нужно.

Потом я наткнулся на статью. В ней довольно подробно описывается как переназначить клавиши через утилиту hidutil встроенную в MacOS.

Тут появилась идея переназначить клавишу dictation на клавишу, которая не используется на клавиатуре, но поддерживается системой. Т.е. переназначить код, который отправляет эта клавиша в систему. Я это сделал через hidutil, плюс написал небольшую программу, которая слушает события с клавиатуры и запускает скрипт по нажатию на клавишу F18.

В принципе можно сделать через обычный скрипт Apple, который запускается на шорткат, но хотелось бы видеть состояние микрофона в StatusBar.

Инструкции по настройке

Получение кода клавиши dictation

Перед тем как переназначить клавиши нам нужно получить код клавиши dictation. Для этого нужно вызвать в терминале команду:

ioreg -l|grep FnFunctionUsageMap|grep -Eo "0x[0-9a-fA-F]+,0x[0-9a-fA-F]+"

Эта команда фильтрует вывод ioreg через утилиту grep, так что если вдруг у вас не будет работать эта команда, вы можете сохранить вывод команды ioreg -l в текстовый документ и найти определение переменной FnFunctionUsageMap.

Вернемся к команде. Вывод должен быть примерно таким:

Это и есть коды функциональных и медиа клавиш. В левом столбике идут коды функциональных клавиш (F1, F2, F3 и т.д.), в правом медиа клавиш.

Нам нужна медиа клавиша, которая на кнопке F5. Это будет пятый код сверху в правом столбике:

Далее нужно перевести этот код из 32 битного числа в 64 битный. Для этого нужно заполнить число незначащими нулями 0x000c00cf -> 0x000c000000cf.

Отлично. Теперь мы можем переназначить эту клавишу.

Мапинг через hidutil

Чтобы смапить клавишу dictation на F18 нужно вызвать команду в терминале:

hidutil property --set '{"UserKeyMapping": [{"HIDKeyboardModifierMappingSrc":0x000c000000cf,"HIDKeyboardModifierMappingDst":0x70000006D}]}'

Более подробно о том как работает hidutil можно найти в Tech Note от Apple.

Плюс нам нужно добавить запуск этого скрипта при запуске системы. Для этого нужно создать файл ~/Library/LaunchAgents/com.nanoant.KeyRemapping.plist с таким содержанием:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.nanoant.KeyRemapping</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/bin/hidutil</string>
		<string>property</string>
		<string>--set</string>
		<string>{&quot;UserKeyMapping&quot;:[{&quot;HIDKeyboardModifierMappingSrc&quot;:0x000C000000CF,&quot;HIDKeyboardModifierMappingDst&quot;: 0x70000006D}]}</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

Теперь при нажатии на клавишу dictation должна срабатывать клавиша F18.

Программа для отключения микрофона

Ссылка на программу.

Принцип работы программы в том, что она слушает события с клавиатуры и хранит состояние микрофона. При первом запуске, она сбрасывает состояние микрофона в включенное состояние. Далее, когда происходит событие, она запускает AppleScript, изменяет переменную состояния и иконку в StatusBar.

Для того чтобы слушать события с клавиатуры приложению нужны права Accessibility и Input Monitoring. Они проставляются в настройках.

Собранное приложение можно найти в релизах в Гитхабе, либо собрать самостоятельно из исходного кода.

При первом запуске приложение запросит права. Далее его нужно рестартануть. Для этого вызываем в терминале:

killall Microphone

и снова запускаем приложение.

Обратите внимание на то, что если вы собираете приложение через XCode и запускаете сборку, то вам нужно будет дать права на Accessibility и Input Monitoring XCode тоже. Также при каждой новой сборке вам нужно будет удалять права в настройках и после запуска приложения добавлять их снова.

Полезные ссылки

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии6

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн