ปุ่มแมปใหม่ที่สร้างรหัสสแกนหลายรหัส


33

ฉันมี ThinkPad W540 บนคีย์บอร์ดมีปุ่มมัลติมีเดียสี่ปุ่มเหนือ numpad สองคีย์เหล่านั้นสร้างการพิมพ์ซ้ำ (และเห็นได้ชัดว่า scancodes) ตรงที่การรวมกันของปุ่มWin_L+ Lและ+Win_L Eกล่าวอีกนัยหนึ่งสำหรับคีย์ที่สร้างWin_L+ Lให้
showkey --scancodesส่งคืนสิ่งนี้:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

setkeycodesคำสั่งต้องใช้ Escape ไบต์เดี่ยวหรือหนีลำดับสองไบต์เพื่อแสดงถึงการสแกนรหัสและshowkeyทำให้ผมมีวิธีที่มากกว่านั้นดังนั้นฉันไม่สามารถค่อนข้าง re-map setkeycodes <scancode> <keycode>ที่สำคัญที่จะเป็นหนึ่งในการพิมพ์ซ้ำฟรีในระบบของฉันกับตรงไปตรง

ฉันขอขอบคุณคำแนะนำใด ๆ ที่ฉันสามารถตั้งค่าคีย์นั้นให้กับสิ่งอื่นซึ่งไม่เพียง แต่ทำซ้ำชุดคีย์ที่มีอยู่บนแป้นพิมพ์ของฉัน



1
ฉันคิดว่านี่อาจเป็นเรื่องยาก: อย่างน้อยบน Thinkpads รุ่นเก่าการทำแผนที่แบบนี้ทำโดยคอนโทรลเลอร์ในตัวไม่ใช่ระบบปฏิบัติการ
mirabilos

1
ฉันมี Microsoft All-in-One Media Keyboard ซึ่งมีปัญหาเดียวกันคุณสามารถหาวิธีแก้ปัญหาได้หรือไม่?
osolmaz

5
ฉันทำสิ่งที่คล้ายกันบน Thinkpad t61 เมื่อนานมาแล้วโดยการจับคู่คีย์ที่ใช้/etc/acpi/events ในacpidแพ็คเกจและเพิ่งกำหนดการกระทำเมื่อกดปุ่มฟังก์ชั่นเหล่านั้น
ซีซาร์

2
คุณมีการตั้งค่า Win_L เป็นตัวดัดแปลงใน X-windows หรือไม่? มันเป็นค่าเริ่มต้นสำหรับฉัน
mcr

คำตอบ:


1

คุณสามารถทำได้สองขั้นตอน:

  1. เพื่อจับคีย์ผสม
  2. เพื่อจำลองการพิมพ์ปุ่มต่างๆ

คุณสามารถใช้xchainkeysสำหรับ1และ[xdotool][2]สำหรับ2 :

เพื่อสร้างคีย์ใหม่จำลองกับxdotoolตัวเลือก--clearmodifiersของkeyอาจมีความสำคัญในการแก้เดิมจำลองกดปรับปรุง:

xdotool key --clearmodifiers Shift+a

สิ่งนี้ควรพิมพ์เมืองหลวงAเป็นแบบทดสอบ

ในการกำหนดค่าของxchainkeysใน~/.config/xchainkeys/xchainkeys.confเราสามารถผูกคำสั่งกับคีย์ผสม:

W-l :exec xdotool key --clearmodifiers Shift+a

ตอนนี้คีย์ผสมWinและl( Winซ้ายหรือขวาทำเช่นเดียวกัน) เช่นเดียวกับที่สำคัญที่สร้าง Win_L + L, Aควรสร้างทุน

(มีโปรแกรมอื่น ๆ อีกมากมายสำหรับทั้งสองส่วนในตอนแรกหนึ่งสามารถใช้การกำหนดค่าฮอตคีย์ของสภาพแวดล้อมเดสก์ท็อป แต่ฉันชอบที่จะให้มันเป็นอิสระจาก DE)


2
ปัญหาของการแก้ปัญหานี้ถ้าฉันไม่เข้าใจผิดจะเป็นเช่นเดียวกับการใช้ชุดค่าผสมที่กล่าวไว้เพื่อเรียกใช้การกระทำนั้นการกระทำนั้นจะไม่ถูกกระตุ้นโดยใช้รหัสนั้นเพียงกดปุ่มชุดค่าผสมที่เกิดขึ้นจริง รหัสก็จะให้ผลลัพธ์เดียวกัน กล่าวอีกนัยหนึ่งมันไม่เป็นไปตามเงื่อนไข "ทำการแมปคีย์นั้นกับสิ่งอื่นที่ไม่เพียง แต่ทำซ้ำชุดคีย์ที่มีอยู่" แต่ฉันซาบซึ้งในความพยายาม
moonwalker

3
ใช่ว่าจริง - ฉันไม่แน่ใจว่าคุณหมายถึงประโยคนั้นตอนนี้ฉันเข้าใจ แต่ดูเหมือนว่ากุญแจของคุณจะสร้างรหัสสองคีย์ในฮาร์ดแวร์ (นั่นคือในเฟิร์มแวร์ของแป้นพิมพ์) - ดังนั้นฉันจึงไม่เห็นสงครามเลยนอกจากคุณจะตรวจจับจังหวะเวลาของการกดปุ่ม artifivial กด "แก้ไขลง", "คีย์อื่น ๆ " "ปรับปรุงค่า" อืม ... อาจจะเป็นวิธีการแก้ปัญหาที่เกี่ยวข้องกับการบัดกรีเป็นเรื่องง่ายมากขึ้น)
Volker ซีเกล

1
@moonwalker คุณสามารถลองทำการแมป Win_L แทนรหัสอื่นได้หรือไม่และลองตรวจสอบดูว่ามันทำการแมปตัวปรับแต่งอีกตัวด้วยหรือไม่
Volker Siegel

1
อืมฉันจะไม่สูญเสียชุดค่าผสมเช่น Win_L + R, Win + Break, Win + L, Win + ฯลฯ ในกรณีนั้น?
moonwalker

1
ไม่ฉันไม่คิดอย่างนั้น Win-L คือWin-Shift-lแต่คุณสามารถแมปกลุ่มของคีย์ผสมกับคำสั่งได้ กดไลค์Win-aและหลังจากนั้น bด้วยการออกWin-a, bทำงานปกติ นั่นคือคุณสมบัติที่มีประโยชน์ที่สุดxchainkeysและไม่เหมือนใครฉันคิดว่า
Volker Siegel

-2

นี่คือสิ่งที่ฉันทำใน Thinkpad Yoga เพื่อเชื่อมโยงคีย์แบ็กสแลช / ไพพ์ไปยังคีย์ที่ถูกต้อง เพราะด้วยเหตุผลบางอย่างในทุก ๆ เครื่องเสมือนของ Linux มันจึงตีความแบ็กสแลช \ pipe (\ |) เป็นคีย์ที่น้อยกว่า (<)

ดำเนินการคำสั่งแรก: xev

กดปุ่มที่ต้องการเพื่อรับรหัสสำหรับคีย์ที่คุณต้องการเชื่อมโยงใหม่:

เหตุการณ์เอาต์พุต xev KeyPress

ในตัวอย่างนี้ Keycode คือ 94 และการกระทำนั้น "น้อยกว่า" แต่เราต้องการให้มีการกระทำของแบ็กสแลชและบาร์ aka "ไปป์"

ทำการแมปรหัส 94 กับแบ็กสแลชและบาร์คีย์ aka "ไปป์":

xmodmap -e 'keycode 94 = backslash bar'

ตอนนี้ให้ทำให้ถาวรนี้:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

คืนค่าไฟล์ดังต่อไปนี้~/.Xmodmap:

keycode  94 = backslash bar backslash bar

จากนั้นคุณจะต้องสร้างไฟล์ต่อไปนี้เพื่อทำให้ไฟล์นั้นอยู่แบบถาวร:

echo "xmodmap .Xmodmap" > ~/.xinitrc

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