it-swarm-tr.com

Geçerli klavye düzenini nasıl edinebilirim?

Mevcut klavye düzenini döndüren herhangi bir komut satırı aracı olduğunu merak ediyorum.

XkbLayout ayarını us, ru.

Güncelleme:setxkbmap seçilen düzeni değil, düzen ayarlarını döndürür. Örneğin.:

$ setxkbmap -print | grep xkb_symbols
xkb_symbols   { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)+terminate(ctrl_alt_bksp)"   };

Mevcut düzen ne olursa olsun aynı sonucu döndürür.

61
Andrew

Belki bu sürüme bağlıdır, ancak setxkbmap 1.3.0 kullanan makinemde aşağıdaki komut çalışır:

setxkbmap -query | grep layout

İhtiyacınıza bağlı olarak yalnızca düzeni bilmenin işe yaramayabileceğini unutmayın: örneğin ABD düzeninin Dvorak varyantı, varsayılan QWERTY'den oldukça farklıdır. -querysetxkbmap seçeneği hem düzeni hem de değişkeni farklı alanlar olarak verir:

$ setxkbmap -query
rules:      evdev
model:      default
layout:     fr
variant:    bepo
options:    grp:alt_shift_toggle
33
mars

Bu şekilde tarif edilen xkb anahtarı vardır:

xkb-switch, XKB mizanpaj durumunu sorgulamaya ve değiştirmeye izin veren bir C++ programıdır.

https://github.com/ierton/xkb-switch

Veya nozimica'nın önerisini uygulayarak şunları kullanabilirsiniz:

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

Arch Linux panolarındaki bu konudan: https://bbs.archlinux.org/viewtopic.php?pid=539406

21
jasonwryan

Evet THERE IS istediğini yapan bir komut satırı aracı! Sadece 10 dakika önce keşfettim :)

Şuraya bakın: https://github.com/nonpop/xkblayout-state

xkblayout-state print "%s"

tam olarak istediğinizi yapar (satır sonu vermez, bu nedenle ; echo Eğer ihtiyacın varsa). yardım için parametresiz aracı çalıştırın.

14
Pablo Saratxaga

Geçerli düzenin kodunu almak için bunu kullanın:

$(xset -q|grep LED| awk '{ print $10 }')

Bunun, aşağıdaki gibi bir forma dönüştürülmesi gerekebilir:

case "$(xset -q|grep LED| awk '{ print $10 }')" in
  "00000002") KBD="English" ;;
  "00001002") KBD="Thai" ;;
  *) KBD="unknown" ;;
esac
11
Pepa

Daha basit bir yaklaşım, çünkü xset -q komutu, bu:

xset -q | grep -A 0 'LED' | cut -c59-67

Yazdırıyor 00000002 veya 00001002 geçerli klavye düzeninize bağlı olarak.

9
nikospag

Daha yeni sistemlerde,

localectl status

Örneğin size aşağıdakileri gösterecektir:

System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
8
oLen

Şimdiye kadar cevaplar benim için işe yaramadı. Herhangi bir -print Veya -query Her zaman ikisini döndürecek şekilde iki düzen İngilizce ve çek ile setkbmap kullanıyorum. xset -q İçin LED durumuna geçilmesi, tüm klavye ledlerinin durumunu gösterdiği için de çalışmaz.

Şimdiye kadar en iyisi, bu küçük yardımcı programı hızlı bir şekilde yazmaktı: https://Gist.github.com/fikovnik/ef428e82a26774280c4fdf8f96ce8eeb

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <X11/XKBlib.h>
#include <X11/extensions/XKBrules.h>

int main(int argc, char **argv) {
  Display *dpy = XOpenDisplay(NULL);

  if (dpy == NULL) {
    fprintf(stderr, "Cannot open display\n");
    exit(1);
  }

  XkbStateRec state;
  XkbGetState(dpy, XkbUseCoreKbd, &state);

  XkbDescPtr desc = XkbGetKeyboard(dpy, XkbAllComponentsMask, XkbUseCoreKbd);
  char *group = XGetAtomName(dpy, desc->names->groups[state.group]);
  printf("Full name: %s\n", group);

  XkbRF_VarDefsRec vd;
  XkbRF_GetNamesProp(dpy, NULL, &vd);

  char *tok = strtok(vd.layout, ",");

  for (int i = 0; i < state.group; i++) {
    tok = strtok(NULL, ",");
    if (tok == NULL) {
      return 1;
    }
  }

  printf("Layout name: %s\n", tok);

  return 0;
}

ve kullanarak derleyin

gcc -I/usr/include getxkblayout.c -lX11 -lxkbfile

5
fikovnik

Geçerli düzeni yazdırmak için xkbprint kullanabilirsiniz.

Örneğin, geçerli düzeni PDF use

xkbprint -color "${DISPLAY}" - |\
    ps2pdf - > current_keyboard_layout.pdf

hangi üretir:

xkbprint result

3
Flow

Arch Linux forumlarındaki Goosfrabaa :

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

Bu, burada doğru şekilde çalışır ve us(dvorak-intl) (GNOME klavye seçim menüsünde "USA Dvorak international" olarak görüntülenir) yazdırır.

2
l0b0

Kısmi cevap: KDE'de, geçerli klavye düzenini qdbus komutuyla elde edebilirsiniz:

$ qdbus org.kde.keyboard /Layouts getCurrentLayout
gb(intl)

Yapılandırılmış birkaç düzenim var, ancak yalnızca şu anda kullanımda olanı gösteriyor.

Kubuntu 18.04 (qdbus sürüm 4.8.7) üzerinde test edilmiştir. Qt olmayan ortamlar için başka d-bus tabanlı çözümler olabilir, ancak bunları bilmiyorum.

1
Qeole
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e)


keyboardLayout () {
    layout=$(variableInFile "KEYMAP" "/etc/vconsole.conf")
    echo ${layout}
}


variableInFile () {
    variable=${1}
    file=${2}

    source ${file}
    eval value=\$\{${variable}\}
    echo ${value}
}


keyboardLayout