У меня есть беспроводной Logitech MX400. У него есть кнопка поиска, которую я хотел бы использовать для вставки (вместо чрезвычайно чувствительного, но жесткого, чтобы нажимать колесо прокрутки). Я уже переназначил другие кнопки с помощью 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 нет следа события click.
Edit
Я проверил метод, предоставленный с помощью xmodmap. Теперь мой .Xmodmap содержит следующую строку
keycode 225 = XF86Paste NoSymbol XF86Paste``
running xmodmap ~/.Xmodmap теперь полностью отключает кнопку (или, по крайней мере, я не получаю никакого результата, нажимая ее). Я попробовал xmodmap -pke, и он печатает:
keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste
Странно. Все остальные записи аналогично отформатированы.
Edit
Я попытался запустить 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 и xdotool
Убейте xbindkeys и сбросьте конфигурацию своей кнопки
killall xbindkeys
[d4 ] и xbindkeys --defaults >> ~/.xbindkeysrc
Убейте xbindkeys и сбросьте конфигурацию своей кнопки
Теперь вы можете изменить этот файл, чтобы добавить пользовательские привязки, они имеют форму
"<command>"
<key combination>
, поэтому, если вы добавите
"gedit"
m:0x0 +b:4
, вы откроете gedit при каждом прокрутке вверх.
Итак, теперь вы можете попробовать одно из следующих , выберите тот, который лучше всего подходит для вас. Во всех случаях xdotool click 2 будет эмулироваться, это средняя кнопка мыши, и это будет вставлять как внутренние, так и внешние терминалы.
перехватить 225 с вашей мыши:"xdotool click 2"
m:0x0 +b:225
код перехвата 225 в general: "xdotool click 2"
c:225
заменить все события XF86Search (сначала верните настройки мыши в исходные настройки, чтобы вы вернули XF86Search назад: "xdotool click 2"
XF86Search
Запустите xbindkeys и проверьте [!d21 ]
Запустите
xbindkeys
и посмотрите, работает ли он.