Come rimappare il pulsante di ricerca sul mio Logitech MX400?


10

Ho un logitech MX400 wireless. Ha un pulsante di ricerca che vorrei utilizzare per incollare (invece della rotella di scorrimento estremamente sensibile ma difficile da premere). Ho già rimappato altri pulsanti con xbindkeys e usato xev per trovare il codice di pressione del pulsante, ma questo non funziona per il pulsante di ricerca. usando xev e facendo clic sul pulsante di ricerca ottengo i seguenti eventi

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

Nessun evento ButtonPress. Sembra che il pulsante di ricerca sia intercettato a un livello inferiore agli eventi X. Qualche idea? Ho Ubuntu 12.04. Ubuntu in realtà vede il clic e genera una finestra di ricerca, ma non c'è traccia di un evento click nel xev.

modificare

Ho controllato il metodo fornito con xmodmap. Il mio .Xmodmapora contiene la seguente riga

keycode 225 = XF86Paste NoSymbol XF86Paste``

l'esecuzione xmodmap ~/.Xmodmapora disabilita del tutto il pulsante (o almeno, non ottengo alcun risultato premendolo). Ho provato xmodmap -pkee stampa:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

Abbastanza strano. Tutte le altre voci sono formattate in modo simile. Sono vicino alla soluzione, ma c'è ancora qualcosa di strano.

Modifica 2

Ho provato a eseguire xinput (mai sentito parlare di questo comando. Cose fantastiche). Vi sono due voci per Logitech. Ecco l'output di elencare ciascuno di essi (ID 9 e 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

Il test del dispositivo 9 non fa nulla con il pulsante. Il dispositivo di test 10 invece funziona, e questo è l'output mentre clicco

$ xinput test 10
key press   225 
key release 225 
key press   225 
key release 225 
key press   225 
key release 225

Quindi sembra che il mouse agisca come una tastiera in questo senso, ma per qualche ragione, xmodmap non fa nulla quando riceve il tasto 225.

** Modificare **

Posso confermare che l'aggiunta di keycode 225 = astampe aogni volta che faccio clic sul pulsante. Quindi il problema sembra essere correlato al modo in cui XF86Paste viene effettivamente gestito. Lo sto inviando, ma non sta incollando.


Hai xbindkeysimpostato per l'esecuzione all'avvio giusto? Puoi disabilitarlo e riprovare?
Seth,

@iSeth: xbindkeys uccisi. Riprovato, stesso risultato.
Stefano Borini,

Apri un terminale ed esegui, tail -f /var/log/dmesgquindi prova a premere il pulsante. Hai qualche output riferito a tasti / pulsanti?
Seth,

1
Prima di pubblicare un'altra risposta senza senso ... scopri l'id di input del tuo mouse con xinput listquindi scopri il codice del pulsante della tua chiave di ricerca con xinput test <MOUSE ID>. funziona?
Mrcktz,

1
Sembra che ci sia un bug confermato che consente di xevmostrare gli eventi XF86Paste / XF86Copy, ma non succede nulla. Ciò significa che devi usare la combinazione di tasti CTRL + v per incollare. Xmodmap mappa i pulsanti 1: 1, ma è possibile utilizzare le impostazioni delle scorciatoie da tastiera per attivare l'esecuzione di un comando alla pressione dei tasti (vedere la mia risposta).
Mrcktz,

Risposte:


3

Per simulare gli eventi della tastiera ti consiglio il fantastico strumento xdotoolInstalla xdotool .

1. Installaxdotool tramite terminale ( CTRL+ ALT+ T):

sudo apt-get install xdotool

o utilizzare il Software CenterInstalla xdotool .

2. Creare uno script che utilizza xdotool per emulare gli eventi chiave giù di CTRLe v. Nel terminal:

mkdir -p ~/bin  
gedit ~/bin/fakepaste

Copia il seguente contenuto nella finestra dell'editor che si è aperta. Dopo aver copiato il codice salvare, quindi chiuderlo:

#!/bin/sh
exec /usr/bin/xdotool key CTRL+V  
EOF

Ora rendi eseguibile lo script:

chmod +x ~/bin/fakepaste

3. Disconnettersi e accedere per ricaricare il PERCORSO .

4. Creare il collegamento personalizzato

Vai a System Settings, quindi vai a Keyboard, quindi Shortcuts.

Premi il +pulsante nella parte inferiore della finestra di dialogo. Fornire un nome per il collegamento che si sta per creare e per il comando di riempimento in: fakepaste. Press OK.

Accanto al nuovo collegamento vedrai disabled. Fare clic su quel testo e quindi premere il tasto che si desidera assegnare all'emulazione della tastiera.

Ora dovresti essere in grado di utilizzare la chiave di ricerca per incollare!


1
Non vedo come questo possa aiutare su un pulsante del mouse, cambia le scorciatoie da tastiera .
Seth,

2
@iSeth: Il punto è che si è scoperto che il mouse logitech è sia una tastiera che un mouse. È un mouse per tutto tranne il pulsante di ricerca, dove si comporta come una tastiera
Stefano Borini,

2

soluzione xbindkeys con xdotool

Per questa soluzione avrai bisogno xbindkeysexdotool

Uccidi xbindkey e scarica la configurazione dei pulsanti

killall xbindkeys

e

xbindkeys --defaults >> ~/.xbindkeysrc

Aggiungi i tuoi nuovi attacchi

Ora puoi modificare questo file per aggiungere associazioni personalizzate, queste hanno il modulo

"<command>"
  <key combination>

quindi se aggiungi

"gedit"
  m:0x0 +b:4

ti aprirai geditogni volta che scorri verso l'alto.

Quindi ora puoi provare una delle seguenti, scegli quella che funziona meglio per te. In ogni caso xdotool click 2verrà emulato, si tratta della pressione del pulsante centrale del mouse e questo incollerà i terminali interno ed esterno.

  1. intercetta il 225 dal mouse :

    "xdotool click 2"
      m:0x0 +b:225
    
  2. intercettare il codice chiave 225 in generale :

    "xdotool click 2"
      c:225
    
  3. sostituisci tutti gli XF86Searcheventi (ripristina prima le impostazioni del mouse alle impostazioni originali, in modo da ottenere il XF86Searchritorno):

    "xdotool click 2"
      XF86Search
    

Avviare xbindkeys e testare

Correre

xbindkeys

e vedere se funziona.


Voglio farti sapere che penso che entrambi meritiate la generosità poiché mi avete aiutato molto. Non so ancora se le tue soluzioni funzioneranno, le testerò domani, ma la taglia sta scadendo e non voglio che vada sprecata. Non appena avrò abbastanza punti, ti garantirò la stessa generosità. Grazie
Stefano Borini,

Oke, grazie (anche se non so se sia possibile). Felice di essere di aiuto;)
Gerhard Burger

uhm ... hai ragione. Posso premiarne solo uno qui. Non preoccuparti, non appena avrò abbastanza rappresentante, concederò una delle tue altre risposte.
Stefano Borini,

No, no, non preoccuparti. Sto abbastanza bene;)
Gerhard Burger il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.