เปลี่ยน caps-lock เป็น control ใน virtual console บน Ubuntu 17


10

ฉันต้องการเปลี่ยนการทำงานของ Caps Lock ในเทอร์มินัลเสมือน (tty เช่นCtrlAltF3) เพื่อให้มันทำหน้าที่เป็นตัวปรับเปลี่ยนการควบคุม โดยหลักการแล้วฉันต้องการให้มันทำหน้าที่เป็น Escape เมื่อกดคนเดียว แต่การได้รับพฤติกรรมการควบคุมนั้นพิสูจน์ได้ยาก

ฉันใช้ Ubuntu 17.04 ฉันได้อ่านและลองใช้วิธีการต่าง ๆ เพื่อทำการเปลี่ยนแปลงนี้ แต่ดูเหมือนไม่มีผู้ใดนำไปใช้กับระบบของฉันตามที่อธิบายไว้ ฉันเข้าใจว่า systemd มีส่วนร่วมในเรื่องนี้ แต่รายละเอียดไม่ชัดเจน

ฉันเขียนไฟล์แล้วcaps_control.kmapแมปที่ควบคุมได้

keymaps 0-255
keycode  58 = Control

ถ้าฉันเรียกใช้loadkeys caps_control.kmapจากคอนโซลเสมือนมันใช้งานได้ ตอนนี้ฉันต้องการให้โหลดโดยอัตโนมัติเมื่อ boot / login / อะไรก็ตาม ...

ผมพบว่าการอ้างอิงไปใช้/etc/rc.localในการทำเช่นนั้น แต่ระบบของฉันไม่มีไฟล์ดังกล่าวแม้ว่ามันจะมีหลายไดเรกทอรีชอบ/etc/rc0.d/, /etc/rc1.d/...

ดูเหมือนว่าตั้งแต่ Ubuntu 17 ใช้ sytemd ฉันควรใช้localectlเพื่อจัดการสิ่งนี้ แต่ฉันไม่ชัดเจนว่าจะทำอย่างไร ตัวอย่างเช่น,

$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105
$ localectl list-keymaps
Couldn't find any console keymaps.

man page สำหรับการlocalectlกล่าวถึง/etc/locale.confและ/etc/vconsole.confไม่มีอยู่ในระบบของฉัน

ฉันสูญเสียทั้งหมด ใครช่วยชี้ฉันในทิศทางที่ถูกต้องได้ไหม


คุณต้องการให้การเปลี่ยนแปลงนี้ใช้งานได้สำหรับผู้ใช้ทั้งหมดหรือเฉพาะของคุณเอง
acer

@acer ไม่ว่าจะด้วยวิธีใดก็ตามจะเหมาะกับฉันเพราะฉันเป็นผู้ใช้เพียงคนเดียวในเครื่องนี้
ivan

อืม ... คุณเพิ่มบรรทัดใน ~ / .profile ด้วยloadkeys caps_control.kmapที่จะดำเนินการเมื่อคุณเข้าสู่ระบบ
acer

@acer การโทรloadkeysจาก ~ / .profile ดูเหมือนว่าจะมีปัญหา เมื่อฉันเข้าสู่ระบบฉันได้รับข้อผิดพลาดที่บอกว่า "ไม่สามารถรับไฟล์ descriptor ที่อ้างถึงคอนโซล"
ivan

คำตอบ:


11

หากต้องการเปลี่ยน Caps Lock ให้เป็นตัวดัดแปลง Ctrl เพิ่มเติมซึ่งมีผลในคอนโซล tty ให้เปิด/etc/default/keyboardสำหรับการแก้ไขและตั้งค่า:

XKBOPTIONS=ctrl:nocaps

หากคุณXKBOPTIONSตั้งค่าไว้แล้วให้ผนวกctrl:nocapsกับค่าที่มีอยู่โดยใช้เครื่องหมายจุลภาคสำหรับตัวคั่นเช่น:

XKBOPTIONS="terminate:ctrl_alt_bksp,ctrl:nocaps"

ควรมีผลบังคับใช้หลังจากรีบูตครั้งถัดไปหรือออกsetupconคำสั่ง

ควรมีตัวเลือกเมื่อใช้งานlocalectl status:

$ localectl status | grep caps
     X11 Options: ctrl:nocaps

และในเซสชัน X อีกวิธีหนึ่งในการตรวจสอบว่ามีการตั้งค่าไว้ดังนี้:

$ gsettings get org.gnome.desktop.input-sources xkb-options
['ctrl:nocaps']

1
ตัวเลือก XKB "ctrl:nocaps"อีกอย่างก็คือ ใน X ความแตกต่างนั้นบอบบาง: ด้วยctrlตัวเลือกxevและเครื่องมืออื่น ๆ จะเห็นControl_Lสัญลักษณ์เมื่อกดปุ่ม CapsLock ในขณะที่capsตัวเลือกจะยังคงแสดงCaps_Lockkeysym ฉันไม่แน่ใจว่าความแตกต่างนั้นจะแปลไปยังแป้นพิมพ์ของคอนโซลเสมือนหรือไม่
Quixotic

@quixotic: ctrl:nocapsขอขอบคุณสำหรับการกล่าวขวัญ ฉันเพิ่มลงในคำตอบของฉัน
Gunnar Hjalmarsson

ความคิดใด ๆ ที่ว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้สำหรับฉัน จริงๆแล้วมันเป็นหนึ่งในสิ่งแรกที่ฉันลองและฉันชอบวิธีการ น่าเสียดายที่มันไม่มีผลกับระบบของฉัน
ivan

1
@ivan: ฉันเพิ่งทดสอบตัวเองและพบว่าคำแนะนำแรกของฉัน ( caps:ctrl_modifier) ไม่มีประสิทธิภาพใน tty อย่างไรก็ตามสำหรับฉัน (วันที่ 17.10) ctrl:nocapsคือ โปรดดูคำตอบที่แก้ไขของฉัน
Gunnar Hjalmarsson

1
@GunnarHjalmarsson ฉันไม่คุ้นเคยกับวิธีของเดเบียน / อูบุนตูมากนักในการแปลแผนที่ XKB เป็นแผนที่คอนโซล (มันเกี่ยวกับckbcompฉันคิดว่าไง) ฉันจำcaps:ctrl_modifierตัวเลือกที่คุณกล่าวถึงไม่ได้ดังนั้นควรค้นหาเพื่อเปรียบเทียบกับที่ctrl:nocapsฉันใช้เป็นประจำและคิดว่าความแตกต่างอาจคุ้มค่าที่จะพูดถึงที่นี่ ดีใจที่มันเป็นประโยชน์
quixotic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.