"คีย์เพื่อเลือกระดับ 5" ในคุณสมบัติของ gnome-keyboard- ทำอะไร


18

มีตัวเลือกในการระบุคีย์ที่จะใช้ในการเข้าถึงระดับ 5 บนแป้นพิมพ์ในgnome-keyboard-properties("แป้นพิมพ์" ภายใต้ฮาร์ดแวร์ในการตั้งค่าระบบ):

สกรีนช็อตของกล่องโต้ตอบดังกล่าว

แต่ถ้าฉันตั้งค่าระดับที่ 5 เป็นAltGrและระดับที่สามเป็นRight Ctrlและถ้าฉันตั้งค่าคีย์ 54 ดังนี้:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

ฉันได้รับผลลัพธ์ดังต่อไปนี้จากการกดชุดรูปแบบที่แตกต่างกัน:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. แล้วโมดิฟายเออร์ระดับ 5 ทำหน้าที่อะไร?

  2. ฉันจะตั้งค่าเพื่อที่ฉันจะได้รับ 5 หรือหกตัวละครที่แตกต่างกันออกจากคีย์เดียว (แก้ไขโดยShift, Alt GrและRight Ctrlตัวอย่าง)?

คำตอบ:


15

“1 แล้วโมดิฟายเออร์ระดับ 5 ทำอะไร?”

มันเลือกระดับที่ห้า ตัวปรับเปลี่ยนระดับที่ 2 (เพียงแค่กะปกติ) จะเลือกระดับที่สองและระดับที่ 3 จะเลือกระดับที่สาม

เหตุผลที่โมดิฟายเออร์ระดับที่ 5 เลือกระดับที่ห้าแทนที่จะเป็นระดับที่สี่ (หลังจากที่โมดิฟายเออร์ระดับที่ 3) คือการที่โมเดอเรเตอร์ทั้งสามนี้สามารถรวมกันได้หลายวิธีเพื่อเลือกแปดระดับที่แตกต่างกัน ซึ่งเพิ่งกดคีย์โดยไม่มีตัวดัดแปลงใด ๆ ) มีชุดค่าผสมแปดชุดตั้งแต่ 2 ↑ 3 = 8 สำหรับตัวดัดแปลงสองชุดแรกมีชุดค่าผสมสี่ชุด:

  • ไม่มีตัวดัดแปลง (ระดับ 1)
  • ตัวดัดแปลงระดับที่สอง, aka shift (ระดับ 2)
  • ปรับปรุงระดับที่ 3 (ระดับ 3)
  • ตัวดัดแปลงที่ 2 และ 3 (ระดับ 4)

การเพิ่มตัวปรับเปลี่ยนที่สาม (ระดับที่ 5) จะเพิ่มอีกสี่ระดับ

“2 ฉันจะตั้งค่าอย่างไรเพื่อที่ฉันจะได้อักขระ 5 หรือหกตัวที่แตกต่างจากปุ่มเดียว (แก้ไขโดย Shift Alt GrและRight Ctrlตัวอย่าง)?”

ก่อนอื่นคุณต้องใช้เลย์เอาต์ที่ใช้อักขระอย่างน้อยห้าตัวต่อคีย์ คุณสามารถเลือกเค้าโครงที่มีอยู่ได้ แต่หากคุณต้องการเพิ่มระดับให้กับเลย์เอาต์ที่คุณกำลังใช้งานอยู่นั่นอาจไม่เหมาะสม ตัวอย่างเช่นมีเค้าโครงแป้นพิมพ์Neo († 1) แต่นั่นคือ "ปรับให้เหมาะสมสำหรับภาษาเยอรมัน" ดังนั้นจึงไม่เหมาะสำหรับผู้พูดภาษาอังกฤษส่วนใหญ่

ถึงกระนั้นก็อาจแนะนำให้ดูที่ปุ่ม Neo ได้เลือกสำหรับตัวปรับแต่งระดับ 5

เลย์เอาต์ใหม่

เห็นได้ชัดว่า Neo เรียกโมดิฟายเออร์ระดับ 5 สำหรับ“ Mod4” ดังนั้นคุณจะเห็นว่ามันใช้ปุ่มทางด้านขวาของปุ่ม Shift ด้านซ้าย ( LSGT) และปุ่ม alt ด้านขวา /AltGrคีย์ นี่เป็นแป้นพิมพ์แบบยุโรป (105 แป้น) ซึ่งเมื่อเทียบกับแป้นพิมพ์สหรัฐฯ (104 ปุ่ม) มีการเลื่อนซ้ายแคบและปุ่มย้อนกลับสูงและผอม สำหรับรูปแบบแป้นพิมพ์ซึ่งขึ้นอยู่กับแป้นพิมพ์สหรัฐฯหนึ่งอาจต้อง - หรือต้องการ - เลือกแป้นอื่น ๆ

การเลือกคีย์ตัวปรับแต่งระดับ 5

ในคำตอบของ sup เขาเลือกที่จะใช้ Xmodmap เครื่องมือทุกวันนี้อย่างเช่น Setxkbmap ถูกแนะนำผ่าน Xmodmap Xkb มาพร้อมกับตัวเลือกที่กำหนดไว้ล่วงหน้ามากมายสำหรับสิ่งต่าง ๆ เช่นการเลือกตัวปรับแต่งระดับ 5 หากคุณปรึกษา man xkeyboard-configและค้นหาlv5ตัวเลือกเหล่านี้:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

ดังนั้นตัวเลือกที่ได้รับการบันทึกไว้คือ LSGTกุญแจปุ่ม alt ขวาแป้น Windows ขวาและแป้น Windows ซ้าย ดังที่เราเห็น Neo ใช้สองตัวเลือกแรก

สมมติว่าคุณต้องการใช้lv5:ralt_switch_lockตัวเลือกบางรูปแบบ คำสั่งนี้ตั้งค่าusเลย์เอาต์ด้วยคีย์ตัวปรับแต่งระดับ 5:

setxkbmap -option "lv5:ralt_switch_lock" us

ดังนั้นสำหรับตัวเลือกใด ๆ ที่มีการบันทึกไว้man xkeyboard-configให้ใช้เป็นอาร์กิวเมนต์-optionเมื่อใช้ Setxkbmap

ในกรณีที่ตัวเลือกเหล่านี้ไม่เพียงพอและคุณต้องการกำหนดคีย์อื่นให้เป็นตัวปรับแต่งเลเวล 5 แนะนำให้ดูที่การประกาศสำหรับตัวเลือกเหล่านี้ /usr/share/X11/xkb/symbols/level5พวกเขาดูเหมือนจะอยู่ใน การประกาศสำหรับ lv5:ralt_switch_lockหน้าตาแบบนี้:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

ด้านขวาของsymbols[Group1]ประกาศคีย์หรืออักขระแต่ละระดับของคีย์ควรสร้าง สิ่งนี้ใช้ระดับแปดที่เป็นไปได้ทั้งหมดเนื่องจากควรล็อคตัวปรับแต่งระดับ 5 เมื่อกดพร้อมกับปุ่ม Shift ระดับ 5 อีกระดับหนึ่ง ดังนั้นระดับ 5-8 จะปล่อยออกISO_Level5_Lockมาเนื่องจากระดับ ทั้งหมดเหล่านี้เข้าถึงได้โดยกด shift ระดับ 5 ค้างไว้และรวมกันของปุ่ม Shift อื่น ๆ (ไม่มีให้ทั้งหมด) หากคุณต้องการเพียงแค่การทำงานแบบกะและไม่ใช่พฤติกรรมแบบกดปุ่มถ้ากดสองครั้งคุณสามารถประกาศได้ง่ายกว่า (จากไฟล์เดียวกัน):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

การเพิ่มเลเวลพิเศษให้กับเลย์เอาต์

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

คุณสามารถสร้างเลย์เอาต์ใหม่โดยการคัดลอกไฟล์โดยใช้เลย์เอาต์ของคุณไปยัง /usr/share/X11/xkb/symbols/หรือที่ใดก็ตามที่เครื่องมือ Xkb ของคุณค้นหาเลย์เอาต์ แต่นี่ต้องใช้สิทธิ์ sudo ดังนั้นจึงไม่ใช่ทางออกที่ดีที่สุด หรือคุณสามารถคัดลอกโครงสร้างไดเรกทอรีของxkb/ และวางรูปแบบของคุณได้ในภายใต้ไดเรกทอรีที่เหมาะสมคือxkb/ เพื่อบอกว่าคุณได้ทำไฟล์symbols/ xkb-tree/symbols/my-layoutsเพื่อให้รูปแบบการใช้งานที่กำหนดไว้ในแฟ้มนี้คุณสามารถใช้-print ตัวเลือกในการแล้วท่อออกไปsetxkbmap xkbcompสคริปต์แรปเปอร์นี้ใช้โครงร่างเป็นอินพุต:

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

เท่าที่ไฟล์ที่มีเลย์เอาต์นั้นสมมติว่าเราต้องการขยายเลย์เอาต์ "US international" ซึ่งใช้สี่ระดับ ก่อนอื่นเราตั้งค่าปุ่ม Shift ระดับ 3 และระดับ 5 ในลักษณะเดียวกับที่ Neo ทำ:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

ตอนนี้เราต้องการเพิ่มตัวละครพิเศษ ลองใช้สี่ปุ่มแรกของรูปแบบ Qwerty เป็นตัวอย่าง ปุ่มเหล่านี้เป็นQไปRซึ่งสอดคล้องกับการ<AD01> <AD04>ก่อนอื่นเราต้องทำให้กุญแจสามารถใช้งานได้มากถึงแปดระดับ:

key.type[Group1] = "EIGHT_LEVEL";

สำหรับแรกสี่ระดับเพื่อที่จะไม่ redefine NoSymbolพวกเราแผนที่ให้พวกเขา จากนั้นเราเพิ่มสองระดับ ในระดับ 5 เราเพิ่มลูกศร←↓↑→(† 2) ในระดับ 6 เราเพิ่มปุ่มทิศทาง การจัดวางของเรามีลักษณะดังนี้:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

ในการใช้งานเราสามารถใช้สคริปต์ตัวตัดคำที่เราสร้างขึ้น:

./setxkbmap-wrapper "my-layouts(mine)"

† 1: Neo อยู่de(neo)ใน Xkb; setxkbmap "de(neo)".

† 2: เพื่อที่จะหาชื่อสัญลักษณ์ที่ใช้ XKB keysymdef.hค้นหาไฟล์ชื่อ X11/มันควรจะอยู่ภายใต้ไดเรกทอรีชื่อ คุณยังสามารถใช้ชื่อ Unicode ได้เช่นU2192U + 2192


1
ขอบคุณที่สละเวลาเขียนคำตอบนี้ ฉันกำลังมองหาวิธีที่จะใช้ปุ่ม JKLI ของฉันเป็นปุ่มลูกศรในขณะนี้ดังนั้นมันจึงมีประโยชน์อย่างเหลือเชื่อ กรุณาเพลิดเพลินไปกับ 50 คะแนนพิเศษเหล่านี้! (ฉันควรจะสามารถที่จะกำหนดเงินรางวัลในวันพรุ่งนี้.)
Glutanimate

1
ดีขอบคุณนี่เป็นแอนเวิร์สที่ยอดเยี่ยมแม้ว่ามันจะช้าไปหน่อย แต่นั่นก็เป็นสิ่งที่ฉันมองหามานานกว่า (แต่ตอนนี้ GNOME ไม่สนับสนุนการตั้งค่าตัวดัดแปลง - แต่ตราบใดที่มันใช้ไฟล์ปรับแต่งได้ทั้งหมด เป็นอย่างดี)
sup

8

หลังจากขุดนิดหน่อย:

(1) กุญแจสำคัญในการเลือกระดับที่ 5 ทำสิ่งแปลก ๆ (เกี่ยวกับเลย์เอาต์ภาษาฝรั่งเศสบางส่วน) ที่ไม่เกี่ยวข้องกับสิ่งที่ฉันต้องการจะทำ โดยพื้นฐานแล้วมันกำหนดว่าคีย์ใดที่จะทำหน้าที่เป็น ISO_Level5_Shift ISO_Level5_Shift ใช้ในบางรูปแบบที่ไม่ชัดเจน คำตอบนี้จะขึ้นอยู่กับจำนวนของผลการค้นหาใน google ให้เมื่อค้นหาสำหรับ "ISO_Level5_Shift" และเหล่านี้ เชื่อมโยง

(2) ไม่สามารถใช้เพื่อรับ 6 สัญลักษณ์จากกุญแจทางกายภาพเดียว วิธีหนึ่งในการบรรลุเป้าหมายนี้คือการใช้ไฟล์. xmodmap ในไดเร็กทอรี $ HOME

ก่อนอื่นให้สั่ง

xmodmap -pm

ให้สิ่งที่ keysymbols ทำหน้าที่เป็นตัวดัดแปลงต่าง ๆ ในระบบของฉันมันเป็นดังนี้:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  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)

mod3 จำเป็นต้องตั้งค่าเพื่อใช้งาน 6 สัญลักษณ์ด้วยปุ่มเดียว จำเป็นต้องวางลงในไฟล์. xmodmap:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

จากนั้น xmodmap -pm ให้ฉัน:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

โดยที่ keycode 94 เป็นกุญแจสำคัญที่ฉันเลือกทำหน้าที่เป็น mod3 รหัสของคีย์ทางกายภาพต่างๆสามารถพบได้โดยใช้เครื่องมือบรรทัดคำสั่ง xev (เพียงแค่เรียกใช้และกดปุ่มต่าง ๆ คีย์โค้ดจะปรากฏขึ้น)

ถ้าฉันใส่ไฟล์. xmodmap

keycode 54 = 1 2 3 4 5 6

หรือเรียกใช้

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

ฉันได้รับสัญลักษณ์ที่แตกต่างกันหกแบบจากปุ่มเดียวด้วยการใช้ altgr, shift และ keycode 94 (เป็นกุญแจที่ไม่มีประโยชน์ถัดจากการกดซ้ายบนเค้าโครงทางกายภาพของฉัน)

UPDATE: หากคุณต้องการเพียงห้าสัญลักษณ์มันจะสะดวกในการตั้งค่าเช่นนี้:

keycode 54 = 1 2 3 3 5 6

บางครั้งมันก็เกิดขึ้นกับฉันที่ฉันได้รับ 4 แทน 3 อย่างอื่น

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