У меня Logitech MX400 Wireless. Он имеет кнопку поиска, которую я хотел бы использовать для вставки (вместо чрезвычайно чувствительного, но трудно нажимаемого колеса прокрутки). Я уже переназначил другие кнопки с помощью xbindkeys и использовал xev, чтобы найти код нажатия кнопки, но это не работает для кнопки поиска. используя xev и нажав кнопку поиска, я получаю следующие события
FocusOut event, serial 34, synthetic NO, window 0x3c00001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 34, synthetic NO, window 0x3c00001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 34, synthetic NO, window 0x0,
keys: 4294967275 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PropertyNotify event, serial 34, synthetic NO, window 0x3c00001,
atom 0x1d7 (_NET_WM_ICON_GEOMETRY), time 23653064, state PropertyNewValue
Нет событий ButtonPress. Кажется, что кнопка поиска перехвачена на уровне ниже X событий. Есть идеи? У меня есть Ubuntu 12.04. Ubuntu фактически видит щелчок и порождает диалоговое окно поиска, но в xev нет никаких следов события щелчка.
редактировать
Я проверил метод, предоставленный с xmodmap. Моя .Xmodmap
сейчас содержит следующую строку
keycode 225 = XF86Paste NoSymbol XF86Paste``
запуск xmodmap ~/.Xmodmap
сейчас отключает кнопку вообще (или, по крайней мере, я не получаю никакого результата, нажимая ее). Я попытался, xmodmap -pke
и это распечатывает:
keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste
Достаточно странно. Все остальные записи имеют одинаковый формат. Я близок к решению, но есть еще что-то странное.
Редактировать 2
Я пытался запустить xinput (никогда не слышал об этой команде. Удивительные вещи). Есть две записи для Logitech. Вот вывод списка каждого из них (id 9 и 10)
Logitech USB Receiver id=9 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 9. Type: XIButtonClass
Buttons supported: 24
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
Button state:
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 0:
Label: Rel X
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 1:
Label: Rel Y
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 2:
Label: Rel Horiz Wheel
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 3:
Label: Rel Vert Wheel
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 9. Type: XIScrollClass
Scroll info for Valuator 2
type: 2 (horizontal)
increment: 1.000000
flags: 0x0
Class originated from: 9. Type: XIScrollClass
Scroll info for Valuator 3
type: 1 (vertical)
increment: -1.000000
flags: 0x2 ( preferred )
Logitech USB Receiver id=10 [slave pointer (2)]
Reporting 6 classes:
Class originated from: 10. Type: XIButtonClass
Buttons supported: 7
Button labels: "Button 0" "Button Unknown" "Button Unknown" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right"
Button state:
Class originated from: 10. Type: XIKeyClass
Keycodes supported: 248
Class originated from: 10. Type: XIValuatorClass
Detail for Valuator 0:
Label: Rel X
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 10. Type: XIValuatorClass
Detail for Valuator 1:
Label: Rel Y
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 10. Type: XIValuatorClass
Detail for Valuator 2:
Label: Rel Horiz Wheel
Range: -1.000000 - -1.000000
Resolution: 1 units/m
Mode: relative
Class originated from: 10. Type: XIScrollClass
Scroll info for Valuator 2
type: 2 (horizontal)
increment: 1.000000
flags: 0x0
Тестирующее устройство 9 ничего не делает с кнопкой. Тестирующее устройство 10 вместо этого работает, и это вывод, когда я нажимаю
$ xinput test 10
key press 225
key release 225
key press 225
key release 225
key press 225
key release 225
Таким образом, похоже, что мышь действует как клавиатура в этом отношении, но по какой-то причине xmodmap ничего не делает, когда получает клавишу 225.
** Редактировать **
Я могу подтвердить, что добавление keycode 225 = a
печатает a
каждый раз, когда я нажимаю кнопку. Таким образом, проблема, похоже, связана с тем, как на самом деле обрабатывается XF86Paste. Я отправляю это, но это не вставка.
xbindkeys
настроили запуск при запуске? Вы можете отключить его и попробовать еще раз?tail -f /var/log/dmesg
затем попробуйте нажать кнопку. Вы получаете какой-либо вывод, ссылаясь на клавиши / кнопки?xinput list
затем узнайте код кнопки вашего ключа поиска с помощьюxinput test <MOUSE ID>
. Это работает?xev
показывать события XF86Paste / XF86Copy, но ничего не происходит. Это означает, что для вставки необходимо использовать комбинацию клавиш CTRL + v. Xmodmap отображает кнопки 1: 1, но вы можете использовать настройки сочетаний клавиш для запуска команды при нажатии клавиши (см. Мой ответ).Ответы:
Для имитации событий клавиатуры я предлагаю вам отличный инструмент xdotool .
1. Установите
xdotool
через терминал ( CTRL+ ALT+ T):или используйте Центр программного обеспечения .
2. Создайте скрипт, который использует xdotool для эмуляции событий нажатия клавиш CTRLи v. В терминале:
Скопируйте следующий контент в открывшееся окно редактора. После копирования кода сохраните и закройте его:
Теперь сделайте скрипт исполняемым:
3. Выйдите и войдите, чтобы перезагрузить ваш путь .
4. Создайте пользовательский ярлык
Иди
System Settings
, потом идиKeyboard
, тогдаShortcuts
.Нажмите
+
кнопку внизу диалога. Введите имя для ярлыка , которую Вы собираетесь создать и для заливки команды в:fakepaste
. НажмитеOK
.Рядом с вашим новым ярлыком вы увидите
disabled
. Нажмите на этот текст, а затем нажмите клавишу, которую хотите назначить эмуляции клавиатуры.Теперь вы сможете использовать свой поисковый ключ для вставки!
источник
Решение xbindkeys с xdotool
Для этого решения вам понадобится
xbindkeys
иxdotool
Убейте xbindkeys и сбросьте настройки вашей кнопки
и
Добавьте свои новые привязки
Теперь вы можете изменить этот файл для добавления пользовательских привязок, они имеют вид
так что если вы добавите
вы будете открывать
gedit
каждый раз, когда прокручиваете вверх.Так что теперь вы можете попробовать один из следующих, выберите тот, который лучше всего подходит для вас. В любом случае
xdotool click 2
будет эмулироваться, это среднее нажатие кнопки мыши, и это вставит как внутренние, так и внешние терминалы.перехватить 225 от вашей мыши :
перехватить код 225 в целом :
Замените все
XF86Search
события (сначалаXF86Search
верните исходные настройки мыши, чтобы получить обратно):Запустите xbindkeys и протестируйте
Пробег
и посмотреть, если это работает.
источник