Почему эти команды xte работают в терминале, но не связаны с xbindkeys?

18

Эта 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

Ничего не произошло!

Hubro
источник
1
Вы пытаетесь нажать <Super> <S>? Я знаю, что xbindkeys + xte иногда могут быть разборчивы.
Сет
@Seth: правильно. Есть ли способ обойти придирчивость?
Hubro
1
Попробуй 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Сет
@Seth: Боюсь, без разницы :(
Hubro
Перезапустили ли вы xbindkeys после внесения изменений? Иногда это необходимо. Я полагаю, ваша конечная цель - открыть обзор рабочей области?
Сет

Ответы:

17

Другое более простое решение: вместо использования «b: 11» в определении xbindkeys используйте «b: 11 + release». Он подождет, пока вы не отпустите кнопку, чтобы запустить команду.

Пример:

"sh ~/expo.sh"
  b:11 + release
user215129
источник
2
Хабро должен вернуться сюда и пометить это как правильный ответ ...
Дэвид Люнг Мэдисон Стеллар
7

Это очень странно. Оказывается, если моя кнопка мыши все еще нажата (еще не отпущена), когда Super+Wсимуляция нажатия клавиш не происходит, ничего не происходит. Я не знаю, кто виноват в этом (возможно, Корица?). Я обошел его, добавив небольшую задержку в xteкоманду:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

Теперь он ждет 0,1 секунды, прежде чем имитировать Super+S. Если я нажму и удерживаю кнопку мыши более 0,1 секунды, ничего не происходит.

Это обходной путь ответа. Я бы предпочел правильный ответ.

Hubro
источник
Hubro, пожалуйста, посмотрите более высокий рейтинг ответа user215129 и отметьте его как правильный
David Ljung Madison Stellar
1
@DavidLjungMadison Нет. Это даже не ответ на мой вопрос, а просто предложение для обходного пути.
Hubro
1
Интересно, понимаешь ли ты ответ? Проблема в том, что вы пытаетесь отправить ключи, пока кнопка еще не нажата. Ожидание кнопки выпуска означает , что он не будет посылать ключи , пока кнопка не будет отпущена, решая тем самым проблему. Не обходной путь, это объяснение проблемы и способ ее решения.
Дэвид Льюнг Мэдисон Стеллар
1
Тогда ты все еще не понимаешь. Проблема в том , что вы пытаетесь ввести ключи в то время как кнопка нажата, и все , что запускает Expo ищет Super-S, а не БТН-2 + Super-S. Ваше исправление - это обходной путь, потому что оно не решает проблему, гарантируя, что кнопка нажата, и не работает во многих обстоятельствах. Решением является (как это часто бывает при работе с событиями мыши) ожидание отпускания кнопки, прежде чем запускать какие-либо команды, это гарантирует, что кнопка не будет смешана с нажатием клавиши.
Дэвид Люнг Мэдисон Стеллар
2
Можно подтвердить, что пользователь user215129 действительно неверный ответ и не отвечает на вопрос. Провести собственное расследование этой проблемы прямо сейчас, и в моем случае изменение ее на освобождение или задержку не вариант, потому что мне нужно, чтобы он выполнял действие, пока кнопка нажата, с другими действиями при отпускании. Смотрите: askubuntu.com/questions/984054/…
Ethuil UI
2

Я столкнулся с той же проблемой.

"xte 'key b'"

работал в консоли, но не в файле параметров xbindkeys. Я изменил b его кодом keysym, используя команду "xev", чтобы получить его:

"xte 'key Ox62'"

У меня сработало

Себастьян Коссин
источник
1

Попробуй с + Release

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

Это может помочь.

Иван Никитович
источник
1

Возникает похожая проблема при использовании sxhkcd keymapper. Оказывается, ваши настоящие горячие клавиши обнаружены как все еще нажаты.

Есть несколько обходных путей:

  • ищите событие выпуска
  • добавить sleep 0.2перед вашей командой
  • использовать ярлык с лидером
  • отпустите ваши модификаторы ярлыков перед вашей последовательностью xte

Однако вы не можете получить действия в реальном времени с этим =)

Поссум Галло
источник