Привязка глобальных горячих клавиш к программе WINE в Linux
Быстрые ссылки
- Обзор
- xdotool
- Глобальная привязка горячих клавиш
- Отладка и советы
- Альтернативы и совместимость
- Контрольный список и критерии приёмки
- Примечания по безопасности и приватности

Обзор
Многие, кто перешёл или подумывает перейти на Linux, сталкиваются с одной проблемой: есть важное Windows-приложение, которое нужно запускать через WINE. Часто выясняется, что глобальные горячие клавиши этого приложения перестают работать — они не срабатывают при фокусе на другом окне или в фоне. Это распространённая проблема при использовании WINE и X11.
Вместо сложных правок в самой программе проще перехватывать системные глобальные сочетания и отправлять соответствующие симулированные нажатия прямо в окно приложения с помощью утилиты xdotool. Ниже — пошаговая инструкция, разбор команды, варианты и рекомендации по отладке.
xdotool — что это и зачем
xdotool — это утилита для автоматизации X11: отправка нажатий клавиш, управление окнами, поиск окон по имени или PID. В этой инструкции мы используем только две команды xdotool: search и key.
Кратко: search находит ID окна, key отправляет ему нажатия клавиш.
Важно: xdotool работает под X11. На Wayland функциональность будет ограничена или недоступна — см. раздел «Альтернативы и совместимость».
Установка и базовая настройка
Предполагается, что WINE и целевая программа уже установлены. В примере используется Balabolka как тестовое Windows-приложение. Balabolka может принимать глобальные горячие клавиши, если включить соответствующий параметр.
Примечание: для установки SAPI-голосов можно установить TTSReader или 2nd speech center даже в демо-режиме.
Откройте Balabolka и войдите в настройки: Options -> Settings (Shift+F6). Перейдите на вкладку горячих клавиш и включите опцию Use global hotkeys.


Оставьте программу запущенной в фоне — ей нужно быть активной, чтобы принимать симулированные нажатия.
Установите xdotool (на Debian/Ubuntu/Mint):
sudo apt-get install xdotoolГлобальная привязка горячих клавиш — идея
xdotool сам по себе не регистрирует системные глобальные сочетания. Вместо этого вы регистрируете глобальное сочетание в среде рабочего стола (Mint, Ubuntu, XFCE и т.п.) и привязываете его к скрипту. Скрипт использует xdotool, чтобы найти окно нужного процесса и отправить ему нажатие.
Создайте два скрипта: один для «старт чтения», другой для «стоп чтения».
Пример скрипта start_read.sh:
xdotool key --window $( xdotool search --limit 1 --all --pid $( pgrep balabolka ) --name Balabolka ) "ctrl+alt+F9"Пример скрипта stop_read.sh:
xdotool key --window $( xdotool search --limit 1 --all --pid $( pgrep balabolka ) --name Balabolka ) "ctrl+alt+F7"Сделайте скрипты исполняемыми:
chmod +x start_read.sh stop_read.shРазбор команды по частям
- pgrep balabolka — ищет PID процесса Balabolka. Это сузит область поиска окон.
- xdotool search –limit 1 –all –pid
–name Balabolka — ищет окно программы по PID и имени и возвращает первый подходящий ID окна. - xdotool key –window
“ctrl+alt+F9” — отправляет в выбранное окно симулированное нажатие сочетания.
Ограничение: если у программы несколько окон с разными поведением, возможно, потребуется подобрать параметры –name или убрать –limit, чтобы выбрать нужное окно.
Регистрация скриптов в системных глобальных сочетаниях
Ниже — примеры для Linux Mint и Ubuntu.
Linux Mint
Откройте приложение Keyboard Shortcuts (Клавиатурные сочетания). Нажмите Add, создайте новый пользовательский ярлык и укажите полный путь к одному из скриптов. Повторите для второго скрипта.


После создания в колонке Shortcuts нажмите Disabled и задайте желаемую комбинацию. Теперь выбранная комбинация будет вызывать ваш скрипт, который отправит нажатие в окно Balabolka.

Совет: вы можете назначить собственную комбинацию, отличную от встроенной в программу — фактически это ремап глобального сочетания.
Ubuntu
В Ubuntu приложение называется Keyboard (Клавиатура). Откройте закладку Shortcuts и выберите Custom Shortcuts.

Добавьте новый пользовательский ярлык (плюс), укажите имя и команду (полный путь к скрипту). Затем нажмите Disabled и задайте сочетание.

Повторите для второго скрипта и протестируйте: нажмите сочетание — приложение должно получить симулированное действие.
Отладка и распространённые проблемы
Ничего не происходит при нажатии сочетания:
- Убедитесь, что скрипт исполняемый и путь прописан полностью в настройках сочетаний.
- Проверьте, что Balabolka (или ваш процесс) запущен и pgrep находит PID: pgrep balabolka.
- Проверьте, что xdotool установлен и команда работает вручную в терминале.
xdotool не находит окно:
- Попробуйте убрать –limit 1 и посмотреть, какие ID возвращаются.
- Используйте xdotool search –name “часть имени окна” чтобы подобрать правильный фильтр.
Нажатия отправляются не в то окно:
- Возможно, программе важно, какое именно окно получает событие. Попробуйте уточнить –name или выбрать другой ID.
Wayland: xdotool не срабатывает или не отправляет события.
- Wayland запрещает многие методы эмуляции ввода, доступные в X11. На Wayland xdotool либо не будет работать, либо будет работать частично.
- На Wayland используйте нативные средства среды или compositor-специфичные утилиты (например, sway/swaymsg для sway). В GNOME на Wayland опции более ограничены — проверяйте возможности среды.
Альтернативные подходы
- xbindkeys или sxhkd: они регистрируют глобальные сочетания и запускают произвольные команды. Их можно использовать вместо встроенного GUI для глобальных сочетаний.
- AutoKey: Python-скриптовый автокомплект для X11, который позволяет сложную логику при обработке сочетаний.
- wmctrl: альтернатива для управления окнами (переключение, активация) в сочетании с xdotool.
- На Wayland: использовать средства compositor’а (swaymsg) или возможности DE (Gnome Extensions) для вызова действий в приложениях.
Выбор инструмента зависит от вашего окружения рабочего стола и требований к безопасности.
Когда этот метод не подходит
- Приложение принимает глобальные хоткеи только через собственный системный хук, игнорируя симулированный ввод — тогда приходится искать решение внутри самой программы или писать wrapper вокруг неё.
- Вы используете Wayland и цель — глубокая эмуляция ввода на уровне ядра — xdotool не поможет.
- Программа запускается с другими привилегиями (например, от root), а ваш скрипт — от обычного пользователя; доступ к окнам может быть ограничен.
Мини‑методология: быстрый план внедрения
- Убедитесь, что приложение под WINE запущено и глобальные хоткеи включены внутри него.
- Установите xdotool.
- Напишите и проверьте скрипты вручную в терминале.
- Сделайте скрипты исполняемыми.
- Зарегистрируйте скрипты как глобальные сочетания в DE.
- Протестируйте в нескольких ситуациях: другое приложение в фокусе, экран блокирован, разные окна приложения.
- Документируйте выбранные сочетания и храните скрипты в вашем домашнем каталоге с правами 700.
Контрольный список по ролям
Пользователь:
- Установил WINE и целевое приложение.
- Включил Use global hotkeys в приложении.
- Установил xdotool.
- Создал и проверил скрипты из примера.
- Зарегистрировал скрипты в настройках клавиатуры DE.
Системный администратор:
- Убедился, что xdotool доступен в репозитории и безопасен для использования.
- Настроил права доступа и не разрешил запускать скрипты от root, если это не нужно.
- Проверил совместимость с политиками безопасности организации.
Разработчик/инженер автоматизации:
- Добавил логирование в скрипты для отладки (редирект stdout/stderr в файл).
- Реализовал автозапуск приложения при старте с контрольной проверкой PID.
- Написал unit‑тесты для выявления изменений имени окна после обновлений приложения.
Критерии приёмки
- При нажатии глобального сочетания заданный скрипт запускается.
- Скрипт находит корректный ID окна приложения и возвращает код выхода 0.
- Приложение успешно получает симулированное сочетание и выполняет ожидаемое действие.
- Поведение стабильно после перезапуска приложения и после смены фокуса на другое окно.
Тестовые сценарии
- Приложение в фокусе: сочетание должно корректно работать.
- Приложение в фоне: сочетание должно инициировать действие в приложении.
- Несколько окон приложения: проверить, что выбранное окно — правильное.
- Wayland-сессия: проверить, работает ли подход (ожидаемо — возможно не работает).
Примечания по безопасности и приватности
- Симуляция нажатий может воздействовать на любые окна. Убедитесь, что скрипты не запускаются от рук злоумышленника.
- Не храните скрипты в доступных публично каталогах. Используйте права доступа 700, если скрипты содержат чувствительные команды.
- Не запускайте эмуляцию ввода от root, если это не необходимо.
Совместимость и миграция
- Работает при X11. На Wayland функциональность ограничена. План миграции: если вы переходите на Wayland, изучите возможности DE/compositor’а и инструменты, совместимые с Wayland (swaymsg, compositor API, GNOME Extensions).
- Проверяйте изменения в названии окна после обновлений приложения — это повлияет на поиск окна по –name.
Краткое руководство по откату (rollback)
- Удалите добавленные глобальные сочетания в настройках DE.
- Остановите и удалите скрипты (или переименуйте их).
- При необходимости отключите xdotool или удалите пакет.
Словарь (одно предложение каждый)
- WINE: слой совместимости для запуска Windows-приложений в Linux.
- xdotool: утилита для эмуляции ввода и управления окнами в X11.
- PID: идентификатор процесса (Process ID).
- Wayland: современный протокол отображения, альтернатива X11, с иными ограничениями для эмуляции ввода.
Заключение
Этот подход прост и надёжен при использовании X11: система перехватывает глобальное сочетание, запускает ваш скрипт, тот находит окно приложения и посылает в него симулированное сочетание. Это удобный способ вернуть контроль над хоткеями Windows-приложения, не изменяя саму программу.
Надеюсь, инструкция сэкономит вам часы экспериментов. Если у вас особая ситуация (несколько окон, нестандартное имя окна, Wayland), опишите окружение — можно подобрать точечное решение.
Doc Brown: It’s taken me nearly thirty years and my entire family fortune to realize the vision of that day. My God, has it been that long?
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента