Remapping Caps Lock เพื่อควบคุมและหลบหนี (ไม่ใช่วิธีปกติ)


27

ฉันรู้วิธีใช้ xmodmap เพื่อทำการแมปปุ่ม Caps lock ใหม่เพื่อให้ทำหน้าที่เป็นปุ่มควบคุมหรือเป็นปุ่ม Escape ฉันต้องการรวมคุณสมบัติทั้งสองดังต่อไปนี้:

เมื่อฉันกดแล้วปล่อยปุ่ม Caps lock จะส่ง Escape เมื่อฉันกด Caps Lock ค้างไว้แล้วกดคีย์อื่น (พูด A) มันจะส่ง Control-A

มีการรวมกันของ xkb, xmodmap และอย่างอื่นที่สามารถทำให้ Caps Lock ทำงานในลักษณะนี้ใน X ได้ไหม?

ฉันใช้ Ubuntu Precise กับ Macbook Air 3,1

คำตอบ:


-2

คุณสามารถทำครั้งแรก (ทำแผนที่Caps LockไปEsc) แต่คุณไม่สามารถทำสอง

คำอธิบายง่ายๆ: Caps Lockไม่ได้ออกแบบมาเพื่อทำอะไรเมื่อกด

คำอธิบายอย่างละเอียด: มีกุญแจหลายประเภท สองของพวกเขาปรับเปลี่ยนคีย์และล็อคกุญแจ

Caps Lockเป็นกุญแจล็อคในขณะที่คีย์เช่นCtrl, AltและShiftมีปรับเปลี่ยนคีย์

เห็นได้ชัดจากชื่อของพวกเขาที่Modifier Keys จะปรับเปลี่ยนฟังก์ชั่นของคีย์ถัดไปที่ถูกกดและLock Keysทำหน้าที่เป็นสวิตช์สลับเพื่อเปิดหรือปิดฟังก์ชั่นบางอย่าง

ตอนนี้เนื่องจาก Caps Lock เป็นกุญแจล็อคคุณจึงไม่สามารถทำงานได้เหมือนคีย์ปรับเปลี่ยนโดยไม่ต้องจับคู่กับปุ่มใดปุ่มหนึ่ง Caps Lockโดยตัวมันเองไม่สามารถทำหน้าที่เป็นModifier Keyได้


ขอบคุณสำหรับการยืนยันว่า X ไม่ได้ออกแบบมาเพื่อทำสิ่งที่ฉันต้องการ หากคุรุ X ต้องการแฮ็กข้อมูลเพื่อให้ทำงานได้โปรดติดต่อกับฉัน
372737

4
เนื่องจากคำตอบที่ไม่ได้รับการยอมรับด้านล่างคุณสามารถทำส่วนที่สองด้วยยูทิลิตี้มากมายเช่น xcape หรือ At-Home-Modifier
Sparhawk

34

ฉันมีการตั้งค่านี้บน Mac ของฉันและฉันได้พยายามหาวิธีสำหรับ Ubuntu โดยไม่มีโชค

ตอนนี้มันใช้งานได้แล้ว tungd ขอบคุณสำหรับผมที่จะติ้งXcape สิ่งที่ฉันได้ทำนั้นเรียบง่ายและตรงไปตรงมา

  1. ใต้การตั้งค่าระบบ> เค้าโครงแป้นพิมพ์> ตัวเลือก ... > ตำแหน่งปุ่ม Ctrl ฉันเลือก 'Caps Lock as Ctrl'

  2. xcape -e 'Control_L = Escape'

เสร็จแล้ว Caps Lock ทำงานเป็น Ctrl เมื่อใช้งานเหมือนตัวดัดแปลงและ Esc เมื่อกดเพียงอย่างเดียว (มีความล่าช้าเล็กน้อยสองสามร้อยมิลลิวินาทีตามที่ระบุไว้ในไฟล์ xcape README ดังนั้นจึงยังไม่เหมาะสมเท่าโซลูชัน Mac ที่ใช้ KeyRemap4MacBook.)


4
ผมเคยใช้gnome-tweak-toolไปในแผนที่Caps LockจะCtrlเป็นไม่มีKeyboard layoutในSystem Settingsบน Ubuntu 14.04 จากนั้นก็xcape -e 'Control_L=Escape'ไม่ได้ทำงาน แต่หลังจากที่ใช้xcape -dฉันได้ค้นพบว่าการCaps Lockสร้าง keycode 66 และ remapped xcape -e '#66=Escape'มันตามลำดับ:
Sergiy Belozorov

3
ตามโพสต์บล็อกนี้เป็นไปได้ที่จะทำเช่นนี้กับ xcape เพียงอย่างเดียว: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Louis Simoneau

นี่ควรเป็นคำตอบที่ได้รับการยอมรับ @ user372737
Assaf Lavie

@LouisSimoneau นี้พันครั้งนี้
Spencer Boucher

1
มีความคืบหน้าเกี่ยวกับปัญหาความล่าช้าหรือไม่
Toothrot

6

ฉันกำลังมองหาสิ่งนี้เช่นกัน ในฐานะของสัปดาห์ที่ผ่านมาผมพบว่าตัวเองวิธีการแก้ปัญหาบางส่วนที่ใช้xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

แน่นอนว่ามันใช้งานไม่ได้อย่างสมบูรณ์มันส่งทั้ง Escape และ Ctrl ในเวลาเดียวกันเมื่อฉันกด CapsLock แต่ฉันก็มีความสุขอยู่พักหนึ่ง

ในที่สุดผมก็พบยูทิลิตี้เล็ก ๆ นี้https://github.com/alols/xcape ดังนั้นตอนนี้ฉันสามารถตั้งค่า CapsLock ใหม่เพื่อ Ctrl และให้ xcape ทำงานได้


ตัวเลือกอื่นคือ At-Home-Modifier มันไม่ได้อยู่ในการพัฒนาและแตกต่างจาก xcape เล็กน้อยโดยการติดตั้งที่รูท อย่างไรก็ตามมันจะทริกเกอร์ผ่าน xorg.conf และด้วยเหตุนี้สามารถทำงานได้เฉพาะกับแป้นพิมพ์เฉพาะในขณะที่ใช้แป้นพิมพ์อื่นพร้อมกัน
Sparhawk

4

แก้ไข: แก้ไขสิ่งนี้สำหรับผู้จัดการการแสดงผลที่ชาญฉลาดที่สุด (ใหม่กว่า)

ต่อข้อคิดเห็นของ Louis และ Sergiy ฉันได้คิดวิธีแก้ปัญหานี้ที่ทำงานกับฉันใน Ubuntu 16.04 (Xenial) ด้วย LightDM และ Unity

ฉันใส่รหัสต่อไปนี้ลงใน.xprofileไฟล์ในโฮมไดเร็กตอรี่ของฉัน

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

การลาก & วางคำสั่ง xcape ไว้ในพื้นหลังเพื่อไม่ให้บล็อกเซสชันของคุณ setxkbmap ทำการเปลี่ยนแปลงทันที

Sergiy:

ฉันใช้ gnome-tweak-tool เพื่อแมป Caps Lock กับ Ctrl เนื่องจากไม่มีเค้าโครงแป้นพิมพ์ในการตั้งค่าระบบใน Ubuntu 14.04 xcape -e 'Control_L = Escape' ไม่ทำงาน แต่หลังจากใช้ xcape -d ฉันค้นพบแล้วว่า Caps Lock สร้างรหัส key 66 และทำการแมปใหม่ตามลำดับ: xcape -e '# 66 = Escape' - Sergiy Byelozyorov 4 ก.ย. '14 เวลา 10:08 น

หลุยส์:

ตามโพสต์บล็อกนี้คุณสามารถทำได้ด้วย xcape เพียงอย่างเดียว: setxkbmap -option 'ตัวพิมพ์: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'ตัวพิมพ์ใหญ่: ctrl_modifier' xcape -e 'Caps_Lock = Escape; Control_L = ตัวควบคุม Escape; Control_R = Escape '- Louis Simoneau 4 สิงหาคม '15 เวลา 10:06


3

ติดตั้ง xcape

sudo apt-get install xcape

เพิ่มสองบรรทัดในของคุณ ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

สังเกตส่วน-t 100ถ้าคุณไม่ได้ตั้งคุณอาจสังเกตเห็นความล่าช้าใน Esc ถ้าคุณใช้เป็นกลุ่ม


sudo apt-get install xcape(พิมพ์ผิด)
David Shaked

1

ฉันได้สร้างเครื่องมือใน C เป็นพิเศษเพื่อจุดประสงค์นี้ที่เอาชนะปัญหาหลายอย่างด้วยโซลูชัน xcape / xmodmap :


มีวิธีใดบ้างที่จะปิด "swap" ของ Esc to Caps ฉันชอบที่จะไม่มี Caps ทั้งหมดและให้ Esc เก่าและใหม่ทำตัวเหมือน Escape
dragon788

@ dragon788 ลบเส้นเหล่านี้: github.com/oblitum/caps2esc/blob/v1.0.3/caps2esc.c#L75-L76และgithub.com/oblitum/caps2esc/blob/v1.0.3/caps2esc.c#L88-L89
pepper_chico

ขอบคุณฉันจะต้องใส่ลิงค์เพื่อรวบรวมอัตโนมัติใน dotfiles ของฉัน ฉันอาจ PR README.md เช่นเดียวกับ Ubuntu 16.04 มันต้องใช้ libudev-dev และ libevdev-dev เพื่อที่จะรวบรวม
dragon788

@ dragon788 มาที่ Arch (คุณสามารถลอง Antergos ได้) ฉันย้ายออกจากอูบุนตูมาหลายปีแล้วและจะไม่มีวันย้อนกลับไปมันเป็นวิธีที่ดีกว่า
pepper_chico
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.