เนื่องจากคุณต้องการทำการแมปคีย์สำหรับแอปพลิเคชันทั้งหมดตัวเลือกที่ดีที่สุดคือการใช้ xmodmap มันยืดหยุ่นและทรงพลังมาก แต่เกี่ยวข้องกับการพิมพ์คำสั่งสองสามคำสั่งลงในเทอร์มินัล
ขั้นตอนที่ 0 - แนวทาง
X-server จะจัดการแป้นพิมพ์และเหตุการณ์สำคัญทั้งหมดและแปลเป็นรหัสสำหรับแอปพลิเคชันทั้งหมด
วิธีการนี้จะแมปปุ่มตัวดัดแปลง (เช่นปุ่ม Super หรือปุ่ม Alt ขวา) เป็นปุ่ม "สลับโหมด" และบอกให้ X-server สร้างรหัสที่แตกต่างกันขึ้นอยู่กับว่ามีการกดแป้นด้วยปุ่มโหมดค้างไว้หรือไม่
โดยค่าเริ่มต้นจะไม่มีการกำหนดปุ่มสลับโหมดและปุ่มทั้งหมดได้รับการกำหนดค่าให้สร้างรหัสเดียวกันเมื่อมีการกดด้วยหรือไม่สลับโหมด นี่เป็นสิ่งที่ดีเนื่องจากวิธีการนี้ยกเว้นสำหรับคีย์ที่คุณแทนที่อย่างชัดเจนไม่มีคีย์อื่นที่จะทำงานแตกต่างกันหรือต้องการการกำหนดค่าเพิ่มเติม
อย่างไรก็ตามฉันต้องการให้คุณพิจารณาใช้ปุ่ม Alt ขวาเป็นโหมดสลับโดยเฉพาะอย่างยิ่งถ้าคุณใช้ compiz เนื่องจากปลั๊กอิน compiz บางอันจะทำแผนที่ทางลัดคีย์ลัด (เช่นตัวเลือกหน้าต่างตัวเปลี่ยนกะ ฯลฯ ) หากคุณไม่กระตือรือร้นในการควบคุมคอมพิวเตอเรชันผ่านทางแป้นพิมพ์ Super ก็ถือว่าใช้ได้
ในการ xmodmap ซุปเปอร์คีย์จะถูกระบุเป็น Super_L หรือ Super_R คุณต้องเลือกหนึ่งอันเพื่อใช้เป็นปุ่มสลับโหมด อีกทางเลือกหนึ่งปุ่ม Alt ด้านขวาคือ Alt_R คุณสามารถยืนยันสิ่งเหล่านี้ได้ด้วยการรัน xev และกดปุ่มที่จำเป็นบนคีย์บอร์ดของคุณ ดูโพสต์นี้สำหรับขั้นตอน
ขั้นตอนที่ 1 - การตั้งค่าแผนที่ปรับปรุง
เปิดเทอร์มินัล ( Applications -> Accesories -> Terminal
) และเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างไฟล์ด้วยการโยงคีย์ปัจจุบัน เราจะใช้สิ่งนี้เป็นจุดเริ่มต้น
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
เปิดสิ่งนี้ในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ gedit curkeys.map &
เปิดใน gedit ในตอนท้ายของไฟล์คุณจะเห็นบางบรรทัดดังนี้:
keycode 253 =
keycode 254 =
keycode 255 =
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
ลบบรรทัดที่ขึ้นต้นด้วย "xmodmap: สูงสุด 4 ... "
แก้ไขแผนที่ตัวปรับแต่งเพื่อให้มีลักษณะเช่นนี้ ใส่คำว่า "เพิ่ม" ที่ด้านบนของแต่ละบรรทัดแล้วใส่ "=" หลังชื่อตัวดัดแปลง จากนั้นลบรหัสในวงเล็บและเครื่องหมายจุลภาค โปรดทราบว่าฉันได้ย้ายMode_switch
จากmod5
บรรทัดหนึ่งไปอีกmod3
บรรทัดเนื่องจากว่างเปล่า ตารางที่แก้ไขควรมีลักษณะเช่นนี้ - เนื้อหาจริงจะแตกต่างกันเล็กน้อยในกรณีของคุณจากด้านล่าง (ขึ้นอยู่กับรูปแบบแป้นพิมพ์ของคุณ)
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L Meta_L Alt_R
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Super_L Super_R Super_L Hyper_L
add mod5 = ISO_Level3_Shift
ทำการแมปปุ่มสลับโหมดทางกายภาพ เพิ่มบรรทัดแบบนี้ในตอนท้าย (แทนที่ Super_L ด้วย Super_R หรือ Alt_R หากต้องการ)
keysym Super_L = Mode_switch
ลบชื่อคีย์ (Super_L) ออกจากคำจำกัดความตัวแก้ไขใด ๆ สำหรับ Super_L นี่หมายถึงการลบออกจากบรรทัด mod4
add mod4 = Super_R Hyper_L
ตอนนี้ปุ่ม "Super" ที่ถูกต้องจะยังคงทำหน้าที่เป็นปุ่ม Super ธรรมดาในขณะที่ปุ่มซ้ายจะมีคุณสมบัติพิเศษ
ตอนนี้เราจำเป็นต้องทำการแมปปุ่มใหม่เพื่อสร้างรหัสที่แตกต่างกันไม่ว่าจะกดในขณะที่กด Super_L ค้างไว้หรือไม่ แต่ละบรรทัดในไฟล์ของเราเริ่มต้นด้วยการkeycode
ระบุ 4 keysyms สำหรับแต่ละคีย์ที่จะสร้างขึ้นโดยขึ้นอยู่กับว่า Mod1 (ปุ่ม Shift) และแป้นสลับโหมดถูกกดหรือไม่ ( ลิงค์ )
!...........................................................................
! Key Base Shift Mode Mode+Shift
!---------------------------------------------------------------------------
keycode 13 = 4 dollar 4 quotedbl
keycode 14 = 5 percent 5 colon
keycode 15 = 6 asciicircum 6 comma
keycode 16 = 7 ampersand 7 period
...
keycode 45 = k K k K
ถ้าเราต้องการ Super_L + k keypress เพื่อสร้างคีย์ "+" เราจำเป็นต้องแก้ไขมันเพื่ออ่าน
keycode 45 = k K plus plus
เครื่องหมายบวกสุดท้ายจะจับคู่ Shift + Super_L + k กับเครื่องหมายบวก แต่สามารถแมปกับสิ่งอื่นได้ สำหรับแต่ละคีย์มี 1 บรรทัดที่จะแก้ไข แก้ไขบรรทัดเพิ่มเติมเพื่อทำการแมปคีย์เพิ่มเติม - ปล่อยให้ 2 รายการแรกเหมือนเดิมเพื่อรักษาพฤติกรรมการกดปุ่มปกติ
บันทึกไฟล์และออกจากโปรแกรมแก้ไข
ติดตั้ง keymap โดยการรันคำสั่งต่อไปนี้ในเทอร์มินัล คนแรกตั้งขึ้นสำหรับเซสชั่นนี้ที่สองทำให้มันถาวรสำหรับเซสชั่นในอนาคต
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
คุณสามารถทดสอบสิ่งนี้ได้ทันทีโดยกดปุ่มที่ดัดแปลง (เช่น Super_L + k)
ขั้นตอนที่ 3 - การเพิ่ม / แก้ไขแผนที่
เมื่อติดตั้งแผนที่ที่แก้ไขแล้วมันจะง่ายต่อการเพิ่มปุ่มใหม่
ใช้xevเพื่อค้นหารหัสและ keysyms
ทดสอบโดยใช้คำสั่งนี้เพื่อจับคู่กุญแจ:
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
แทนที่รายการในวงเล็บเหลี่ยม (เช่น<code>
<base>
ฯลฯ ) ด้วยค่าที่เหมาะสม
สำรองcurkeys.map
ไฟล์
- เปิด
curkeys.map
และแก้ไขบรรทัดสำหรับรหัสที่เกี่ยวข้อง
ใช้ซ้ำกับคำสั่งด้านล่าง (ไม่จำเป็นถ้าคุณทำตามขั้นตอนที่ 2)
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
หมายเหตุ: 1 : การแก้ไขที่ทำในแป้นพิมพ์ลัด (ผ่านเช่นSystem -> Preferences -> Keyboard Shortcuts
) จะส่งผลต่อแผนที่ตัวปรับแต่งและโดยทั่วไปจะหายไปในการเข้าสู่ระบบครั้งต่อไป ดังนั้นโปรดหลีกเลี่ยงสิ่งนั้น
หมายเหตุ: 2 : บางครั้งฉันได้รับข้อความแสดงข้อผิดพลาดเช่นนี้ขณะใช้วิธีนี้ ฉันไม่รู้ว่าสิ่งนี้หมายความว่าอย่างไรเหล่านี้โดยทั่วไปจะไม่เป็นอันตราย
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 118 (X_SetModifierMapping)
Value in failed request: 0x17
Serial number of failed request: 263
Current serial number in output stream: 263
ช่วยให้รายละเอียดสำหรับ xmodmap สามารถใช้ได้ที่นี่