Geçerli gnome klavye düzenini terminalden nasıl alabilirim?


15

Bir bash komut dosyasında kullanım için, kullanıcının şu anda kullandığı gnome klavye düzenini almam gerekiyor. Örneğin, kullanıcı klavye düzenini olarak en-usayarlarsa, bunu yazdıran bir bash komutuna ihtiyacım var.

Bu bilgiyi nasıl alabilirim?

Güncelleme:

setxkbmap -querymaalesef çalışmıyor. Aşağıda en(ilk komut) ve de(ikinci komut) düzeninin etkinleştirilmiş olduğu çıkış yer almaktadır. Klavye düzenini değiştirmenin gnome oturumu yapılandırmasıyla bir ilişkisi var gibi görünüyor

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)" };
};

Ne yazık ki bash değil, ama libxklavier kullanarak, sormak istediğinizi yapmak için bir [python örneği] [1]: [1]: cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py
balonlar

1
<rant> xkb belgesiz bir cehennemdir! Bu çoklu düzen tanımları güvenilir bir şekilde çalışmaz; benim için aniden rastgele zamanlarda değiştiler ve askıya alındıktan sonra, tanımlanmış düzenlerden hangisinin etkili olduğunu ve - daha kötüsü - bağımsız olarak eklenen her klavye için bağımsız olarak belirlendi. Evet, xkb aslında farklı klavyeler için farklı düzenlere sahip olabilir, ancak bu bildiğim kadarıyla herhangi bir yerde belgelenmedi ve bu nedenle bu özelliğin yaptığı tek şey bizi rahatsız ediyor çünkü kontrol edemiyoruz. xkb, cidden, beni başlatma! </rant>
Christian

Yanıtlar:


9

Stackoverflow ile ilgili benzer bir soruya göre , aşağıdakileri yapmalıdır:

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

Şu anda X ile hiçbir * nix makinem olmadığı için bunu doğrulayamadım (evde değilim) ...


1
Setxkbmap -print'i çalıştırmak aşağıdakileri döndürür. Bunun OP'ye yardým ettiđini sanmýyorum. 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)" }; };
balonlar

Şu anda aktif "biz" düzeniniz var mı? Girdiniz göz önüne alındığında, yukarıdaki ifadenin çıktı olarak ürettiği şey budur (sadece şu iki harf: "biz"). Farklı bir düzene geçtiğinizde nasıl görünüyor?
Izzy

2
Cevabınız için teşekkürler. Ne yazık ki bu hile yapmıyor. İki kere bizi yakaladım. Size çıkışını göstermek için sorumu düzenledim.
ftiaronsem

denemeye değerdi. -vAyrıntı düzeyini artıran ve böylece daha fazla bilgi veren parametreyi (birden çok kez) belirlemeye çalışabilirsiniz . Her ikisi için çalışması gerekir -querysıra sıra -print. Çok dilli kurulumum olmadığından, ihtiyacınız olan ayrıntıyı sağlayıp sağlamadığını söyleyemem - ancak 3 kez -vçıktı ile "uygulanan kurallar" ve "tuş haritası" na ayrılır. İkincisi tam bilgi gibi görünüyor, bu yüzden ilk kısım "şu anda aktif kısım" olabilir.
Izzy

tekrar teşekkürler, ama talihsiz bu da işe yaramadı. Düzen değişikliğinden önce ve sonra aynı çıktı. Ayrıntılardan bağımsız.
ftiaronsem

4

Ubuntu 17.10 veya üstü için

Ubuntu 17.10'da , GNOME ile, giriş kaynağını değiştirdiğinizde geçerli gsettings değeri değişmez. Bunun yerine bir orada mru-kaynakları listeler anahtar m ost r ecently u giriş kaynaklarını sed.

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

Bu listedeki ilk kaynak geçerli kaynaktır, bu nedenle geçerli düzeni elde etmek için bir oneliner şöyle görünebilir:

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

Ubuntu 17.10 sisteminde Unity kullanıyorsanız bu cevabın geçerli olmadığını lütfen unutmayın. Unity ile daha önce olduğu gibi çalışmaya devam eder.


3

Ubuntu 13.04 ve altı için

xkblayout-stateAracı kullanabilirsiniz . Açıklama, derleme, kurulum ve kullanım için README.md dosyasına bakın .

Aşağıdaki komut tam olarak istediğinizi yapar:

xkblayout-state print "%s"

Ubuntu 13.10 ve üstü için

Ubuntu 13.10 bu anlamda bazı iyi gelişmelerle geldi ve aşağıdaki basit bash işlevini kullanabilirsiniz:

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 }'
}

Aşağıdaki komutlar 13.10'da da çalışır:

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

veya:

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

2

Terminal'i açmak için klavyenizdeki Ctrl+ Alt+ tuşlarına basmanız Tyeterlidir. Açıldığında aşağıdaki komutu çalıştırın.

setxkbmap -query

Görmen gereken bu

resim açıklamasını buraya girin


hızlı cevabınız için teşekkürler, ne yazık ki bu çalışmıyor. İşte çıkış (en düzen ile ilk kez, de ile ikinci):
ftiaronsem

soru düzenleme olarak yapıştırılan biçimlendirme nedeniyle ...
ftiaronsem

1
hızlı cevap için tekrar teşekkürler. Bu gördüğüm şey inded, ama bana Alman ya da amerikan düzenini seçip seçmediğimi söylemiyor. Yoksa bir şey mi kaçırdım?
ftiaronsem

2

Terminali kullanarak, 'pt' ve 'biz' arasında değişen bir test yaptım ve her değişiklikten sonra başarıyla kullanılan klavye düzenini topladım:

Etkin klavye düzenini edinin

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
  • Yapılandırmayı yazdırın: setxkbmap -print
  • Önemli olan çizgiyi toplayın: grep xkb_symbols
  • dizeyi ilk "+" işaretinden sonra alır: awk -F"+" '{print $2}'

'Biz' düzeninin etkin olduğu çıktı: us


Düzenler arasında geçiş yapma

sudo setxkbmap -option grp:alt_shift_toggle pt

Geçilecek dil kodu 'pt' yazdığı yerden geçin.

resim açıklamasını buraya girin

Not: Ubuntu 12.04 (Hassas Pangolin) üzerinde Gnome kullanıyorum


Cevabınız için teşekkürler. Sorun, kullanıcıların görev çubuğu uygulamasını kullanarak mizanpajlar arasında geçiş yapma eğiliminde olduğu anlaşılıyor. Biri cmd'den düzen değiştiriyorsa çalışır, ancak kullanıcı görev çubuğu uygulamasıyla geçiş yaparsa çalışmaz.
ftiaronsem

@ftiaronsem, Daha önce bu kısımdan bahsetmedin :) Ben içine bakacağım ve mümkünse cevabımı güncelleyeceğim!
Zuul

0

Ubuntu 13.10 veya Üstü için

(Önceki sürümlerde çalışıp çalışmadığından emin değilim)

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"

Daha fazla seçenek görmek için:

gsettings list-recursively org.gnome.desktop.input-sources
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.