Почему эти команды xte работают в терминале, но не связаны с xbindkeys?
Это xte
Команда, когда я запускаю его в терминале, запускает режим Экспо:
xte 'keydown Super_L' 'key S' 'keyup Super_L'
Однако, когда я помещаю это в мой файл.xbindkeysrc:
"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11
Ничего не происходит, когда я нажимаю кнопку. Следующая привязка заставляет букву X появляться в моей консоли, когда я нажимаю кнопку 11:
"xte 'key X'"
b:11
Так почему же не работает привязка Expo?
Это подробный вывод xbindkeys -n -v
при нажатии кнопки 11:
Нажатие кнопки! e.xbutton.button=11 e.xbutton.state=16 "xte 'keydown Super_L' 'key W' 'keyup Super_L'" m:0x0 + b:11 (мышь) получил экран 0 для окна 2bb Запустите программу с вызовом fork+exec Кнопка выпуска! e.xbutton.button = 11 e.xbutton.state = 16
И ничего не происходит. Это как-то связано с тем, как xbindkeys
выполняет команду? (ответвление + вызов exec)
Попытка номер два.
expo.sh:
#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'
Выполнение этого скрипта из командной строки активирует Expo. Связывание его в xbindkeys:
"sh ~/expo.sh"
b:11
Нажатие кнопки мыши 11:
Нажатие кнопки! e.xbutton.button=11 e.xbutton.state=16 "sh ~/expo.sh" m:0x0 + b:11 (мышь) получил экран 0 для окна 2bb Запустите программу с вызовом fork+exec
Ничего не произошло!
6 ответов
Это очень странно. Оказывается, если моя кнопка мыши все еще нажата (еще не отпущена), когда Super+W
нажатие клавиши симулируется, ничего не происходит. Я не знаю, кто виноват в этом (возможно, Корица?). Я работал над этим, добавив небольшую задержку xte
команда:
xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'
Теперь он ждет 0,1 секунды, прежде чем имитировать Super+S
, Если я нажму и удерживаю кнопку мыши более 0,1 секунды, ничего не происходит.
Это обходной путь ответа. Я бы предпочел правильный ответ.
Другое более простое решение: вместо использования "b:11" в определении xbindkeys используйте "b:11 + release". Он подождет, пока вы не отпустите кнопку, чтобы запустить команду.
Пример:
"sh ~/expo.sh"
b:11 + release
Я столкнулся с той же проблемой.
"xte 'key b'"
работал в консоли, но не в файле параметров xbindkeys. Я изменил b его кодом keysym, используя команду "xev", чтобы получить его:
"xte 'key Ox62'"
У меня сработало
Возникает похожая проблема при использовании sxhkcd keymapper. Оказывается, ваши настоящие горячие клавиши обнаружены как все еще нажаты.
Есть несколько обходных путей:
- ищите событие выпуска
- добавлять
sleep 0.2
перед вашей командой - использовать ярлык с лидером
- отпустите ваши модификаторы ярлыков перед вашей последовательностью xte
Однако вы не можете получить действия в реальном времени с этим =)
Попробуй с +Release
"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release
Это может помочь.
Я видел проблему, связанную с тем, что привязанная клавиша все еще нажималась (например, сдвиг, контроль и т. д.) много лет назад. Я сделал подробные заметки об этом в файле подсказок и подсказок по обработке событий X Windows...
https://antofthy.gitlab.io/info/X/event_handling.txt
Одно из решений — дать пользователю время отпустить клавиши.
Но другой вариант — отправить свои собственные события keyup, чтобы выпустить ключ для пользователя!
Третье решение — использовать xdotool и его параметр --clearmodifiers... Например, ввести адрес электронной почты...
xdotool type --clearmodifiers -delay 0 'email.address@machine.com'
Есть один БОЛЬШОЙ нюанс, на который следует обратить внимание... Рекурсивные макросы Будьте уверены, что ваши макросы не отправляют последовательность для одного и того же макроса! Если вы это сделаете, макрос будет повторяться снова и снова!