Введение
История проблемы, которую я создал, чтобы ее решить, берется из того, что я работаю PM, а значит около 80% моего рабочего времени – это созвоны, конференции, синки, стендапы и прочие малоприятные вещи, а также из проблемы с концентрацией вне рамок коммуникации. Для того чтобы сконцентрироваться, я использую фоновый звук (дождь, ветер, море), но при этом в эти моменты я предпочитаю сидеть без наушников, чтобы, так сказать, дышало. Но меня долгое время бесило то, что чтобы переключить аудио устройство в macOS, необходимо тянуться курсором в правый угол, открывать центр управления, выбирать раздел звук и из обширного списка выбирать нужное устройство. Казалось бы, ничего сложного, однако бывают случаются внезапные и срочные созвоны, задержка подключения к которым может вызвать вопросики.
Стоит также отметить, что я не обладаю какими-то глубокими навыками и познаниями в разработке, в написании скриптов и т.д., но имею внезапно появившееся желание сделать свое рабочее пространство удобнее.
Итак, положив эту проблему в одну руку, а гугл в другую, я занялся поиском, задавался ли кто-то решением этой проблемы. Разведка конкретных результатов не дала, и этот факт впоследствии и стал основной причиной написания этого текста, поскольку вдруг он поможет какому-нибудь такому же бедолаге решить надуманную проблему. В этом месте стоит оговориться, что я призывал себе в помощь ChatGPT, чтобы она дала мне основное направление, а впоследствии, чтобы помогла с написанием скриптов.
1. Проработка вариантов
Сперва, мне хотелось решить это, не прибегая к установке внешних компонентов, и я стал копать под Automator и AppleScript. Найдя информацию, по всей видимости подходящую для старых версий ОС (а выполнял я все это на актуальной на момент написания macOS 15.01), я понял, что мне может помочь следующий скрипт:
tell application "System Preferences"
reveal pane id "com.apple.preference.sound"
end tell
tell application "System Events"
tell process "System Preferences"
click the radio button "Output" of tab group 1 of window "Sound"
select (row 1 of table 1 of scroll area 1 of tab group 1 of window "Sound")
end tell
end tell
quit application "System Preferences"
в котором row 1 необходимо заменить на нужную строку из раздела «Звук» системных настроек.
Сделав несколько попыток, на каждую получил следующую реакцию системы:
error "Получена ошибка от «System Settings»: Не удается получить pane id "com.apple.preference.sound"." number -1728 from pane id "com.apple.preference.sound"
И я снова углубился в поиски и разговоры с GPT. Стало ясно, что начиная с macOS Ventura изменился идентификатор панели и (вероятно!) AppleScript не может получить доступ к настройкам так, как это происходило раньше. Решил изменить подход и все-таки прибегнуть к помощи стороннего ПО.
2. Установка SwitchAudioSource
В процессе поиска я обнаружил упоминания утилиты switchaudio-osx, которая устанавливается через Homebrew. Она позволяет переключать аудиоустройства через терминал и отлично интегрируется с AppleScript и Automator.
Алгоритм установки, проверки и получения данных не слишком сложен:
-
Открываем терминал и вводим следующую команду:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. Терминал попросит ввести пароль от системы (не стоит пугаться, что пароль не отображается в терминале). Если все прошло корректно, перед вами должна быть такая картина:
3. Теперь необходимо установить switchaudio-osx. Для этого в терминал вводим следующую строку::
brew install switchaudio-osx
Привожу скриншот, который я сделал при написании, но на нем система говорит, что данный компонент уже установлен. В любом случае, система должна сообщить, что все установлено.
4. Теперь для проверки корректности установки необходимо ввести команду:
SwitchAudioSource -a
И если все было выполнено корректно, в терминале отобразится перечень всех аудиоустройств:
Копируем этот список куда-нибудь «на всякий случай», однако меня в данном случае интересовало ровно два устройства: Динамики MacBook Air и JBL Quantum 600 Game.
5. Получение пути установки SwitchAudioSource.
На следующем шаге нам пригодится точный путь, куда установлена утилита. Для этого в терминал вводим команду:
which SwitchAudioSource
терминал возвращает нам необходимый путь. Его также целесообразно скопировать куда-нибудь на потом.
Подготовка скриптов на AppleScript
Далее необходимо опробовать, работают ли скрипты с тем, что у нас есть.
Открываем приложение «Редактор скриптов». В верхнем меню нажимаем «Файл» - «Новый» и вводим в поле следующий скрипт:
do shell script "/opt/homebrew/bin/SwitchAudioSource -s 'JBL Quantum 600 Game'"
Вместо «JBL Quantum 600 Game» указываем необходимое устройство из списка, полученного ранее. Запускаем его кнопкой «Запустить скрипт» (треугольник, аналогичный Play во всех плейерах). В результате мы должны увидеть следующее:
Для того, чтобы удостовериться, что устройство действительно переключилось, можно проверить это в системных настройках, или же, что более наглядно, перед переключением запустить, например, музыку.
Аналогичный скрипт готовим для второго аудиоустройства.
Сохраняем эти скрипты с понятным и узнаваемым названием, например «SwitchToLaptopSpeakers» и «SwitchToHeadphones», и форматом файла «Программа».
4. Автоматизация и Automator
Чтобы не приходилось каждый раз искать файлы скриптов, а также тыкать какие-то кнопки на экране (иначе чем все это отличается, от способа предлагаемого macOS?), необходимо этот процесс автоматизировать.
Запускаем приложение Automator, в верхней панели нажимаем «Файл» - «Новый». В открывшемся окне выбираем «Быстрое действие» (оно же в системе называется «Службы»):
В появившемся окне вверху указываем, что процесс не получает входных данных в любой программе, а в среднем столбце ищем «Запустить программу» и перетаскиваем в правое поле. В этом блоке выбираем один из ранее подготовленных скриптов-программ.
И сохраняем нашу службу под понятным названием, например, Switch to Laptop Speakers.
Аналогичные действия выполняем для второго устройства.
Итак, на данный момент у нас подготовлены две службы, которые переключают аудиоустройства. Теперь перейдем непосредственно к их быстрому запуску.
5. Настройка горячих клавиш
Чтобы запускать переключение сочетанием клавиш, заходим в «Системные настройки» – «Клавиатура» – «Сочетания клавиш». В появившемся окне слева выбираем «Службы» и раскрываем список «Основные».
Щелкаем дважды на одну из наших служб и вводим комбинацию из трех клавиш. Я выбрал для своих [Shift] [Command] [8] и [Shift] [Command] [9].
Все. Теперь при нажатии этих комбинаций будет происходить переключение звука.
6. Уведомления
В процессе тестового использования стало понятно, что не хватает какого-то визуального сигнала, что устройство переключено. Здесь нам на помощь также могут прийти скрипты и системные уведомления (которые выскакивают в правом верхнем углу экрана). Всего лишь необходимо дополнить наши скрипты одной строкой, чтобы они выглядели следующим образом:
do shell script "/opt/homebrew/bin/SwitchAudioSource -s 'JBL Quantum 600 Game'"
display notification "Переключено на JBL Quantum 600 Game" with title "Аудио устройство переключено"
Вторая строка, собственно, и вызывает системное уведомление с указанным текстом и заголовком. Вот как это выглядит:
Теперь этим можно пользоваться, но моя душа пожелала большего. Я задумался о макропаде.
7. Макропад и запуск скриптов через него
Я для себя решил, что для того, чтобы выполнять переключение устройств быстро, одним движением, мне нужен макропад (плюс, это возможность для экспериментов в будущем). Я перебрал кучу ноунеймов от китайских производителей, некоторые кастомные сборки и дорогие стриммерские. Но остановил свой выбор на GeekBoards Macropad 2 по следующим причинам:
-
Поддержка VIA (VIA — это платформы для кастомизации макропадов и клавиатур. Использование VIA упрощает настройку макросов через графический интерфейс, без необходимости в прошивке устройства);
-
Качество сборки. Поскольку geekboards довольно известен среди пользователей механических клавиатур, решил довериться их производству;
-
Поддержка macOS. Как мне стало понятно, далеко не для каждого макроапда есть ПО на macOS, а морочиться с виртуалками мне не хотелось.
-
Есть обширное комьюнити VIA.
С мыслью «хочу» я поехал в шоурум geekboards, где меня расстроили тем, что макропад временно (временно ли?) снят с производства и в наличии его нет. Но мне повезло. Я нашел чуть ли не единственное объявление на авито и тут же заказал его за половину цены нового.
Итак. Макропад передо мной, и я начинаю изучать документацию. Что нам нужно для настройки? Всего лишь одна утилита – VIA. Найти можно на сайте geekboards, либо на сайте сообщества VIA.
Подключаем наш макропад к компьютеру, запускаем установленную VIA, и нас встречает приятный интерфейс.
Далее я опишу только те инструменты, которые необходимы для моего случая.
Поскольку я шел путем использования сочетания клавиш, то именно это мы и будем привязывать к клавишам макропада.
В нижней левой части программы выбираем солярный знак, названный «MACROS» и попадаем в редактор макросов.
Теперь необходимо переключиться в режим ручного ввода макросов, нажав на кнопку, выделенную на скриншоте красным прямоугольником. Здесь нас встречает текстовое поле и подсказка как необходимо указывать ключи клавиш.
Поскольку мы используем сочетание клавиш, нам необходимо ввести его в формате Chord. На этой же странице есть ссылка на страницу QMK Firmware с кодами клавиш.
В нашем случае вводим для макроса М0 сочетание {KC_LGUI,KC_LSFT,KC_9}, а для М1 {KC_LGUI,KC_LSFT,KC_8}. Не забываем сохранить. Если вернуться обратно к графическому отображению макросов, то можно увидеть, что именно мы ввели. То есть, видим «нажатие» сочетания клавиш и их «отжатие».
Теперь снова возвращаемся на первоначальную страницу «KEYMAP» и выбираем категорию MACRO. Перед нами будет графическое изображение макропада и 16 доступных ячеек макросов от М0 до М15.
Нажимаем на графическом изображении макропада кнопку, к которой хотим привязать необходимое действие (кнопка начинает моргать), и нажимаем на одну из использованных нами ранее ячеек макросов. В моем случае – М0 и М1. Аналогично действуем со второй кнопкой. Если на кнопках появились соответствующие надписи, значит все получилось.
Теперь можно проверять, как это работает и бесконечно переключать устройства.
Заключение
Достиг ли я желаемого результата? Да, поскольку теперь при внезапном звонке я давлю одну кнопку, мгновенно переключая устройство. Это сделало мое рабочее место удобнее. Ну и вообще, это прикольно.
Также хочу напомнить, что все это я проделал, не имея никаких знаний по AppleScripts и Automator, а также никогда не слышав ранее про SwitchAudioSource. На всем пути я просто задавал интересующие меня вопросы ChatGPT, и мы вместе искали пути решения возникающих задач. Что это значит? Это значит, что в наше время любой, кто просто захочет попробовать что-то сделать, может сделать это с нулем знаний на входе, а в процессе наметит себе путь для развития.
Также, вот несколько мыслей для развития моего решения:
-
Добавление изображения в уведомление о переключении (возможно, с использованием terminal-notifier);
-
Исключение из процесса создания приложения на AppleScript, либо отказ от использования прописанного сочетания клавиш;
-
Переключение на сразу два устройства (например физические наушники и виртуальное устройства для записи).
Автор: Lepazhpol