จะเปลี่ยน console keymap ใน Linux ได้อย่างไร?


36

ฉันต้องการแลกเปลี่ยนEscและCapsLockในคอนโซล (ไม่ใช่ใน X และใช้xev) ฉันจะทำอย่างไร

ระบบปฏิบัติการของฉันคือ Ubuntu

คำตอบ:


60

เครื่องมือในการจัดการรูปแบบแป้นพิมพ์บนคอนโซลเสมือนมีloadkeys, และdumpkeys showkeyอ่าน manpages ของพวกเขาและบอกตัวเองเกี่ยวกับความซับซ้อนของพวกเขา

โปรดทราบว่าเครื่องมือเหล่านี้ใช้งานได้ในคอนโซลเสมือนเท่านั้นไม่ใช่ในโปรแกรมจำลองเทอร์มินัลในสภาพแวดล้อมแบบกราฟิกเช่น gnome เรียนรู้เกี่ยวกับความแตกต่างอ่านคำถามและคำตอบนี้: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

นี่คือคำแนะนำสั้น ๆ ในการทำสิ่งที่คุณต้องการ:

  1. บันทึกเค้าโครงแป้นพิมพ์ปัจจุบันของคุณ:

    $ dumpkeys > backup.kmap
    

    ในกรณีที่มีข้อผิดพลาดเกิดขึ้นคุณอาจสามารถกู้คืน keymap โดยใช้คำสั่ง:

    $ sudo loadkeys backup.kmap
    

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

  2. ตรวจสอบรหัสที่กำหนดให้กับคีย์ของคุณ:

    $ showkey
    

    ตอนนี้กดปุ่ม ESC และปุ่ม CAPSLOCK รหัสคีย์ควรปรากฏขึ้นบนหน้าจอ หมายเหตุรหัส ในระบบของฉัน ESC มีรหัส 1 และ CAPSLOCK มีรหัส 58 showkeyจะยกเลิกหลังจากไม่มีการใช้งาน 10 วินาที (อย่างน้อยก็ทำใน Ubuntu 10.04 ของฉัน)

  3. บันทึกชื่อของปุ่ม ESC และ CAPSLOCK จาก dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. บันทึกบรรทัด keymap จาก dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. สร้างไฟล์ keymap ที่สลับ ESC และ CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. โหลด keymap:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. ทดสอบ: การทดสอบคีย์ CAPSLOCK นั้นชัดเจน เพียงแค่กดปุ่ม CAPSLOCK และตรวจสอบว่ามีปุ่มอื่น ๆ พิมพ์ใหญ่หรือไม่ ในการทดสอบปุ่ม ESC คุณสามารถใช้ CTRL + V แล้วตามด้วย ESC ^[มันควรพิมพ์ CTRL + V ทำให้เชลล์พิมพ์คำต่อคำหลักถัดไปแทนการตีความมัน

หากต้องการให้โหลดการแก้ไขนี้ในการรีบูตทุกครั้งให้วางบรรทัดต่อไปนี้ใน/etc/rc.localไฟล์ของคุณ:

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

ข้อมูลที่รวบรวมจากหน้าต่างๆรวมถึง แต่ไม่ จำกัด เพียง:


5
คุณยังสามารถใช้sudo setupcon --saveเพื่อทำการเปลี่ยนแปลงแบบถาวรแทนที่จะแก้ไข rc.local นั่นเป็นหลักเช่นเดียวกับdumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor

มันเป็นความปลอดภัยในการใช้/usr/bin/loadkeysใน/etc/rc.localตั้งแต่ตัวแปรสภาพแวดล้อมเส้นทางไม่รับประกันว่าจะถูกตั้งค่าในขั้นตอนนี้ และsudoไม่จำเป็นrc.localค่ะ
สิงหาคม Karlstrom

@AugustKarlstrom คำสั่งในการrc.localดำเนินการทุกครั้งที่ระบบบู๊ต @ bukzor ของsudo setupconเป็นไม่ได้ในrc.localมันเป็นคำสั่งการตั้งค่าครั้งเดียวซึ่งแทนที่ keymap เริ่มต้นของระบบโดยไม่ต้องเพิ่มรหัสเริ่มต้นรันไทม์ใด ๆ เพิ่มloadkeys เพื่อrc.localเสริมเพิ่มเริ่มต้นขึ้นและรหัสที่ซ้ำกันสิ่งที่ได้กระทำแล้วโดย loadkeys เริ่มต้นระบบ rc.localวิธีการจริงอาจจะไม่ปลอดภัยเพราะมันขึ้นอยู่บนเส้นทางที่ไม่ได้มาตรฐานจะ keymap
RobertL

@ RobertL โปรดอธิบายsetupconวิธีการอย่างละเอียด เพิ่มคำตอบของคุณเองหรือแก้ไขของฉันถ้าคุณต้องการ
lesmana

ฉันไม่สามารถตรวจสอบคำสั่ง @ bukzor setupconเกี่ยวกับ มันจะปรากฏขึ้นในเดือนสิงหาคมทำให้สมมติฐานที่ว่าsudo setupcon --saveจะไปลงrc.localที่ฉันไม่คิดว่าเป็นความจริง แต่ถ้าไม่คุณไม่จำเป็นต้อง อยู่ในsudo rc.localฉันคิดว่าเราต้องการข้อมูลเพิ่มเติมก่อนอัปเดตคำตอบของคุณ คำถามหลักคือ "วิธีการติดตั้ง keymap ที่มีการปรับเปลี่ยนเพื่อให้สามารถโหลดได้โดยอัตโนมัติในระหว่างกระบวนการบูต" ฉันไม่รู้จริงๆว่าวิธีไหนดีกว่าrc.localหรือติดตั้ง keymap หรือแม้ว่าการติดตั้ง keymap จะใช้งานได้ ฉันค้นคว้าสิ่งนี้เมื่อเร็ว ๆ นี้และฉันจะกลับมาที่นี่อีกครั้ง
RobertL

4

ใช้ 'ctrl: nocaps' แทน 'ctrl: swapcaps' หากคุณต้องการที่จะมีสองปุ่ม capslocks (capslock โดยชื่ออื่นยังคงไร้ประโยชน์สุด)

X11: (ดูเพิ่มเติมที่: /usr/share/X11/xkb/rules/base.lst)

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

คอนโซลข้อความ: (ถูกขโมยจาก setupcon)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.