टर्मिनल से वर्तमान सूक्ति कीबोर्ड लेआउट कैसे प्राप्त करें?


15

एक बैश स्क्रिप्ट में उपयोग के लिए, मुझे उस सूक्ति कीबोर्ड लेआउट को प्राप्त करने की आवश्यकता है जिसका उपयोगकर्ता वर्तमान में उपयोग कर रहा है। उदाहरण के लिए यदि उपयोगकर्ता इसका कीबोर्ड लेआउट सेट करता है en-us, तो मुझे एक bash कमांड की आवश्यकता है जो मुझे यह प्रिंट करता है।

मुझे वह जानकारी कैसे मिल सकती है?

अपडेट करें:

setxkbmap -queryकाम नहीं कर रहा है। नीचे en(प्रथम कमांड) और de(दूसरा कमांड) लेआउट सक्रिय है। प्रतीत होता है कि कीबोर्ड लेआउट स्विचिंग का गनोम सत्र कॉन्फ़िगरेशन से कुछ संबंध है

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 का उपयोग करते हुए, यहां एक [अजगर उदाहरण] [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}'

मैं इसे सत्यापित नहीं कर सका, क्योंकि मेरे पास वर्तमान में एक्स के साथ कोई * निक्स मशीन उपलब्ध नहीं है (मैं घर नहीं हूँ) ...


1
चल रहा है setxkbmap -प्रिंट निम्न देता है। मुझे नहीं लगता कि इससे ओपी को मदद मिलती है। 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)" }; };
गुब्बारे

तो आपके पास वर्तमान में "हमें" लेआउट सक्रिय है? आपके इनपुट को देखते हुए उपरोक्त कथन, आउटपुट के रूप में उत्पन्न होगा (केवल वे दो अक्षर: "हम")। जब आप किसी अन्य लेआउट पर स्विच करते हैं तो यह कैसा दिखता है?
इज़्ज़ल

2
आपके उत्तर के लिए धन्यवाद। Unfortunatelly यह चाल नहीं कर रहा है। दोनों बार मुझे मिलता है। मैंने आपको ouput दिखाने के लिए अपना प्रश्न संपादित किया है।
१18:१em बजे ftiaronsem

एक कोशिश के काबिल था। आप -vपैरामीटर (कई बार) को निर्दिष्ट करने का प्रयास कर सकते हैं , जो वर्बोसिटी बढ़ाता है और इस प्रकार अधिक जानकारी देता है। दोनों के लिए, -queryसाथ ही साथ काम करना चाहिए -print। जैसा कि मेरे पास कोई मल्टीलैंग सेटअप नहीं है, मैं नहीं बता सकता कि क्या यह आपके लिए आवश्यक विवरण प्रदान करता है - लेकिन -vयहां 3 गुना आउटपुट के साथ "लागू नियम" और "कीमैप" में विभाजित है। उत्तरार्द्ध पूरी जानकारी लगता है, इसलिए पहले भाग में "वर्तमान में सक्रिय भाग" हो सकता है।
इज़्ज़ल

धन्यवाद फिर से, लेकिन दुर्भाग्यपूर्ण यह भी काम नहीं किया। लेआउट बदलने से पहले और बाद में समान आउटपुट। स्वतंत्र रूप से क्रिया की।
ftiaronsem

4

Ubuntu 17.10 या बाद के लिए

Ubuntu 17.10 में, GNOME के ​​साथ, जब आप इनपुट स्रोत स्विच करते हैं तो वर्तमान gsettings मान नहीं बदला जाता है। इसके बजाय एक mru- स्रोत कुंजी है जो m ost r ecently u sed इनपुट स्रोतों को सूचीबद्ध करती है।

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

उस सूची में पहला स्रोत वर्तमान एक है, इसलिए वर्तमान लेआउट को प्राप्त करने के लिए एक ऑनलाइनर इस तरह दिख सकता है:

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

कृपया ध्यान दें कि यदि आप Ubuntu 17.10 सिस्टम पर एकता का उपयोग करते हैं तो यह उत्तर लागू नहीं होता है। एकता के साथ यह पहले की तरह काम करता रहता है।


3

उबंटू 13.04 और उससे कम के लिए

आप xkblayout-stateटूल का उपयोग कर सकते हैं । विवरण, संकलन, स्थापना और उपयोग के लिए README.md फ़ाइल देखें ।

निम्न आदेश आपको वही चाहिए जो आप चाहते हैं:

xkblayout-state print "%s"

उबंटू 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खुला टर्मिनल के लिए अपने कीबोर्ड पर। जब यह खुलता है, तो नीचे कमांड चलाएँ।

setxkbmap -query

यह आपको देखना चाहिए

यहाँ छवि विवरण दर्ज करें


आपके शीघ्र उत्तर के लिए धन्यवाद, दुर्भाग्यपूर्ण यह काम नहीं कर रहा है। यहाँ ouput (एन लेआउट के साथ पहली बार, डी के साथ दूसरा):
ftiaronsem

प्रश्न संपादित के रूप में चिपकाने के कारण ...
ftiaronsem

1
आपके शीघ्र उत्तर के लिए फिर से धन्यवाद। यह वह है जो मैं देख रहा हूं, लेकिन यह मुझे नहीं बताता है कि क्या मैंने जर्मन या अमेरिकी लेआउट का चयन किया है। या मुझसे कोई चीज चूक रही है?
फितरोनसेम

2

टर्मिनल का उपयोग करते हुए, मैंने 'pt' और 'us' के बीच एक परिक्षण को चलाया है, और हर परिवर्तन के बाद, मैंने कीबोर्ड लेआउट को अपने साथ रखा जा रहा है:

सक्रिय कीबोर्ड लेआउट प्राप्त करें

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
  • कॉन्फ़िगरेशन प्रिंट करें: setxkbmap -print
  • मायने रखती है कि लाइन ले लीजिए: grep xkb_symbols
  • पहले "+" साइन के बाद स्ट्रिंग मिलती है: awk -F"+" '{print $2}'

सक्रिय 'हमें' लेआउट वाला आउटपुट है: us


लेआउट के बीच तैरना

sudo setxkbmap -option grp:alt_shift_toggle pt

पास करें जहां यह 'pt' पढ़ता है, जिस पर स्विच करने के लिए भाषा कोड।

यहाँ छवि विवरण दर्ज करें

नोट: मैं Ubuntu 12.04 (सटीक पैंगोलिन) पर सूक्ति का उपयोग कर रहा हूं


आपके उत्तर के लिए धन्यवाद। समस्या यह प्रतीत होती है कि उपयोगकर्ता टास्क-बार एप्लेट का उपयोग करके लेआउट के बीच स्विच करते हैं। यदि कोई व्यक्ति cmd से लेआउट स्विच कर रहा है तो यह काम करता है, लेकिन यदि उपयोगकर्ता बार बार एप्लेट के साथ स्विच करता है तो यह काम नहीं करता है।
ftiaronsem

@ftiaronsem, आपने पहले उस भाग का उल्लेख नहीं किया है :) मैं इसे देखूंगा और यदि संभव हो तो अपना उत्तर अपडेट कर सकता हूं!
जूल

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.