วิธีป้องกันการสลับเอฟเฟ็กต์ caps-lock โดยไม่ต้องทำการแมปใหม่หรือปิดการใช้งาน


22

ฉันมีโปรแกรม X11 ที่คว้าตัวล็อคและใช้มัน ปัญหาคือฉันต้องการที่จะปิดการใช้งานการสลับการล็อคแคปปกติ แต่การทำเช่นนั้นดูเหมือนจะปิดการใช้งานคีย์

ดังนั้นอะไรก็ตามที่ X11 ได้รับสำหรับการกดปุ่ม caps-lock มันยังคงต้องได้รับ (ไม่ต้องปิดการใช้งานคีย์หรือทำการแมปใหม่ไปยังคีย์อื่น) แต่ไม่มีการแปลการกดปุ่มลงในตัวสลับแบบแคป )

ฉันพยายามเปลี่ยน scancode แต่นี่เพิ่งทำกุญแจใหม่ ฉันได้ลบรายการ capslock ด้วยxmodmapเช่นกัน แต่นี่ยังปิดการใช้งานตัวพิมพ์ใหญ่

ฉันจะบอกให้เคอร์เนลเพิกเฉยตัวพิมพ์ใหญ่ได้อย่างไร (wrt ฟังก์ชั่นปกติของมัน) แต่ยังคงส่งผ่านข้อความไปยัง X

เพียงเพิ่มรายละเอียดเล็กน้อย:

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


โปรดระบุรายละเอียดเกี่ยวกับสิ่งที่คุณพยายามเช่นนิพจน์ xmodmap ที่ถูกต้อง หากไม่มีรายละเอียดเราไม่สามารถบอกได้ว่าคุณรู้ว่าต้องทำอะไรและทำผิดหรือว่าคุณทำถูกต้อง แต่รหัสนั้นล้มเหลวด้วยเหตุผลอื่น นอกจากนี้ให้ระบบปฏิบัติการที่คุณใช้กับเราเพราะบางคนมีการประมวลผลรหัสที่เกิดขึ้นต่ำกว่าระดับเซิร์ฟเวอร์
Kyle Jones

@ ไคล์ฉันลอง "remove Lock = Caps_Lock" แล้ว "keycode 66 =" (ซึ่งถูกแมปไปที่ CapsLock) ฉันใช้อูบุนตู 12.10 บนเครื่อง 64 บิต
Chris2048

ความเป็นไปได้อีกอย่างหนึ่งคือทำการแมปไปยังคีย์อื่น setxkbmap -option ctrl:nocapsremaps จะControl_Lยกตัวอย่างเช่น
Chris Down

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

เพียงแค่เราก็ชัดเจนเช่นกันมีคุณสมบัติใน Ubuntu 12.10 ที่คุณสามารถทำให้ปุ่ม caps-lock เป็นปุ่มควบคุมเพิ่มเติม นี่คือสิ่งที่คุณคิดเมื่อคุณพูดว่า "ทำการแมปใหม่" หรือไม่ นี่คือภาพหน้าจอของกล่องโต้ตอบ: flickr.com/photos/11708996@N00/3010939023
slm

คำตอบ:


28

ฉันคิดว่าฉันมีเทคนิคในการปิดใช้งานการสลับของCapslockคีย์ แต่ไม่ได้ปิดใช้งานการรวมคีย์ทั้งหมดหรือทำการแมปไปยังคีย์อื่นบนแป้นพิมพ์

หากคุณใช้คำสั่ง:

setxkbmap -option caps:none

แป้นพิมพ์จะไม่สลับอีกต่อไป ฉันยืนยันสิ่งนี้บนแล็ปท็อปที่ใช้งาน Fedora 14 ไฟ LED ไม่ติดอีกต่อไปและCapslockฟังก์ชั่นการใช้งานปกติก็หายไป

อย่างไรก็ตามการใช้ xev ยังคงแสดงให้เห็นว่ามีการกดปุ่ม:

$ xev
...
...
KeyPress event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504852, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504971, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
    ...

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

setxkbmap

ไฟล์/usr/share/X11/xkb/rules/xorg.lstนี้มีรายการตัวเลือกที่คุณสามารถกำหนดsetxkbmapได้อย่างครบถ้วน

Grepping ผ่านไฟล์นี้สำหรับ "หมวก" ฉันสังเกตเห็นบรรทัดนี้:

caps:none            CapsLock is disabled

มีค่าอื่น ๆ ในไฟล์นี้ดังนั้นหากนี่ไม่ใช่สิ่งที่คุณหลังจากนั้นอาจเป็นหนึ่งในค่าทางเลือกเหล่านั้นแทน

$ grep cap /usr/share/X11/xkb/rules/xorg.lst
  grp:caps_switch      CapsLock (while pressed), Alt+CapsLock does the original capslock action
  grp:caps_toggle      CapsLock
  grp:shift_caps_toggle Shift+CapsLock
  grp:shift_caps_switch CapsLock (to first layout), Shift+CapsLock (to last layout)
  grp:alt_caps_toggle  Alt+CapsLock
  lv3:caps_switch      CapsLock
  lv3:caps_switch_latch CapsLock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)
  ctrl:nocaps          Make CapsLock an additional Ctrl
  ctrl:swapcaps        Swap Ctrl and CapsLock
  grp_led:caps         CapsLock
  caps                 CapsLock key behavior
  caps:internal        CapsLock uses internal capitalization. Shift "pauses" CapsLock
  caps:internal_nocancel CapsLock uses internal capitalization. Shift doesn't affect CapsLock
  caps:shift           CapsLock acts as Shift with locking. Shift "pauses" CapsLock
  caps:shift_nocancel  CapsLock acts as Shift with locking. Shift doesn't affect CapsLock
  caps:capslock        CapsLock toggles normal capitalization of alphabetic characters
  caps:numlock         Make CapsLock an additional NumLock
  caps:swapescape      Swap ESC and CapsLock
  caps:escape          Make CapsLock an additional ESC
  caps:backspace       Make CapsLock an additional Backspace
  caps:super           Make CapsLock an additional Super
  caps:hyper           Make CapsLock an additional Hyper
  caps:shiftlock       CapsLock toggles Shift so all keys are affected
  caps:none            CapsLock is disabled
  compose:caps         CapsLock
  shift:breaks_caps    Shift cancels CapsLock
  shift:both_capslock  Both Shift-Keys together toggle CapsLock
  shift:both_capslock_cancel Both Shift-Keys together activate CapsLock, one Shift-Key deactivates

อ้างอิง


5
หากคุณเผลอรันคำสั่งโดยเปิดใช้งาน capslock ของคุณคุณสามารถรีเซ็ต xkbmap โดยเรียกใช้ setxkbmap -option ""โดยการเรียกใช้
Nemo

มันแสดงให้เห็นใน xev แต่ไม่ได้ทำงานในเครื่องยนต์ Valve Source 2
Velkan

1

หากคุณไม่ต้องการให้Caps LockกุญแจมีผลตามปกติคุณสามารถปิดLockตัวปรับแต่งได้ในขณะที่ยังคงรักษาCaps_Lockkeysym ไว้

xmodmap -e 'clear Lock'

ดูเหมือนจะไม่ปิดการใช้งาน capslock
Chris2048

@ Chris2048 Works For Me ™ อาจเข้ากันไม่ได้กับการตั้งค่า XKB บางอย่างหรือกับแอปพลิเคชันบางตัว (แอปพลิเคชันทำการประมวลผลตัวล็อค Caps ส่วนตัวของพวกเขาส่วนใหญ่ใช้ฟังก์ชั่นไลบรารีเดียวกัน แต่มีข้อยกเว้น)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

0

นี้จะคล้ายกับคำตอบที่ฉันให้สำหรับคำถามอื่น ตัวอย่างรหัส xkb นี้ควรทำเคล็ดลับ

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};

ควรจะไปที่ไหน ฉันได้ดูตัวอย่างชนิดนี้เป็นเวลา 10 นาทีโดยไม่ต้องค้นหาออก ต้องเป็นส่วนหนึ่งของไฟล์ที่สมบูรณ์กว่านี้หรือจะเป็นแบบสแตนด์อโลนและใช้กับการกำหนดค่าเริ่มต้นได้หรือไม่
Nikana Reklawyks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.