Xbindkeys не будут работать должным образом

7

У меня есть проблема. Я хотел перенаправить некоторые горячие клавиши, с которыми я привык, из моей предыдущей системы, но я не могу заставить ее работать с xbindkeys .

xbindkeys распознает комбинацию, но как-то команда не запускается.

Если я использую команду

xdotool key braceleft

Он выводит мне правильный символ { в консоли. Однако, если я использую ту же команду в xbindkeys, ничего не происходит. Если я заменил команду firefox , она работает правильно и откроет firefox, поэтому я думаю, что xbindkeys работает.

Я хочу добиться следующего:

Я хочу ввести символ { в активное окно с помощью Alt_R + 7 или Alt_Left + Ctrl + 7 , поэтому я могу использовать оба. Я знаю, что Alt_R (AltGr) - это правильный способ, но на немецких клавиатурах как-то сложно напечатать браслет с помощью клавиши AltGr (Alt_R), поэтому я должен использовать Alt_L + Control + 7 вместо этого (например, я был использован в своей предыдущей системе). Я как-то заставил его нормально работать в 12.04, но я не могу заставить его работать в 14.04.

Любые предложения? Я попробовал несколько команд. Все они работали в консоли, но ни один из них не работал при выполнении xbindkeys

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'

Это моя конфигурация, которая не будет работать

"xdotool key braceleft"
Control+Alt + 7

Однако это работает:

"firefox"
Control+Alt + 7

Решение Изменить

Как я пробовал еще несколько вещей, я заметил, что xdotool, похоже, срабатывает слишком рано. Я изменил конфигурацию следующим образом:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

СЕЙЧАС отправляет правильный {знак в активное окно. Теперь осталось только уменьшить сон и задержку до работоспособного значения, потому что 1 секунда кажется слишком длинной:)

** Дополнительная информация ** Ну, теперь мне удалось найти подходящие ценности. ОДНАКО это работает, только если вы отпустите клавиши до тех пор, пока продолжительность сна не закончится. Если вы слишком медленны, если не будете работать.

Это моя текущая конфигурация для всех неудобных немецких символов AltGr

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

Однако, если вы хотите набирать несколько знаков @ (например), вы должны нажать Ctrl + Alt + Q, как предполагалось, но отпустите все клавиши, а затем снова нажмите его. Это, однако, намного, намного лучше, чем отсутствие опции Control + Alt вместо AltGr, но это не так эффективно, как и я был использован. Возможно, я найду решение для этого тоже.

    
задан Ello 26.04.2014 в 12:01
источник

4 ответа

3

Проблема с xdotool при нажатии настоящих ключей Xorg многократно посылает события нажатия клавиш (посмотрите на xev output). Чтобы преодолеть это, вам необходимо временно отключить функцию повтора, а затем сгенерировать событие KeyRelease на недоступном ключе.

Вместо

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7

попробуйте следующее:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7
    
ответ дан midenok 14.05.2015 в 11:20
источник
3

Как я пробовал еще несколько вещей, я заметил, что xdotool, похоже, срабатывает слишком рано. Я изменил конфигурацию следующим образом:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

СЕЙЧАС отправляет правильный {знак в активное окно. Теперь осталось только уменьшить сон и задержку до работоспособного значения, потому что 1 секунда кажется слишком длинной:)

** Дополнительная информация ** Ну, теперь мне удалось найти подходящие значения. ОДНАКО это работает, только если вы отпустите клавиши до тех пор, пока продолжительность сна не закончится. Если вы слишком медленны, если не будете работать.

Это моя текущая конфигурация для всех неудобных немецких символов AltGr

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

Однако, если вы хотите набирать несколько знаков @ (например), вы должны нажать Ctrl + Alt + Q, как предполагалось, но отпустите все клавиши, а затем снова нажмите его. Это, однако, намного, намного лучше, чем отсутствие опции Control + Alt вместо AltGr, но это не так эффективно, как и я был использован. Возможно, я найду решение для этого тоже.

    
ответ дан Ello 26.04.2014 в 21:27
2

Как описано в похожих вопросах ( Почему эти команды xte работают в терминале, но не при привязке к xbindkeys? ), вы можете запросить xbindkeys для запуска событий при выпуске (при нажатии клавиши вверх)

"xdotool key braceleft"
   Release+Control+Alt + 7

Таким образом, между ключами, используемыми для ярлыка, и теми, которые были отправлены, нет конфликта.

    
ответ дан Michaël 30.10.2016 в 11:48
1

Не уверен, почему он не работает с xbindkeys , я предполагаю, что вам нужно указать окно для записи. В качестве обходного пути вы можете вместо этого использовать xvkbd .

  1. Установить xvkbd

    sudo apt-get install xvkbd
    
  2. Добавьте это в свой файл .xbindkeysrc

    "xvkbd -text '{'"
    Control+Alt + 7
    

Это должно сработать.

ПРИМЕЧАНИЯ

По какой-то причине на моей машине xvkbd использует один из моих вторичных макетов (испанский) вместо моего основного (американский английский), и это приводит к тому, что { фактически печатает " . Если у вас также есть эта проблема, просто поиграйте немного, чтобы узнать, какой ключ соответствует { с используемым макетом. Кроме того, вы можете копать глубже и выяснить, где xvkbd получает свои настройки locale .

    
ответ дан terdon 26.04.2014 в 12:47