У меня есть небольшая проблема. Я хотел переназначить некоторые горячие клавиши, к которым я привык из моей предыдущей системы, но я не могу заставить его работать должным образом с xbindkeys
.
xbindkeys
распознает комбинацию, но каким-то образом команда не запускается.
Если я использую команду
xdotool key braceleft
Она выводит мне правильный знак {
в консоли. Однако, если я использую ту же команду в xbindkeys, ничего не произойдет. Если я заменю команду на firefox
, она будет работать правильно и откроет firefox, поэтому, я думаю, xbindkeys
сработает.
Я хочу добиться следующего:
Я хочу напечатать символ {
в активном окне с помощью Alt_R kbd> + 7 kbd> или < kbd> Alt_Left kbd> + Ctrl kbd> + 7 kbd>, поэтому я могу использовать оба. Я знаю, что Alt_R kbd> (AltGr) - правильный путь, но на немецких клавиатурах сложно набрать скобу клавишей AltGr kbd> (Alt_R), поэтому я ДОЛЖЕН использовать Alt_L kbd> + Control kbd> + 7 kbd> (как я привык в моей предыдущей системе). Я как-то заставил его работать должным образом в 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. все клавиши, а затем нажмите его еще раз. Это, однако, намного, намного лучше, чем отсутствие опции Control + Alt вместо AltGr, но это не так эффективно, как я тоже использовал. Может быть, я тоже найду решение для этого.
Проблема с xdotool
состоит в том, в то время как реальные клавиши нажаты, Xorg неоднократно отправляет события нажатия клавиши (взгляд xev
вывод). Для преодоления этого, необходимо временно выключить повторную функцию, затем генерировать событие 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
Когда я попробовал еще несколько вещей, я заметил, что 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 instead of AltGr, но не то, чтобы эффективный, поскольку я использовался также. Возможно, я найду решение для этого также.
Не уверенный, почему это не работает с xbindkeys
, я предполагаю, что необходимо определить окно для записи в. Как обходное решение, можно использовать xvkbd
вместо этого.
Установка xvkbd
sudo apt-get install xvkbd
Добавляет это к Вашему .xbindkeysrc
файл
"xvkbd -text '{'"
Control+Alt + 7
, Который должен работать.
<час>ПРИМЕЧАНИЯ
По некоторым причинам, на моей машине, xvkbd
используют одну из моих вторичных разметок (испанский язык) вместо моего основного одно (американский английский язык), и это заставляет {
на самом деле печатать "
. Если Вы также имеете эту проблему, просто играете вокруг немного для обнаружения, которому ключ соответствует {
с используемым расположением. С другой стороны, можно вырыть глубже и выяснить, откуда xvkbd
получает locale
настройки.
Как зарегистрировано в подобные вопросы (, Почему эти команды xte работают в терминале, но не при привязке с xbindkeys? ), можно попросить xbindkeys
инициировать события на выпуске (на, настраивают):
"xdotool key braceleft"
Release+Control+Alt + 7
Таким образом, нет никакого конфликта между ключами, используемыми для ярлыка и отправленных.
У меня недавно была эта проблема, где я пытался моделировать Игру/Паузу медиа (XF86AudioPlay) ключевое использование Ctrl + G. После некоторого исследования это появилось не, только делают я должен уравновеситься Управление , но также и ключ g (который является тем, чему было нужно эти sleep 0.1
задержка для начала). Если я уравновешиваю оба из этих ключей при помощи keyup
в xdotool, а также - clearmodifiers переключатель, он работает. Это - моя новая команда в моем .xbindkeys.rc файле:
"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g