Я пытаюсь переключитьswitchInDirection()из оконного менеджера (dwm, написанный на c). Поскольку, похоже, нет возможности управлять действиями синергии из командной строки, я попытался запустить соответствующие комбинации клавиш из wm.
Сценарий: при super+,
событии (запятая), которое перехватывается wm, он должен запустить другую комбинацию клавиш, которую прослушивает synergys. По какой-то причине XTestFakeKeyEvent
(функция xlib) вообще не сработала, а имитация нажатия клавиш с помощью XSendEvent
не работает с модификаторами, поэтому мне пришлось сделать системный вызов xdotool:
xdotool keyup comma key control+alt+shift+F11 // note the required comma key up;
Кажется, это работает как POC, но в какой-то момент это вызовет segfault в synergys. Обратите внимание, что запуск той же комбинации клавиш без xdotool не приводит к segfault.
Какие у меня есть варианты, если таковые имеются?
Редактировать:
Одним из очевидных решений было бы прослушивание super+,
события с помощью synergy в первую очередь и обработка логики там (будь то переключение экрана или отправка другой комбинации клавиш в dwm). Это должно работать, но подразумевает разные конфигурации dwm для сервера и клиента, поскольку super+,
должно по-прежнему обрабатываться dwm в клиенте (иначе управление клиентом с помощью его собственной клавиатуры не будет работать так, как ожидается).