У меня есть небольшая проблема. Я хотел переназначить некоторые горячие клавиши из моей предыдущей системы, но я не могу заставить их работать должным образом 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, но это не так эффективно, как я тоже использовал. Может быть, я найду решение для этого тоже.
xdotool
повторять клавишу, пока она удерживается?xdotool getactivewindow key Home
Ответы:
Проблема в
xdotool
том, что при нажатии настоящих клавиш Xorg многократно отправляет события нажатия клавиш (смотритеxev
вывод). Чтобы преодолеть это, вам нужно временно отключить функцию повтора, а затем создать событие KeyRelease для ключа, который был выключен.Вместо
попробуйте следующее:
источник
Когда я попробовал еще несколько вещей, я заметил, что xdotool запускается слишком рано. Я изменил конфиг так:
ТЕПЕРЬ отправляет правильный знак {в активное окно. Теперь осталось только уменьшить сон и задержку до работоспособного значения, потому что 1 секунда кажется слишком длинной :)
** Дополнительная информация ** Ну, теперь мне удалось найти подходящие значения. ОДНАКО это работает только в том случае, если вы отпускаете ключи до тех пор, пока продолжительность сна не закончится. Если вы слишком медленный, если не будет работать.
Это мой текущий конфиг для всех неудобных немецких символов AltGr
Однако, если вы хотите набрать несколько знаков @ (например), вы должны нажать Ctrl + Alt + Q, как и предполагалось, но отпустить все клавиши и затем нажать ее снова. Это, однако, намного, намного лучше, чем отсутствие опции Control + Alt вместо AltGr, но это не так эффективно, как я тоже использовал. Может быть, я найду решение для этого тоже.
источник
sleep
, я думаю, вы хотите добавить+ release
в комбинации клавиш. Это скажетxbindkeys
подождать, пока ключ отпущен, прежде чем запускать команду.Как задокументировано в похожих вопросах ( почему эти команды xte работают в терминале, а не когда они связаны с xbindkeys? ), Вы можете задать запуск
xbindkeys
событий при освобождении (при ключе вверх):Таким образом, нет конфликта между клавишами, используемыми для ярлыка, и теми, которые были отправлены.
источник
У меня недавно была эта проблема, когда я пытался смоделировать мультимедийную клавишу Play / Pause (XF86AudioPlay) с помощью Ctrl + G. После некоторых исследований выяснилось, что мне нужно не только отменить Control , но и клавишу g (которая какая нужна
sleep 0.1
задержка для начала). Если я отменю оба эти ключа с помощью командыkeyup
xdotool, а также ключа --clearmodifiers, это сработает. Это моя новая команда в моем файле .xbindkeys.rc:источник
Не уверен, почему это не работает
xbindkeys
, я думаю, вам нужно указать окно для записи. В качестве обходного пути вы можете использоватьxvkbd
вместо этого.устанавливать
xvkbd
Добавьте это в свой
.xbindkeysrc
файлЭто должно работать.
НОТЫ
По какой-то причине на моем аппарате
xvkbd
используется один из моих дополнительных макетов (испанский) вместо моего основного (американский английский), и это приводит{
к фактической печати"
. Если у вас также есть эта проблема, просто поиграйте немного, чтобы узнать, какая клавиша соответствует{
используемой раскладке. Кроме того, вы можете копать глубже и выяснить, откудаxvkbd
берет своиlocale
настройки.источник