Я пытаюсь переключить 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 в синергии. Обратите внимание, что запуск одной и той же комбинации клавиш без xdotool не приводит к segfault.
Какие у меня есть варианты?
Редактировать: одно очевидное решение - прослушивание super+,
событие с синергией в первую очередь, и обработка логики там (будь то переключение экрана или отправка другой комбинации клавиш в dwm). Это должно работать, но подразумевает различные конфигурации dwm для сервера и клиента, так как super+,
все равно должен обрабатываться dwm в клиенте (в противном случае управление клиентом через его собственную клавиатуру не будет работать должным образом).