วิธีเปลี่ยนเค้าโครงแป้นพิมพ์ใน gnome 3 จากบรรทัดคำสั่ง


15

ฉันใช้ gnome 3.22.1 แต่มีปัญหาอยู่ตั้งแต่ 3.18

ก่อนหน้านั้น (จำรุ่นที่แน่นอนไม่ได้) ฉันสามารถเปลี่ยนรูปแบบแป้นพิมพ์โดยใช้xkb-witchแอปพลิเคชั่นที่เรียบง่ายที่ใช้การผูก X.org ภายใต้ฝากระโปรง

หลังจาก 3.18 หากคุณเรียกใช้ xkb-switch รูปแบบแป้นพิมพ์จะไม่ถูกเปลี่ยนเป็น gnome การตรวจสอบเพิ่มเติมแสดงให้เห็นว่าการสลับเค้าโครงทำงานได้ แต่ใช้เวลาไม่นาน

หากคุณเรียกใช้สคริปต์นี้:

for i in $(seq 1000); do
  lang=$(xkb-switch -s ru; xkb-switch);
  if [[ "$lang" == "ru" ]]; then
    echo $lang;
  fi;
done

คุณจะได้รับการสลับเลย์เอาต์ "successfull" 3 ถึง 20 ทั้งนี้ขึ้นอยู่กับว่าคุณโชคดีแค่ไหน

หลังจาก googling ปัญหานี้ฉันแนะนำต่อไปนี้:

gsettings set org.gnome.desktop.input-sources current 0

การตั้งค่ากำลังเปลี่ยนแปลง แต่เค้าโครงยังคงเหมือนเดิม

ฉันพบวิธี "แฮ็ก" หนึ่งวิธีในการเปลี่ยนเค้าโครง:

setxkbmap us,ru
setxkbmap ru,us

แต่เชลล์ gnome ไม่รับรู้ถึงการเปลี่ยนแปลงนั้นและแสดงภาษาที่ไม่ถูกต้องในตัวบ่งชี้เค้าโครง

ฉันโพสต์เกี่ยวกับปัญหานี้แล้ว (ขออภัยมีชื่อเสียงไม่เพียงพอ https: //bbs.archlinux.org/viewtopic.php? pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15) แต่โชคไม่ได้รับคำตอบที่ดี

และ ณ จุดนี้ฉันติดอยู่ ฉันไม่ชำนาญพอที่จะระบุปัญหาในรหัสเชลล์ gnome ฉันไม่แน่ใจด้วยซ้ำว่ามันเป็นปัญหา (คำพังเพย)

สิ่งที่ฉันต้องการคือวิธีที่gnome-awareเพื่อเปลี่ยนเค้าโครงแป้นพิมพ์จากเทอร์มินัล ใครบางคนชี้ให้ฉันในทิศทางที่ถูก? ฉันควรไฟล์นี้เป็นข้อผิดพลาด (โดยเฉพาะอย่างยิ่งความจริงที่ว่ารูปแบบแป้นพิมพ์ไม่สามารถเปลี่ยนผ่านการตั้งค่า)

คำตอบ:


9

เนื่องจาก gnome-shell แสดงอินเตอร์เฟส JS eval บน DBus ซึ่งมีการเข้าถึงตัวแปรทั้งหมดจึงสามารถทำได้โดยใช้คำสั่งต่อไปนี้:

gdbus call --session --dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval \
 "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

ซึ่งจะเปิดใช้งานรูปแบบที่ 0 และอื่น ๆ

เครดิต.


และนี่คือวิธีเปลี่ยนเป็นวิธีป้อนข้อมูลที่ใช้ล่าสุด (จากความคิดเห็น):

gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources[1].activate()"

ขอบคุณสำหรับคำตอบ - มันช่วยฉันได้เยอะมาก! และนี่คือวิธีสลับไปยังวิธีป้อนข้อมูลที่ใช้ล่าสุด:gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources[1].activate()"
Envek

4

หากคุณใช้ IBus เป็นวิธีป้อนข้อมูล (ซึ่งเป็นค่าเริ่มต้นที่น่าจะเป็นไปได้) คุณสามารถเปลี่ยนอินพุตของคุณโดยใช้ibusคำสั่ง:

# Set the layout to US English
ibus engine xkb:us::eng
# Set the input method to Japanese Mozc IME
ibus engine mozc-jp
# Set the layout to Russian
ibus engine xkb:ru::rus

คุณสามารถดูเลย์เอาต์ที่มีทั้งหมดด้วยibus list-engineคำสั่ง

จะต้องมีการตั้งข้อสังเกตวิธีนี้จะไม่เปลี่ยนตัวบ่งชี้ภาษาแม้ว่ามันจะทำงานได้อย่างน่าเชื่อถือ


เหมือนกับsetxkbmap us- ไม่มีวิธีการเปลี่ยนเค้าโครงโดยใช้ทางลัดมาตรฐานหลังจากนั้น
sanmai

@sanmai ไม่มากเหมือนกัน - มันเป็นไปไม่ได้ที่จะเปลี่ยนภาษาต้อง IME (ญี่ปุ่น, จีน, ฯลฯ ) setxkbmapโดยใช้ นอกจากนี้ยังsetxkbmapสามารถใช้บั๊กกี้ธรรมดาในสภาพแวดล้อม WM ที่ทันสมัยดูคำถามสำหรับรายละเอียดเกี่ยวกับเรื่องนี้
undercat ปรบมือโมนิกา

ไม่สามารถแสดงความคิดเห็นกับทางลัดเริ่มต้นที่ไม่สามารถใช้งานได้ - ฉันใช้ตัวเลือกที่กำหนดเองสำหรับทุกรูปแบบที่ฉันใช้
undercat ปรบมือโมนิกา

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

3

gsettingsการใช้

การตั้งค่าorg.gnome.desktop.input-sources.sourcesเป็นรายการว่าง "[]" อนุญาตให้คุณใช้การกำหนดค่าแป้นพิมพ์เซิร์ฟเวอร์ Xโดยไม่ต้องใช้gnome-shellพยายามกำหนดค่าเพื่อให้คุณสามารถทำได้เหมือนก่อน

$ gsettings set org.gnome.desktop.input-sources sources '[]'

เมื่อฉันลองทำสิ่งนี้ Gnome Terminal ของฉันจะติดอยู่ที่ QWERTY ไม่ว่าsetxkbmapจะพิมพ์คำสั่งกี่คำสั่งหลังจากนั้นจนกว่าฉันจะใส่แหล่งสัญญาณเข้ากลับผ่านกล่องโต้ตอบการตั้งค่า
สิลาส S. บราวน์มี. ค.


0

คุณสามารถตั้งค่าและเปลี่ยนเป็นวิธีการป้อนข้อมูลบนบรรทัดคำสั่งแม้ว่าคุณจะไม่ได้ตั้งค่าวิธีการป้อนข้อมูลด้วยเมาส์ก่อนหน้านี้:

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'ru')]"

สำหรับ Dvorak ให้ใช้us+dvorak(หรือgb+dvorakถ้าคุณอยู่ในสหราชอาณาจักรหรืออะไรก็ตาม)

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