ฉันต้องดิ้นรนกับสิ่งนี้ในช่วงสุดสัปดาห์และจำเป็นต้องทำการแมปปุ่มเมาส์ใหม่
ฉันต้องดิ้นรนกับสิ่งนี้ในช่วงสุดสัปดาห์และจำเป็นต้องทำการแมปปุ่มเมาส์ใหม่
คำตอบ:
ฉันมีเมาส์ Logitech ที่มี 9 ปุ่มและกดปุ่ม "กลาง" (# 2) เกี่ยวข้องกับการคลิกล้อเลื่อน ฉันไม่ชอบสิ่งนี้เพราะฉันเงอะงะและมักจะจบลงด้วยการเลื่อนหน้าต่างฉันอยู่ในขณะที่ฉันพยายามคลิกล้อ ดังนั้นฉันต้องการแมปปุ่มด้านข้างใหม่โดยอัตโนมัติ (# 9 ในกรณีนี้) ไปที่ปุ่มกลาง (# 2) ฉันต้องการแมปปุ่มด้านล่าง (# 8) เพื่อให้สามารถดับเบิลคลิกที่ปุ่มซ้าย (# 1) ได้
แม้ว่าเป้าหมายของฉันจะเฉพาะเจาะจงโซลูชันด้านล่างสามารถใช้กับสถานการณ์ใด ๆ ที่คุณต้องการทำการแมปปุ่มเมาส์ใหม่โดยอัตโนมัติเมื่อเริ่มต้น
คุณจะต้องxinput
ติดตั้งสำหรับงานนี้ สามารถทำได้ทั้งหมดใน.xsessionrc
ไฟล์ของคุณ ก่อนอื่นใช้xinput
เพื่อค้นหาชื่อที่กำหนดให้เมาส์ของคุณซึ่งสัมพันธ์กับ ID อุปกรณ์อินพุต ด้านล่างคือตัวอย่างผลลัพธ์จากแล็ปท็อปของฉัน:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
เมาส์ของฉันเรียกตัวเองและจะแสดงเป็นLogitech USB Laser Mouse
id=11
เมาส์ของคุณจะมีชื่ออื่น การหาว่าเหลืออยู่เท่าการออกกำลังกายสำหรับผู้อ่าน
ในขณะที่คุณยังคงทราบ ID ของอุปกรณ์ในที่นี้เซสชั่นหาวิธีการหลายปุ่มจัดการการป้อนข้อมูลที่คิดว่าเมาส์ของคุณมีโดยการใช้ สิ่งนี้อาจแตกต่างจากจำนวนปุ่มที่ปรากฏบนอุปกรณ์xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
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"
ด้วยเมาส์ของฉันมีเพียงปุ่มทางกายภาพที่ชัดเจนเพียง 9 ปุ่มเท่านั้น แต่xinput
รายงานว่า 16
เมื่อพิจารณาถึงลักษณะของ USB ID นี้สามารถเปลี่ยนแปลงได้ทุกครั้งที่คุณรีสตาร์ทดังนั้นจึงไม่เพียงพอที่จะเขียนสคริปต์บางสิ่งที่ป้อนรหัสแบบคงที่ที่คุณค้นพบครั้งเดียว คุณจะต้องวิเคราะห์คำนี้แบบไดนามิกเมื่อเริ่มต้นและดำเนินการทำแผนที่ใหม่ตาม ID ปัจจุบัน
เมื่อคุณรู้ชื่อแล้วคุณสามารถใช้xinput test
เพื่อกำหนดว่าคีย์ใดที่ทำการแมปใหม่ กดปุ่มเมาส์ที่คุณต้องการแมปจากและไปเพื่อรับดัชนีของพวกเขา (สำหรับการอ้างอิง 1, 2 และ 3 "เสมอ" (เช่นปกติ) หมายถึงปุ่มซ้าย, กลาง, และขวาของเมาส์ 3 ปุ่มการทำแผนที่ทั่วไปซ้ำจะเป็นการย้อนกลับเพื่อทำให้เมาส์ใช้มือซ้าย )
button press 2
button release 2
button press 9
button release 9
ในกรณีนี้ฉันพบว่าฉันต้องการแมปปุ่ม # 9 (ด้านบนสุด) ถึงปุ่ม # 2 (กลาง)
เมื่อคุณรู้ว่าเมาส์ของคุณมีชื่อว่าอะไรและปุ่มใดที่คุณต้องการเปลี่ยนคุณสามารถเขียน~/.xsessionrc
สคริปต์ที่จะเรียกxinput
ใช้การแมปปุ่มอีกครั้งเมื่อเริ่มต้น ด้านล่างเป็นสคริปต์ที่สมบูรณ์ของฉัน
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
บรรทัดแรกที่นี่กำหนดตัวแปรเซสชั่นชั่วคราวเท่ากับ ID xinput
ของเมาส์ตามที่รายงานโดย สิ่งนี้ทำได้โดยgrep
การใช้ชื่อเมาส์ที่รู้จักในรายงานจากxinput
นั้นใช้sed
เพื่อแยกหมายเลข ID จากid=xxx
โทเค็นนั้นในรายงาน ค่านี้จะใช้ในxinput set-button-map
คำสั่งซึ่งดำเนินการทำแผนที่ใหม่ ในตัวอย่างข้างต้นการเปลี่ยนแปลงอย่างเดียวคือปุ่ม # 9 กำลังถูกแมปซ้ำกับปุ่มเลียนแบบ # 2 อื่น ๆ ทั้งหมดยังคงอยู่ในการตั้งค่าเริ่มต้นของพวกเขา
ปรับปรุง:ในฐานะที่เป็น @Lokasenna ชี้ให้เห็นด้านล่างหากอุปกรณ์ของคุณรายงานตัวเองเป็นทั้งเมาส์และแป้นพิมพ์ที่คุณอาจจำเป็นต้อง จำกัด จำนวนผลมาจากการใช้grep
-m 1
ดูคำตอบนี้ด้วย
คุณจะต้องxinput
, xbindkeys
และxautomation
(รวมxte
) ติดตั้งสำหรับงานนี้
ใช้xinput list
และxinput test
เพื่อค้นหา ID อุปกรณ์ของเมาส์และจำนวนปุ่มที่คุณต้องการกำหนด ในกรณีของฉันฉันต้องการแมปปุ่มด้านล่าง (# 8) ไปดับเบิลคลิกที่ปุ่มซ้าย (# 1)
~/.xbindkeysrc
การสร้างหรือแก้ไข รูปแบบของไฟล์นี้เป็นชุดของบรรทัดที่จับคู่ บรรทัดแรกคือคำสั่งที่จะดำเนินการสำหรับเหตุการณ์ บรรทัดที่สองคือคำอธิบายเหตุการณ์ เราจะใช้xte
องค์ประกอบของxautomation
การส่งกิจกรรมโดยตรงไปยังตัวจัดการอินพุต
ในการสร้างเหตุการณ์ดับเบิลคลิกเมื่อมีการปล่อยปุ่มฉันได้เพิ่มสิ่งต่อไปนี้:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
การกำหนดค่านี้แมปลำดับของการคลิกเมาส์สองครั้งที่ปุ่ม # 1 เพื่อปล่อยปุ่ม # 8 (ตามทฤษฎีแล้วฉันเดาว่าคุณสามารถแมปคำสั่งใด ๆกับปุ่มเมาส์ได้ แต่นี่เป็นกรณีที่พบบ่อยที่สุดดูคำตอบนี้สำหรับตัวอย่างที่ใช้งานได้จริง)
สำหรับผู้ใช้ที่มีเมาส์หลายตัวต่ออยู่กับระบบของคุณคุณจะต้องส่ง ID ของอุปกรณ์ด้วย สิ่งนี้อาจใช้ไม่ได้กับผู้ใช้ทั้งหมดและถูกค้นพบบน Ubuntu 16.04 พร้อม Unity
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
จากนั้นแก้ไขไฟล์. xbindkeysrc โดยอ้างอิง id = value จากเอาต์พุตคำสั่ง (id = 9 ในตัวอย่างนี้):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
คำสั่งเก่าด้วยsed
คำสั่งของคุณในตัวอย่างของฉัน ขอบคุณสำหรับการปรับปรุง!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
ไม่แสดงเมาส์ของฉันสองครั้งเช่นนี้↳ USB OPTICAL MOUSE id = 12 [ชี้ทาส (2)] ↳ USB OPTICAL MOUSE id = 13 [ชี้ทาส (2)] เฉพาะหมายเลข 13 xinput test
จะจับคำสั่งด้วย สคริปต์จะจับ ID แรกเสมอ แต่ทำไมมันถึงสองครั้งล่ะ ทั้งสองหายไปเมื่อฉันยกเลิกการเชื่อมต่อเมาส์นี้และปรากฏขึ้นอีกครั้งเมื่อเชื่อมต่อ
ขั้นตอนสั้น ๆ สำหรับสิ่งนี้คือ:
xinput
มียูทิลิตี้ที่เรียกว่าเป็น xinput list
หรือเพียงแค่xinput
จะแสดงอุปกรณ์อินพุต X และรหัสประจำตัวของพวกเขาทั้งหมด ที่นี่คุณจะพบ ID ของเมาส์ที่คุณต้องการทำการแมปใหม่
ฉันจะใช้ ID ของฉันเป็นตัวอย่างจากการตั้งค่าซึ่งก็คือ 21 จากนั้นxinput --get-button-map 21
จะส่งออก
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ตอนนี้ถ้าคุณต้องการพูดสลับปุ่มซ้ายและขวาที่คุณเรียกใช้
xinput --set-button-map 21 3 2 1
ที่นี่เราทำการแมปเสร็จแล้ว
สำหรับการเรียกใช้เมื่อเริ่มต้นให้ใส่ไฟล์นี้:
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
ให้สิทธิ์อนุญาตในการเรียกทำงาน
chmod +x leftmouseremap.sh
สุดท้ายให้เพิ่มสิ่งนี้ลงใน Statrtup Application ด้วยตนเองจาก GUI หรือถ้าคุณต้องการจาก CLI ให้ใส่ข้อความด้านล่าง (เปลี่ยนเส้นทางของคุณ) ใส่ไฟล์ไว้ในไฟล์ของคุณ~/.config/autostart
นี่คือของฉัน ( less .config/autostart/leftmouseremap.sh.desktop
):
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
โปรดทราบว่าด้วย KDE จะมีพา ธ~/.kde/Autosart
สำหรับผู้จัดการเดสก์ท็อปคนอื่น ๆ ซึ่งอาจแตกต่างกันอย่างเห็นได้ชัด /etc/rc.local
อีกวิธีหนึ่งคือการเริ่มต้นการทำงานที่สามารถทำได้ด้วยวิธีการทั่วไปโดยใช้
เมื่อใช้คำตอบที่ยอดเยี่ยมของ zerobandwidthอุปกรณ์บางอย่างเช่น MX Ergo ของ Logitech จะปรากฏเป็นทั้งตัวชี้และอุปกรณ์คีย์บอร์ด :
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
ดังนั้นgrep "Logitech MX Ergo"
สิ้นสุดสองคืนค่า ส่วนท้ายนั้นถูกรวมไว้เป็นรายการแรกในสตริงการแมปและไขสกรูของปุ่มเมาส์ทั้งหมด
การแก้ไขเป็นเรื่องง่ายเพียงใช้grep
อาร์กิวเมนต์การนับที่มากที่สุด-m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
ฉันสามารถเปลี่ยนการแมปของปุ่มกลางของเมาส์ Logitech เป็น 'Return' โดยใช้ Easystroke Gesture Recognition ซึ่งฉันดาวน์โหลดจาก Ubuntu Software Center แก้ไข: ในแอปพลิเคชันคุณจะต้องเลือกเพิ่มการกระทำตั้งชื่อให้เลือกประเภทคีย์คลิกที่รายละเอียดแล้วกด Enter กดปุ่ม Record Stroke และในระหว่างที่กดพร้อมท์กดที่ปุ่มกลาง
xinput
xinput list <devID>
ก่อนหน้า 12.04 มีเครื่องมือกราฟิกอย่างง่ายที่เรียกว่า "btnx" ในที่เก็บมาตรฐานซึ่งเพิ่มเป็น "คุณสมบัติปุ่ม" ในการกำหนดค่าระบบ น่าเศร้าอย่างไรก็ตามมันถูกทิ้ง PPA "ที่ไม่น่าเชื่อถือ" ได้รับการบำรุงรักษาในปัจจุบันสำหรับ 14.04, 16.04 และ 18.04 อยู่ที่นี่: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (ดูได้ที่https://launchpad.net/ubuntu/xenial/+source / btnx )
มันจะไม่รวมเข้ากับการตั้งค่าระบบ แต่ทำงานได้ค่อนข้างดีบนแล็ปท็อปของฉันด้วยเมาส์ 5 ปุ่มราคาถูก มันสามารถทำการแมปไปยังการกดแป้นและคำสั่งได้อีกด้วยและการกำหนดค่านั้นง่ายกว่าวิธีอื่น ๆ !
ฉันมี HP elitebook 2570p, Ubuntu 18.04.2 ที่นี่ฉันมี trackpoint ที่ไร้ประโยชน์สำหรับฉันและนี่คือปุ่ม trackpoint ที่ไร้ประโยชน์ 2 อันใต้พื้นที่
ฉันไม่ได้ใช้กุญแจเหล่านี้เพราะฉันมีมันใต้ทัชแพด ฉันต้องการแมปปุ่มเหล่านี้อีกครั้งเพื่อ left = back_button (Alt_L + Left) ทางขวาหนึ่ง = middle_mouse_button trackpoint ใน "xinput" คือ id = 11 และปุ่มซ้ายคือหมายเลข 1 ทางขวาคือ 3
มีใครบางคนสามารถเขียนรหัสที่ถูกต้องให้ฉันเพื่อคัดลอกไปยังเทอร์มินัลได้ไหม ฉันได้รวมกับ xbindkeysrc แต่นั่นเป็นการตั้งค่าการดำเนินการใด ๆ กับปุ่มทั้งสอง (trackpoint และ touchpad)
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'