ฉันจะทำการแมปปุ่มค้นหาบน 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 อูบุนตูเห็นการคลิกและวางไข่ในกล่องโต้ตอบการค้นหา แต่ไม่มีร่องรอยการคลิกใน 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 ที่ถูกฆ่า พยายามอีกครั้งผลลัพธ์เดียวกัน
Stefano Borini

เปิดเทอร์มินัลtail -f /var/log/dmesgแล้วเรียกใช้จากนั้นลองกดปุ่ม คุณได้รับการส่งออกหมายถึงคีย์ / ปุ่ม?
เซท

1
ก่อนโพสต์คำตอบเรื่องไร้สาระอื่น ... หา ID ป้อนข้อมูลของเมาส์ของคุณด้วยแล้วหาโค้ดปุ่มคีย์ค้นหาของคุณด้วย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. ออกจากระบบและลงชื่อเข้าใช้เพื่อโหลดPATHของคุณใหม่

4. สร้างทางลัดที่กำหนดเอง

ไปSystem Settingsแล้วไปแล้ว KeyboardShortcuts

กด+ปุ่มที่ด้านล่างของกล่องโต้ตอบ fakepasteให้ชื่อทางลัดที่คุณกำลังจะสร้างและเติมคำสั่งใน: OKกด

disabledถัดไปไปทางลัดใหม่ของคุณคุณจะเห็น คลิกที่ข้อความนั้นแล้วกดปุ่มที่คุณต้องการจะกำหนดให้การจำลองแป้นพิมพ์ของคุณ

ตอนนี้คุณควรจะสามารถใช้คีย์ค้นหาของคุณเพื่อวาง!


1
ฉันไม่เห็นว่าสิ่งนี้จะช่วยอย่างไรกับปุ่มเมาส์มันเปลี่ยนแป้นพิมพ์ลัด
เซท

2
@iSeth: ประเด็นก็คือมันกลายเป็นว่าโลจิเทคเมาส์เป็นทั้งคีย์บอร์ดและเมาส์ มันเป็นเมาส์สำหรับทุกอย่างยกเว้นปุ่มค้นหาซึ่งมันทำหน้าที่เหมือนแป้นพิมพ์
Stefano Borini

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

และดูว่ามันใช้งานได้หรือไม่


ฉันต้องการให้คุณรู้ว่าฉันคิดว่าคุณทั้งคู่สมควรได้รับรางวัลในขณะที่คุณช่วยฉันอย่างมาก ฉันยังไม่รู้ว่าโซลูชันของคุณใช้ได้หรือไม่ฉันจะทดสอบพวกเขาในวันพรุ่งนี้ แต่เงินรางวัลนั้นหมดอายุแล้วและฉันไม่ต้องการให้ขยะสิ้นเปลือง ทันทีที่ฉันมีคะแนนมากพอฉันจะมอบรางวัลให้คุณเท่าเดิม ขอบคุณ
Stefano Borini

โอเคขอบคุณ (แม้ว่าฉันจะไม่ทราบว่าเป็นไปได้) ดีใจที่ได้รับความช่วยเหลือ;)
แกร์ฮาร์ดเบอร์เกอร์

อืม ... คุณพูดถูก ฉันสามารถได้รับรางวัลที่นี่เท่านั้น ไม่ต้องกังวลทันทีที่ฉันมีตัวแทนมากพอฉันจะให้คำตอบอย่างใดอย่างหนึ่งของคุณ
Stefano Borini

ไม่ไม่ไม่ต้องกังวล ฉันค่อนข้างเป็นไร;)
แกร์ฮาร์ดเบอร์เกอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.