У меня есть беспроводная связь 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 нет никаких следов события щелчка.
Редактировать
Я проверил метод, предоставляемый 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. Я посылаю это, но это не вставка.
Для моделирования событий клавиатуры, я предлагаю Вас большой инструмент xdotool.
1. Установка xdotool
через терминал (CTRL+ALT+T):
sudo apt-get install xdotool
или используйте Центр программного обеспечения.
2. Создайте сценарий, который использует xdotool для эмуляции ключа вниз события CTRL и против В терминале:
mkdir -p ~/bin
gedit ~/bin/fakepaste
Скопируйте следующее содержание в окно редактора, которое открылось. После копирования кода сохраняют, затем закрывают его:
#!/bin/sh
exec /usr/bin/xdotool key CTRL+V
EOF
Теперь сделайте исполняемый файл сценария:
chmod +x ~/bin/fakepaste
3. Выйдите из системы и войдите в систему для перезагрузки ПУТИ.
4. Создайте пользовательский ярлык
Перейдите в System Settings
, затем перейдите в Keyboard
, затем Shortcuts
.
Нажмите +
кнопка у основания диалогового окна. Обеспечьте название ярлыка, который Вы собираетесь создать, и команды заполните: fakepaste
.Пресса OK
.
Рядом с Вашим новым ярлыком Вы будете видеть disabled
. Нажмите на тот текст и затем нажмите клавишу, Вы хотите быть присвоенными своей эмуляции клавиатуры.
Необходимо теперь смочь использовать ключ поиска для вставки!
Для этого решения Вам будет нужно xbindkeys
и xdotool
Уничтожьте xbindkeys и выведите свою конфигурацию кнопки
killall xbindkeys
и
xbindkeys --defaults >> ~/.xbindkeysrc
Добавьте свою новую привязку
Теперь можно изменить этот файл для добавления пользовательской привязки, они имеют форму
"<command>"
<key combination>
таким образом, если Вы добавляете
"gedit"
m:0x0 +b:4
Вы откроетесь gedit
каждый раз Вы прокручиваете.
Таким образом, теперь можно попробовать одно из следующих, выбрать то, которое работает лучше всего на Вас. Во всем случае xdotool click 2
будет эмулирован, это - нажатие средней кнопки мыши, и это вставит обоих внутри и снаружи терминалов.
прервите 225 от своей мыши:
"xdotool click 2"
m:0x0 +b:225
прервите код клавиши 225 в целом:
"xdotool click 2"
c:225
замените все XF86Search
события (возвращаются Ваши настройки мыши к исходным настройкам сначала, так, чтобы Вы добрались XF86Search
назад):
"xdotool click 2"
XF86Search
Запустите xbindkeys и тест
Выполненный
xbindkeys
и посмотрите, работает ли это.