Bagaimana cara memetakan kembali tombol pencarian di Logitech MX400 saya?

10

Saya memiliki nirkabel MX400 logitech. Ini memiliki tombol pencarian yang ingin saya gunakan untuk menempel (bukan roda gulir yang sangat sensitif tapi sulit ditekan). Saya sudah memetakan kembali tombol lain dengan xbindkeys, dan menggunakan xev untuk menemukan kode tekan tombol, tetapi ini tidak berfungsi untuk tombol pencarian. menggunakan xev dan mengklik tombol pencarian saya mendapatkan acara berikut

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

Tidak ada acara ButtonPress. Tampaknya tombol pencarian dicegat pada tingkat di bawah peristiwa X. Ada ide? Saya punya ubuntu 12.04. Ubuntu benar-benar melihat klik dan memunculkan dialog pencarian, tetapi tidak ada jejak peristiwa klik di xev.

Edit

Saya memeriksa metode yang disediakan dengan xmodmap. .XmodmapSekarang saya berisi baris berikut

keycode 225 = XF86Paste NoSymbol XF86Paste``

menjalankan xmodmap ~/.Xmodmapsekarang menonaktifkan tombol sama sekali (atau setidaknya, saya tidak mendapatkan hasil apa pun dengan menekannya). Saya mencoba xmodmap -pkedan mencetak:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

Cukup aneh. Semua entri lainnya diformat sama. Saya dekat dengan solusinya, tetapi masih ada yang aneh.

Edit 2

Saya mencoba menjalankan xinput (tidak pernah mendengar perintah ini. Hal yang luar biasa). Ada dua entri untuk Logitech. Ini adalah output dari daftar masing-masing (id 9 dan 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

Perangkat penguji 9 tidak melakukan apa pun dengan tombol. Perangkat pengujian 10 malah berfungsi, dan ini adalah output saat saya mengklik

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

Jadi tampaknya mouse bertindak sebagai keyboard dalam hal ini, tetapi untuk beberapa alasan, xmodmap tidak melakukan apa-apa ketika menerima kunci 225.

** Edit **

Saya dapat mengonfirmasi bahwa menambahkan keycode 225 = acetakan asetiap kali saya mengklik tombol. Jadi masalahnya tampaknya terkait dengan bagaimana XF86Paste sebenarnya ditangani. Saya mengirimnya, tapi itu tidak menempel.

Stefano Borini
sumber
Anda telah xbindkeysmengatur untuk menjalankan ketika Anda memulai dengan benar? Bisakah Anda menonaktifkannya dan coba lagi?
Seth
@ iSeth: membunuh xbindkeys. Mencoba lagi, hasil yang sama.
Stefano Borini
Buka terminal dan jalankan tail -f /var/log/dmesgkemudian coba tekan tombol. Apakah Anda mendapatkan output yang merujuk ke tombol / tombol?
Seth
1
Sebelum memposting jawaban lain yang tidak masuk akal ... cari tahu id input mouse Anda dengan xinput listkemudian cari tahu kode tombol dengan kunci pencarian Anda xinput test <MOUSE ID>. Apakah ini berhasil?
mrcktz
1
Tampaknya ada bug yang dikonfirmasi yang memungkinkan xevmenampilkan acara XF86Paste / XF86Copy, tetapi tidak ada yang terjadi. Itu berarti Anda harus menggunakan kombinasi tombol CTRL + v untuk menempel. Xmodmap memetakan tombol 1: 1, tetapi Anda dapat menggunakan pengaturan pintasan keyboard untuk memicu eksekusi perintah pada penekanan tombol (lihat jawaban saya).
mrcktz

Jawaban:

3

Untuk mensimulasikan acara keyboard, saya sarankan Anda alat xdotool yang hebatInstal xdotool .

1. Pasangxdotool melalui terminal ( CTRL+ ALT+ T):

sudo apt-get install xdotool

atau gunakan Pusat Perangkat LunakInstal xdotool .

2. Buat skrip yang menggunakan xdotool untuk meniru peristiwa key CTRLdan v. Di terminal:

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

Salin konten berikut ke jendela editor yang terbuka. Setelah menyalin kode, simpan, lalu tutup:

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

Sekarang buat skrip dapat dieksekusi:

chmod +x ~/bin/fakepaste

3. Logout dan login untuk memuat kembali PATH Anda .

4. Buat pintasan khusus

Pergi ke System Settings, lalu ke Keyboard, lalu Shortcuts.

Tekan +tombol di bagian bawah dialog. Berikan nama untuk shortcut Anda tentang untuk membuat dan untuk mengisi perintah dalam: fakepaste. Tekan OK.

Di sebelah pintasan baru Anda, Anda akan melihat disabled. Klik pada teks itu dan kemudian tekan tombol yang ingin Anda tetapkan untuk emulasi keyboard Anda.

Anda sekarang harus dapat menggunakan kunci pencarian Anda untuk menempel!

mrcktz
sumber
1
Saya tidak melihat bagaimana ini akan membantu pada tombol mouse, itu mengubah cara pintas keyboard .
Seth
2
@ iSeth: Intinya adalah ternyata mouse logitech adalah keyboard dan mouse. Ini adalah mouse untuk semuanya kecuali tombol pencarian, yang berfungsi seperti keyboard
Stefano Borini
2

solusi xbindkeys dengan xdotool

Untuk solusi ini Anda akan perlu xbindkeysdanxdotool

Bunuh xbindkeys dan buang konfigurasi tombol Anda

killall xbindkeys

dan

xbindkeys --defaults >> ~/.xbindkeysrc

Tambahkan binding baru Anda

Sekarang Anda dapat memodifikasi file ini untuk menambahkan binding kustom, ini memiliki formulir

"<command>"
  <key combination>

jadi jika Anda menambahkan

"gedit"
  m:0x0 +b:4

Anda akan membuka geditsetiap kali Anda menggulir ke atas.

Jadi sekarang Anda dapat mencoba salah satu dari yang berikut, pilih salah satu yang paling cocok untuk Anda. Dalam semua kasus xdotool click 2akan ditiru, ini adalah tombol tengah mouse, dan ini akan menempelkan terminal di dalam dan luar.

  1. mencegat 225 dari mouse Anda :

    "xdotool click 2"
      m:0x0 +b:225
    
  2. mencegat kode kunci 225 secara umum :

    "xdotool click 2"
      c:225
    
  3. ganti semua XF86Searchacara (kembalikan pengaturan mouse Anda ke pengaturan asli terlebih dahulu, sehingga Anda mendapatkan XF86Searchkembali):

    "xdotool click 2"
      XF86Search
    

Mulai xbindkeys dan uji

Lari

xbindkeys

dan lihat apakah itu berfungsi.

Gerhard Burger
sumber
Saya ingin memberi tahu Anda bahwa saya pikir Anda berdua pantas mendapatkan hadiah karena Anda banyak membantu saya. Saya masih tidak tahu apakah solusi Anda berhasil, saya akan mengujinya besok, tetapi hadiahnya sudah berakhir dan saya tidak ingin itu sia-sia. Segera setelah saya memiliki poin yang cukup, saya akan memberi Anda karunia yang sama. Terima kasih
Stefano Borini
Oke, terima kasih (walaupun saya tidak tahu apakah itu mungkin). Senang bisa membantu;)
Gerhard Burger
uhm ... kamu benar. Saya hanya dapat memberikan satu di sini. Jangan khawatir, Segera setelah saya memiliki cukup perwakilan, saya akan memberikan salah satu dari jawaban Anda yang lain.
Stefano Borini
Tidak, tidak, jangan repot-repot. Saya cukup baik-baik saja;)
Gerhard Burger