วิธีรับรูปแบบแป้นพิมพ์ gnome ปัจจุบันจากเทอร์มินัล


15

สำหรับการใช้งานในสคริปต์ทุบตีฉันต้องได้รับเค้าโครงแป้นพิมพ์ gnome ที่ผู้ใช้ใช้อยู่ในปัจจุบัน ตัวอย่างเช่นหากผู้ใช้ตั้งค่ารูปแบบแป้นพิมพ์เป็นen-usฉันต้องการคำสั่ง bash ที่พิมพ์สิ่งนี้ให้ฉัน

ฉันจะรับข้อมูลนั้นได้อย่างไร

ปรับปรุง:

setxkbmap -queryโชคไม่ดีที่ไม่ทำงาน ด้านล่างคือ ouput ที่เปิดใช้งานen(คำสั่งแรก) และdeรูปแบบ (คำสั่งที่สอง) ดูเหมือนว่าการสลับเค้าโครงแป้นพิมพ์มีความสัมพันธ์กับการกำหนดค่าเซสชัน gnome

setxkbmap -query 
rules:      evdev
model:      pc105
layout:     us,de
variant:    ,
options:    terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle

setxkbmap -query
rules:      evdev
model:      pc105
layout:     us,de
variant:    ,
options:    terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle

Update2:

setxkbmap -print #with en-us layout
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};
setxkbmap -print #after switching to german layout
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};

น่าเศร้าที่มันไม่ใช่การทุบตี แต่ใช้ libxklavier ต่อไปนี้เป็น [python example] [1] เพื่อทำตามที่คุณขอ: [1]: cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py
ลูกโป่ง

1
<rant> xkb เป็นนรกที่ไม่มีเอกสาร! คำจำกัดความเลย์เอาต์หลายแบบเหล่านี้ใช้งานไม่ได้ สำหรับฉันแล้วพวกเขาก็เปลี่ยนเป็นแบบสุ่มทันทีและหลังจากที่ถูกระงับมันจะถูกกำหนดแบบสุ่มซึ่งรูปแบบที่กำหนดนั้นมีผลบังคับใช้และ - สิ่งที่เลวร้ายกว่า - อย่างอิสระสำหรับแป้นพิมพ์แต่ละตัวที่ติดตั้ง ใช่ xkb นั้นสามารถมีเลย์เอาต์ที่แตกต่างกันสำหรับคีย์บอร์ดที่แตกต่างกันได้ แต่นี่ไม่ใช่เอกสารเท่าที่ฉันรู้และดังนั้นสิ่งเดียวที่คุณสมบัตินี้ทำให้เรารำคาญเพราะเราไม่สามารถควบคุมมันได้ xkb อย่างจริงจังอย่าให้ฉันเริ่มต้น! </rant>
คริสเตียน

คำตอบ:


9

ตามคำถามที่คล้ายกันในStackoverflowต่อไปนี้ควรทำเคล็ดลับ:

setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'

ฉันไม่สามารถตรวจสอบได้เนื่องจากฉันไม่มีเครื่อง * ที่มี X ให้บริการ (ฉันไม่ได้อยู่บ้าน) ...


1
การรัน setxkbmap -print จะส่งคืนสิ่งต่อไปนี้ ฉันไม่คิดว่าสิ่งนี้จะช่วยให้ OP xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
ลูกโป่ง

ขณะนี้คุณมีเค้าโครง "เรา" ที่ใช้งานอยู่หรือไม่ นั่นคือสิ่งที่คำสั่งข้างต้นให้การป้อนข้อมูลของคุณจะผลิตเป็นเอาท์พุท (เฉพาะสองตัวอักษรเหล่านั้น: "เรา") มันจะมีลักษณะอย่างไรเมื่อคุณเปลี่ยนเป็นเค้าโครงที่แตกต่างกัน?
Izzy

2
ขอบคุณสำหรับคำตอบ. น่าเสียดายที่นี่ไม่ได้หลอกลวง ทั้งสองครั้งฉันได้รับเรา ฉันได้แก้ไขคำถามของฉันเพื่อแสดง ouput ให้คุณ
ftiaronsem

ก็คุ้มค่าที่จะลอง คุณสามารถลองระบุ-vพารามิเตอร์ (หลาย ๆ ครั้ง) ซึ่งเพิ่ม verbosity และให้ข้อมูลเพิ่มเติม ควรจะทำงานให้ทั้งสองเช่นเดียวกับ-query -printเนื่องจากฉันไม่มีการตั้งค่าแบบหลายช่วงเวลาฉันไม่สามารถบอกได้ว่าให้รายละเอียดที่คุณต้องการหรือไม่ แต่ด้วย-vผลลัพธ์3 ครั้งที่นี่จะแบ่งออกเป็น "กฎที่ใช้" และ "keymap" หลังดูเหมือนจะเป็นข้อมูลที่สมบูรณ์ดังนั้นส่วนแรกอาจมี "ส่วนที่ใช้งานอยู่ในปัจจุบัน"
Izzy

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

4

สำหรับ Ubuntu 17.10 หรือใหม่กว่า

ใน Ubuntu 17.10 ด้วย GNOME ค่า gsettings ปัจจุบันจะไม่เปลี่ยนแปลงเมื่อคุณสลับแหล่งอินพุต แทนที่จะมีmru แหล่งที่มาที่สำคัญซึ่งจะแสดงเมตร ost R ecently U sed แหล่งสัญญาณ

$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]

แหล่งที่มาแรกในรายการนั้นคือแหล่งปัจจุบันดังนั้น oneliner เพื่อรับเค้าโครงปัจจุบันอาจมีลักษณะเช่นนี้:

gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*/\1/"

โปรดทราบว่าคำตอบนี้ใช้ไม่ได้ถ้าคุณใช้ Unity บนระบบ Ubuntu 17.10 ด้วย Unity มันยังคงทำงานเหมือนเดิม


3

สำหรับ Ubuntu 13.04 และต่ำกว่า

คุณสามารถใช้xkblayout-stateเครื่องมือ ดูไฟล์README.mdสำหรับคำอธิบายการรวบรวมการติดตั้งและการใช้งาน

คำสั่งต่อไปนี้จะทำสิ่งที่คุณต้องการ:

xkblayout-state print "%s"

สำหรับ Ubuntu 13.10 และสูงกว่า

Ubuntu 13.10 มาพร้อมกับการปรับปรุงที่ดีในแง่นี้และคุณสามารถใช้ฟังก์ชั่นทุบตีง่ายๆดังต่อไปนี้:

get_current_xkblayout () {
      current_input_nr=$(gsettings get org.gnome.desktop.input-sources current | \
          awk '{ print $NF }')
      shift=$(( 2 * ( $current_input_nr + 1 )))
      gsettings get org.gnome.desktop.input-sources sources | tr -d "\',[]()" | \
          awk -v cur="$shift" '{ print $cur }'
}

คำสั่งต่อไปนี้ยังใช้งานได้ใน 13.10:

setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print $2 }'

หรือ:

setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'

2

เพียงกดCtrl+ Alt+ Tบนแป้นพิมพ์เพื่อเปิด Terminal เมื่อเปิดขึ้นให้เรียกใช้คำสั่งด้านล่าง

setxkbmap -query

นี่คือสิ่งที่คุณควรเห็น

ป้อนคำอธิบายรูปภาพที่นี่


ขอขอบคุณสำหรับคำตอบที่รวดเร็วโชคไม่ดีที่นี่ไม่ทำงาน นี่คือ ouput (ครั้งแรกกับ en layout ครั้งที่สองกับ de):
ftiaronsem

เนื่องจากการจัดรูปแบบวางเป็นคำถามแก้ไข ...
ftiaronsem

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

2

เมื่อใช้เทอร์มินัลฉันได้ทำการทดสอบการเปลี่ยนระหว่าง 'pt' และ 'พวกเรา' และหลังจากการเปลี่ยนแปลงทุกครั้งฉันได้รวบรวมเค้าโครงแป้นพิมพ์ที่ใช้งานได้สำเร็จ:

รับเค้าโครงแป้นพิมพ์ที่ใช้งานอยู่

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
  • พิมพ์การกำหนดค่า: setxkbmap -print
  • รวบรวมบรรทัดที่มีความสำคัญ: grep xkb_symbols
  • รับสตริงหลังจากเครื่องหมาย "+" ตัวแรก: awk -F"+" '{print $2}'

เอาต์พุตที่มีโครงร่าง 'us' ที่แอ็คทีฟคือ: us


คุณภาพชั้นหนึ่งระหว่างเค้าโครง

sudo setxkbmap -option grp:alt_shift_toggle pt

ผ่านที่ที่มันอ่าน 'pt' รหัสภาษาเพื่อเปลี่ยนไป

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: ฉันใช้ Gnome บน Ubuntu 12.04 (Precise Pangolin)


ขอบคุณสำหรับคำตอบ. ปัญหาดูเหมือนว่าผู้ใช้มีแนวโน้มที่จะสลับไปมาระหว่างรูปแบบโดยใช้แอปเพล็ตแถบงาน ใช้งานได้หากมีการสลับเค้าโครงจาก cmd แต่ไม่สามารถใช้งานได้หากผู้ใช้สลับกับแอปเพล็ตแถบงาน
ftiaronsem

@ftiaronsem คุณไม่ได้พูดถึงส่วนนั้นมาก่อน :) ฉันจะตรวจสอบและอัปเดตคำตอบถ้าเป็นไปได้!
Zuul

0

สำหรับ Ubuntu 13.10 หรือใหม่กว่า

(ไม่แน่ใจว่าทำงานในรีลีสก่อนหน้าหรือไม่)

current_layout=gsettings get org.gnome.desktop.input-sources current | awk '{print $2}'
gsettings get org.gnome.desktop.input-sources sources | grep -Po "'[[:alpha:]]+'\)" | sed -ne "s/['|)]//g;$(($current_layout+1))p"

วิธีดูตัวเลือกเพิ่มเติม:

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