Как переназначить кнопку поиска на моем Logitech MX400?

10

У меня 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настроили запуск при запуске? Вы можете отключить его и попробовать еще раз?
Сет
@iSeth: убил xbindkeys. Попробовал еще раз, тот же результат.
Стефано Борини
Откройте терминал и запустите, tail -f /var/log/dmesgзатем попробуйте нажать кнопку. Вы получаете какой-либо вывод, ссылаясь на клавиши / кнопки?
Сет
1
Прежде чем опубликовать еще один бессмысленный ответ ... выясните идентификатор ввода мыши с помощью, а xinput listзатем узнайте код кнопки вашего ключа поиска с помощью xinput test <MOUSE ID>. Это работает?
mrcktz
1
Кажется, есть подтвержденная ошибка, которая позволяет xevпоказывать события XF86Paste / XF86Copy, но ничего не происходит. Это означает, что для вставки необходимо использовать комбинацию клавиш CTRL + v. Xmodmap отображает кнопки 1: 1, но вы можете использовать настройки сочетаний клавиш для запуска команды при нажатии клавиши (см. Мой ответ).
mrcktz

Ответы:

3

Для имитации событий клавиатуры я предлагаю вам отличный инструмент xdotoolУстановите xdotool .

1. Установитеxdotool через терминал ( CTRL+ ALT+ T):

sudo apt-get install xdotool

или используйте Центр программного обеспеченияУстановите xdotool .

2. Создайте скрипт, который использует xdotool для эмуляции событий нажатия клавиш CTRLи v. В терминале:

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. Нажмите на этот текст, а затем нажмите клавишу, которую хотите назначить эмуляции клавиатуры.

Теперь вы сможете использовать свой поисковый ключ для вставки!

mrcktz
источник
1
Я не вижу, как это поможет на кнопке мыши, это меняет сочетания клавиш.
Сет
2
@iSeth: Дело в том, что оказалось, что мышь Logitech - это и клавиатура, и мышь. Это мышь для всего, кроме кнопки поиска, где она действует как клавиатура
Стефано Борини
2

Решение xbindkeys с xdotool

Для этого решения вам понадобится xbindkeysиxdotool

Убейте xbindkeys и сбросьте настройки вашей кнопки

killall xbindkeys

и

xbindkeys --defaults >> ~/.xbindkeysrc

Добавьте свои новые привязки

Теперь вы можете изменить этот файл для добавления пользовательских привязок, они имеют вид

"<command>"
  <key combination>

так что если вы добавите

"gedit"
  m:0x0 +b:4

вы будете открывать geditкаждый раз, когда прокручиваете вверх.

Так что теперь вы можете попробовать один из следующих, выберите тот, который лучше всего подходит для вас. В любом случае xdotool click 2будет эмулироваться, это среднее нажатие кнопки мыши, и это вставит как внутренние, так и внешние терминалы.

  1. перехватить 225 от вашей мыши :

    "xdotool click 2"
      m:0x0 +b:225
    
  2. перехватить код 225 в целом :

    "xdotool click 2"
      c:225
    
  3. Замените все XF86Searchсобытия (сначала XF86Searchверните исходные настройки мыши, чтобы получить обратно):

    "xdotool click 2"
      XF86Search
    

Запустите xbindkeys и протестируйте

Пробег

xbindkeys

и посмотреть, если это работает.

Герхард Бургер
источник
Я хочу сообщить вам, что я думаю, что вы оба заслуживаете щедрости, поскольку вы мне очень помогли. Я до сих пор не знаю, работают ли ваши решения, завтра я их опробую, но щедрость истекает, и я не хочу, чтобы она пропала даром. Как только у меня будет достаточно очков, я дам вам такую ​​же награду. Спасибо
Стефано Борини
Ок, спасибо (хотя я не знаю, возможно ли это). Рад быть полезным;)
Герхард Бургер
хм ... ты прав. Я могу только наградить один здесь. Не волнуйтесь, как только у меня будет достаточно репутации, я дам один из ваших ответов.
Стефано Борини
Нет, не беспокойся. Я в порядке;)
Герхард Бургер